Sichtbare Spalten in LIG

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
techniker
Beiträge: 152
Registriert: 27.01.2016 11:08
Wohnort: BY

Sichtbare Spalten in LIG

Beitrag 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!
Never change a running system - Never run a changed system!
(PB 5.62 [x86] und PB 5.71 [x86])
Benutzeravatar
techniker
Beiträge: 152
Registriert: 27.01.2016 11:08
Wohnort: BY

Re: Sichtbare Spalten in LIG

Beitrag 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:
Never change a running system - Never run a changed system!
(PB 5.62 [x86] und PB 5.71 [x86])
Benutzeravatar
hjbremer
Beiträge: 795
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Sichtbare Spalten in LIG

Beitrag 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
Purebasic 5.41 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
techniker
Beiträge: 152
Registriert: 27.01.2016 11:08
Wohnort: BY

Re: Sichtbare Spalten in LIG

Beitrag 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:
Never change a running system - Never run a changed system!
(PB 5.62 [x86] und PB 5.71 [x86])
Benutzeravatar
jacdelad
Beiträge: 259
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Sichtbare Spalten in LIG

Beitrag 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.
PureBasic 6.0/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/30TB HDD
Synology DS1821+/36GB RAM/110TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Antworten