28. juni 2006 - 11:12Der er
11 kommentarer og 2 løsninger
TListViews kolonneoverskrifter tegnes ikke
Jeg har en tabbed notebook hvori der er flere listviews (alle i report mode).
Når jeg skifter til tredje tab, så bliver listview'ens kolonneoverskrifter ikke tegnet. Der er bare et blankt gråt felt hvor de skulle have været.
Skifter jeg tilbage til forrige tab og frem igen, eller ændrer størrelsen på min form, så tegnes kolonneoverskrifterne prompte.
Det er ikke første gang jeg har oplevet dette, og har løst det ved at sende den WM_SIZE message (ListView1.Perform(WM_SIZE,0,0)), men det virker ikke her.
Har prøvet at sætte Application.ProcessMessages ind, ListView1.Repaint, Invalidate og Refresh - intet får tegnet de !"#"#¤" kolonneoverskrifter.
Tolderlund: Ikke umiddelbart. Har prøvet at smække dem på i den rækkefølge jeg kom på dem (med application.processmessages mellem hver enkelt). Der skete intet.
Har været inde i dfm-filen og sammenlignet med de andre listviews: de var ens mht. properties og opbygning. Alle har de én kolonne der er "AutoSize".
Med snakken om dfm-filer er det klart at jeg i dette projekt bruger D7 - det glemte jeg at nævne.
Tolderlund: Det havde jeg ikke overvejet; desværre virker det ikke.
Jeg kan arbejde med dialogen, dvs. afkrydse linier, slette og tilføje, men først når jeg ændrer formens størrelse bliver headerene tegnet. Har nu tilføjet yderligere 3 listviews som alle tegnes fint. Eneste forskel fra disse er, at der linjerne ikke er checkbox'ed. Har i øvrigt prøvet at slå det fra, men resultatet er uændret.
Hvis jeg undlader at bruge BeginUpdate/EndUpdate når jeg fylder ting i listen, så virker det fint. Det gør ingen forskel om jeg fylder i listen i formens OnCreate (som de andre bliver det), om den er i OnShow.
Den pågældende opgave løses ved at kommentere BeginUpdate og EndUpdate ud, men det undrer mig såre hvad der sker.
Måske skal jeg prøve at rykke "aListItem.Data := self" op først. Når man tildeler Caption en værdi, så trigges der en OnChange-event der dog burde være inaktiv så længe BeginUpdate er aktiv; men opbygningen er altså den samme i de andre listviews.
Har du prøvet med en Application.ProcessMessages som det første, dvs. lige inden linien " Query := TwwQuery.Create(nil);" Jeg har selv haft nøjagtig samme problem men kan ikke lige huske hvordan jeg rettede det, den kode jeg brugte til at fixe problemet har jeg ikke længere da det ikke længere var et problem efter jeg skiftede fra paradox database til en MySQL database, hvorfor det så ikke længere var et problem fik jeg aldrig undersøgt da jeg havde travlt med at konvertere. Langt væk syntes jeg lige pludselig at kan mindes det har noget at gøre med at der bliver sendt en message til ListVievet om at opdatere men denne besked når aldrig frem pga. den tid det tager databasen at blive færdig med forespørgelsen, men måske er jeg helt på vildspor.
kroning: Nu har jeg plastret til med ProcessMessages og det ser ud til at virke. Efter at have fjernet dem igen en efter en, er det kommandoen lige før EndUpdate der gør den store forskel. Så det har jeg gjort overalt i mit program.
Lukker derfor spørgsmålet. Kroning: Et svar tak. Du inkasserer de 30. Tolderlund: Jeg vil godt give 15 for indsatsen - så du må også gerne smide et svar. (Ja, jeg hæver pointantallet med 15 - jeg er i sommerferiehumør)
I øvrigt så mener jeg det var Borrisholt (eller var det Arne?) der anbefalede brugen af upx-pakkeren. Jeg er meget imponeret over det og vil lige reklamere for det. Mit program fylder 15+Mb men pakket er den 3,5Mb. Kan også pakke dll-filer uden programmerne opdager det.
Kroning: Sikke noget fusk! Jeg ville gerne give tolderlund lidt for hans hjælp, men det blev på din bekostning. Kunne ikke finde ud af at hæve pointantallet og tænkte, at det var nok ved den individuelle fordeling af points det blev gjort. Næ nej. Dine points blev halveret. Jeg opretter lige et dummy-spørgsmål til dig.
Nej, det behøver du ikke, de points er ikke så vigtige.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.