Lista, OnDrawItem event

Lista, OnDrawItem event

offline
  • Pridružio: 13 Apr 2007
  • Poruke: 452
  • Gde živiš: Beograd

Imam problem sa listom i praljenjem nje da izgleda lepse.
Da objasnim....znaci svaki item liste treba da ima tri podatka u sebi, u tri nivoa...I za to mi je trebao canvas i on draw item...
U OnDrawItem imam ovo:


Lista.Font.Size := 24;   Lista.Canvas.TextOut(5,5, 'Name: ' + ime1);   Lista.Font.Size := 10;   Lista.Canvas.TextOut(15,25, 'Password: ' + ime2);   Lista.Font.Size := 10;   Lista.Canvas.TextOut(15,60, 'Description: ' + ime3);
Znaci ja pre insertovanja item-a u listu dam podatke variablama ime1, ime2, im3 i on u taj item stavlja te podatke.
A meni se desava da posle inserta on osvezava listu ko lud...hiljadu puta u sekundi....Odnosno ovako...Insertuje item, da mu vrednosti, insertuje drugi item, a ponovo da vrednosti onom prvom...I sad npr. ima samo dva itema da insertuje, ali on i dalje nastavlja da daje vrednosti prvom...
Jel ima neko ideju sta moze da bude i kako to da sredim?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • savkic 
  • Novi MyCity građanin
  • Pridružio: 05 Jun 2007
  • Poruke: 29

> A meni se desava da posle inserta on osvezava listu ko lud...hiljadu puta u > sekundi....

Ako pod osvežavanjem misliš na iscratavanje to je sasvim normalno, windows šalje paint poruke kada je potrebno iscrtati prozor ili deo prozora.

> Odnosno ovako...Insertuje item, da mu vrednosti, insertuje drugi item, a
> ponovo da vrednosti onom prvom...I sad npr. ima samo dva itema da
> insertuje, ali on i dalje nastavlja da daje vrednosti prvom...

Razjasni šta znači davanje vrednosti prvom ili drugom itemu.

Prikazani kod za iscrtavanje za sve stavke prikazivati isto tj. vrednosti imeX, ako je potrebno da se prikazuju vrednosti konkretne stavke onda moraš uzeti Caption (ili Text) stavke koja se iscrtava i nju prikazati. Takođe kod iscrtavanja je bolje da veličinu fonta setuješ na Canvase nego na samoj kontroli.



offline
  • Pridružio: 13 Apr 2007
  • Poruke: 452
  • Gde živiš: Beograd

sacekaj...ne kapiram...znam da ce sve biti isto, ali ja cu kasnije srediti da ne bude isto...
sto je tice iscrtavanje, osvezavanja, ja insertujem jedan item, a on ga onda iscrtava do besvesti...ponovo i ponovo...
ako posle toga insertujem jos jedan, taj drugi ostaje prazan, a on i dalje iscrtava ovaj prvi....ko lud...xD

davanje vredbosti je ustvari iscrtavanje....ali gledaj...ja sam to ovako zamislio....izmenim ime1, ime2, ime3, insertujem item, i on ga iscrta sa nekim podacima iz imeX....onda promenim imeX i opet insertujem item, a on onda iscrta druge podatke-reci...

neznam dal me kapiras....ali ajde...

mozda ima nekih gresaka, ili nejsanih stvari, ali stvarno sam pisao na brzinu....

offline
  • savkic 
  • Novi MyCity građanin
  • Pridružio: 05 Jun 2007
  • Poruke: 29

Prvi tvoj pasus nisam uopšte shvatio tako da ne mogu komentarisati.
Za drugi, ne može to tako kako si zamislio, moraš koristiti caption same stavke koja se iscrtava.

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Svaki item se moze i najverovatnihe hoce biti iscrtan vise od jednog puta. Svaki put kad deo nekog drugog prozora sakrije tvoj, deo liste se ne vidi. Kada taj prozor bude zatvoren, Windows ne zna kako da sam iscrta stavke koje su bile skrivene pa opet moras ti da ih crtas.Isto se desava i kad minimiziras pa ponovo otvoris prozor.

Kad dobijes OnDrawItem event, koji item crtas? Ne mozes samo da crtas poslednji, prvi ili ko zna koji. Ti u tom eventu dobijes index stavke koju treba da nacrtas i gde je njeno mesto na canvas-u. Znaci da u svakom trenutku moras biti u stanju da izvadis sve potrebne podatke za svaku stavku da bi mogao da ih crtas kako treba.

offline
  • Pridružio: 13 Apr 2007
  • Poruke: 452
  • Gde živiš: Beograd

savkic, nije to to...ne moram da koristim caption...

Srki, gledaj...Znam da ja ne mogu da biram item koji cu iscrtavati na ondrawitem....

Kada insertujem item, desava se onDrawItem, tj. on iscrtava item...
U kodu koji sam dao se vidi da mogu da promenim svaku stavku(naravno pre iscrtavanja-inserta), da bude ono sto ja zelim...Promenim imeX, i stavke ce biti drugacije....jel tako?



I sve je to ok, i sve je to tako...nemam problema sa stavkama....

Ali zasto kada insertujem item, on nastavi da ga iscrtava....Znaci nista drugo...Samo postavim insert.Imam onaj kod za stavke u funkciji onDrawitem....i on iscrtava taj item stalno...nista ne radim, ne minimizujem, ne prelazim drugim prozorima(i sta sve nabroja).Onda probam sa debuggerom, i vidim da on sve vreme ispocetka radi OnDrawItem funkciju...Zasto?To mi nije jasno....

offline
  • savkic 
  • Novi MyCity građanin
  • Pridružio: 05 Jun 2007
  • Poruke: 29

> savkic, nije to to...ne moram da koristim caption...

Onda ti ne iscrtavaš uneti sadržaj već nešto proizvoljno.

> Ali zasto kada insertujem item, on nastavi da ga iscrtava....Znaci nista

Već si dobio odgovor, zato što je primio WM_PAINT poruku, pogledaj u MSDNu sve o toj poruci pa će ti biti jasnije kada se šalje. I naravno proveri da je ti ne generišeš indirektno.

> debuggerom, i vidim da on sve vreme ispocetka radi OnDrawItem
> funkciju...Zasto?To mi nije jasno....

Ako si stavio breakpoint i aktiviran je Delphi, onda se posle toga kontrola mora ponovo u celosti iscrtati.

Ko je trenutno na forumu
 

Ukupno su 643 korisnika na forumu :: 31 registrovanih, 3 sakrivenih i 609 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, anbeast, Apok, bigfoot, Bojan85, Bubimir, dane007, darkangel, Djokislav, dragoljub11987, flash12, kjkszpj, Koridor, Koridor 11, krkalon, Krusarac, Krvava Devetka, Lazarus, Leonov, m0nstrum_, Milenaaa, Misirac, nemkea71, Posmatrac77OKB, Romibrat, sabros, sovanova95, vlad4, wizzardone, Zoca, 125