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..
Danke!
Sichtbare Spalten in LIG
Sichtbare Spalten in LIG
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
(PB 6.03 LTS [x86])
Re: Sichtbare Spalten in LIG
Anmerkung:
Beim einfügen einer neuen Zeile mache ich aktuell einfach ein
Dies bewirkt natürlich ein ineffektives neuzeichnen aller Spalten - auch der nicht sichtbaren..
Beim einfügen einer neuen Zeile mache ich aktuell einfach ein
Code: Alles auswählen
InvalidateRect_(GadgetID(Gadget), 0, #True)
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
(PB 6.03 LTS [x86])
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Re: Sichtbare Spalten in LIG
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
und ob es die Ausgabe beschleunigt ?
LVM_GETTOPINDEX
LVM_GETCOUNTPERPAGE
LVM_REDRAWITEMS
UpdateWindow
https://learn.microsoft.com/de-de/windo ... edrawitems
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Re: Sichtbare Spalten in LIG
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.
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..
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
(PB 6.03 LTS [x86])
- jacdelad
- Beiträge: 348
- Registriert: 03.02.2021 13:39
- Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
- Wohnort: Riesa
- Kontaktdaten:
Re: Sichtbare Spalten in LIG
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.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB