Seite 1 von 1

Sichtbare Spalten in LIG

Verfasst: 24.01.2023 10:29
von techniker
Hallo,

Ich habe hier ein virtual LIG (CustomDraw) mit sehr vielen Spalten (~50-200).
Bei einer Veränderung der Ansicht lasse (bzw. möchte) ich deshalb nur das neuzeichnen, was wirklich nötig ist (Color, Text, State, Image).

Da die Spalten vom Nutzer per Drag&Drop verschoben werden können, ist die Reihenfolge willkürlich.
Ebenfalls sind die Zeilen durch benutzerspezifische Sortierung beeinflussbar.

Beim Einfügen oder löschen einer neuen Zeile/Spalte oder beim scrollen muss ich vieles neuzeichnen.

Wie finde ich heraus, welche Spalten und Zeilen momentan wirklich sichtbar sind?
Somit könnte ich gezielter per Callback aktualisieren.. :D

Danke!

Re: Sichtbare Spalten in LIG

Verfasst: 24.01.2023 10:35
von techniker
Anmerkung:

Beim einfügen einer neuen Zeile mache ich aktuell einfach ein

Code: Alles auswählen

InvalidateRect_(GadgetID(Gadget), 0, #True)
Dies bewirkt natürlich ein ineffektives neuzeichnen aller Spalten - auch der nicht sichtbaren.. :roll:

Re: Sichtbare Spalten in LIG

Verfasst: 25.01.2023 22:56
von hjbremer
Das könnte dir helfen, aber InvalidateRect_ ist in der Tat viel einfacher

und ob es die Ausgabe beschleunigt ?

LVM_GETTOPINDEX
LVM_GETCOUNTPERPAGE

LVM_REDRAWITEMS
UpdateWindow

https://learn.microsoft.com/de-de/windo ... edrawitems

Re: Sichtbare Spalten in LIG

Verfasst: 26.01.2023 07:44
von techniker
hjbremer hat geschrieben: 25.01.2023 22:56 LVM_GETTOPINDEX
LVM_GETCOUNTPERPAGE
LVM_REDRAWITEMS
Danke für die Antwort. Mit den LVM's bekomme ich aber nur die Zeilen - nicht die Spalten.
Für mich wären aber genau die Spalten von Relevanz.

Ich würde mir schon eine Verbesserung erwarten, da z.T. nicht beeinflussbare Nutzerdaten
mit auch schon mal 200 Zeichen oder mehr pro Spalte enthalten sein können. :roll:

Pro Zeile kommen da schnell 5-10kB an Nutzdaten zusammen, die der Callback abarbeiten muss.
Bei ~40-50 Zeilen sind das dann mal locker 500kB an Nutzdaten pro "Neuzeichnen-Event". /:->

Ich kann es fast nicht glauben, dass man die sichtbaren Spalten nicht herausfinden kann.. :doh:

Re: Sichtbare Spalten in LIG

Verfasst: 27.01.2023 06:51
von jacdelad
Du kannst mit LVM_GETCOLUMNORDERARRAY die Reihenfolge der Spalten bestimmen. Es gibt auch eine Message um die Position des horizontalen Scrollbalkens zu ermitteln, ist aber keine LVM_xxx, sondern eine allgemeine (ich weiß jetzt aber leider nicht welche). Anhand der Position, der Spaltenreihenfolge und Spaltenbreiten kannst du berechnen, welche Spalten sichtbar sind. Das ist aber ein ganzes Stück Arbeit und erfordert sicher einiges an Try-and-Error.