Poslao: 29 Jun 2008 19:38
|
offline
- leannasamo
- Novi MyCity građanin
- Pridružio: 29 Jun 2008
- Poruke: 5
|
Može li neko da mi pomogne oko sledećeg problema:
ZADATAK: Kreirajte program sa okvirom za listu i napišite kod koji učitava podatke za listu iz tekst datoteke, pre nego što aplikacija postane vidljiva?
Hvala unapred
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 29 Jun 2008 19:45
|
offline
- bobby
- Administrator
- Pridružio: 04 Sep 2003
- Poruke: 24135
- Gde živiš: Wien
|
Sta znaci "okvir za listu"?
Jel'to TListView?
Kako ti izgleda datoteka sa podacima? Jel neki CSV fajl? Ako je CSV, sta koristis kao separator, a sta kao quotation?
|
|
|
|
Poslao: 29 Jun 2008 19:51
|
offline
- leannasamo
- Novi MyCity građanin
- Pridružio: 29 Jun 2008
- Poruke: 5
|
okvir za listu je ListBox.
što se datoteke tiče, obična tekst datoteka iz NotePada, a ostatak pitanja ne razumem. Inače zadatak je iz knjige Delfi za 21 dan i dat je primer za učitavanje win.ini datoteke u listu. E, sad ja ne bih da učitam ništa iz windows direktorijuma nego običan tekst fajl. Da li je moje pitanje jasnije? Početnik sam pa su možda pitanja banalna al evo celo popodne potroših tražeći po knjizi, helpu i forumima odgovor
|
|
|
|
Poslao: 29 Jun 2008 19:58
|
offline
- bobby
- Administrator
- Pridružio: 04 Sep 2003
- Poruke: 24135
- Gde živiš: Wien
|
Ajd pomoci cu.
Kazi mi da li ste ucili klasu TStringList, da bih znao da li smemo da je upotrebimo?
Dopuna: 29 Jun 2008 19:58
Zapravo, jeli zadatak uopste za skolu, ili to sam vezbas onako?
|
|
|
|
|
Poslao: 29 Jun 2008 20:09
|
offline
- bobby
- Administrator
- Pridružio: 04 Sep 2003
- Poruke: 24135
- Gde živiš: Wien
|
Dogovoreno.
Idemo lagano.
Otvori novi projekat i na formu postavi jedan ListBox.
Sada, u Object TreeView odaberi formu (zove se Form1 ukoliko nisi sam dao ime formi), pa dole u Object Inspectoru odaberi karticu Events.
Znaci, napravicemo jedan Event (dogadjaj) na formi.
Pogledaj spisak Eventa, trazimo neki koji se izvrsava pre pojavljivanja forme.
Prvi event koji ce da se desi je OnCreate, pa posle njega ce da se desi OnShow.
Znaci, mozemo da uradimo nesto tokom kreiranja forme (u memoriji, ne na ekranu), ili prilikom pojavljivanja.
Probacemo da iskoristimo OnCreate.
Znaci, klikni u Object Inspectoru duplo na OnCreate (zapravo na prazno polje pored OnCreate).
To ce u editoru da kreira proceduru za taj event.
Javi da li si uspeo ovo dovde, pa da nastavimo.
|
|
|
|
|
Poslao: 29 Jun 2008 20:31
|
offline
- bobby
- Administrator
- Pridružio: 04 Sep 2003
- Poruke: 24135
- Gde živiš: Wien
|
procedure TForm1.FormCreate(Sender: TObject);
var
sl: TStringList;
begin
sl := TStringList.Create;
//ovde ce ici jos koda
sl.Free;
end;
Ovo gore znaci sledece:
U var sekciji smo definisali da cemo u ovoj proceduri koristiti objekat klase TStringList.
Nakon toga smo instancirali objekat. Objekat neke klase je uopsten (kazimo imaginaran) sve dok ga eksplicitno ne instanciras, cime objekat dobija svoje mesto u memoriji itd. itd.
Zadnjom linijom oslobadjamo taj objekat iz memorije.
Delphi sam brine o oslobadjanju objekata koji su kreirani u IDE-u (recimo forme, dugmici itd.)
Svaki objekat koji ti sam kreiras moras sam i da oslobodis, inace ce taj deo RAM memorije koji je on zauzeo ostati zauzet i nakon sto ugasis svoj program (ovo se zove memory leak).
Posto smo malo tupili teoriju idemo dalje.
Uzeli smo TStringList posto ta klasa ima odradjenu proceduru za ucitavanje tekstualnih fajlova, pa ne moramo mi da se mucimo sa pisanjem koda za otvaranje, citanje i zatvaranje fajla na disku.
procedure TForm1.FormCreate(Sender: TObject);
var
sl: TStringList;
begin
sl := TStringList.Create;
sl.LoadFromFile('C:\moj_tekst.txt');
sl.Free;
end;
Elegantno, zar ne
E sada, posto tekst vec imamo ucitan u jedan objekat, potrebno je da ga iz njega prebacimo u ListBox.
procedure TForm1.FormCreate(Sender: TObject);
var
sl: TStringList;
begin
sl := TStringList.Create;
sl.LoadFromFile('C:\moj_tekst.txt');
ListBox1.Items.AddStrings(sl);
sl.Free;
end;
E sada tek videh da je moglo i mnogo prostije
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Items.LoadFromFile('C:\moj_tekst.txt');
end;
Nebitno, video si kako se kreira instanca neke klase
Probaj da iskompajliras, i vidi da li ce da radi.
OnCreate event je malo nezahvalan da u njemu radis nesto nad vizuelnim komponentama. Moze doci do Access Violation ukoliko pokusavas da pristupis komponenti koja jos nije stigla da se instancira.
Ja licno praktikujem da u OnCreate radim samo sa ne-vizuelnim objektima (deklarisem i inicijalizujem varijable i slicno), a da vizuelna podesavanja i rad na vizuelnim objektima uradim tek u OnShow eventu.
Dopuna: 29 Jun 2008 20:31
E da, tekst treba da bude u datoteci C:\moj_tekst.txt
Da bi u programu birao koji fajl ce da se ucita, onda moras da koristis OpenDialog, ali ja to nikako ne bih radio u OnCreate eventu forme. Izgledalo bi mnogo blesavo da program pocne dijalogom za otvaranje fajla.
|
|
|
|
|