![]() |
ListView, breite ändern - Items neu zeichnen.
Hi,
ich suche eine möglichkeit bei ListView die Items neu zu zeichenn wenn ich die Breite des ListView ändere. Der auslöser dazu wird es OnResize aber wie bekomme ich die einträge neu gezeichnent, bzw. neu eingeordnet ? habt ihr ne idee ? gruss seba |
Re: ListView, breite ändern - Items neu zeichnen.
gibt es nicht auch ein OnCustomDraw?
|
Re: ListView, breite ändern - Items neu zeichnen.
Hi,
ja es gibt es auch, aber wie bewege ich ihn dazu um die sachen neu zu ordnen ? gruss seba |
Re: ListView, breite ändern - Items neu zeichnen.
Hi,
mit ListView1.Repaint ... vielleicht Florian |
Re: ListView, breite ändern - Items neu zeichnen.
ne, ne da gerät er doch in eine entlose schleife, oder ?
|
Re: ListView, breite ändern - Items neu zeichnen.
Versuchs einfach mal ... oder du könntest die WM_RESIZE abfangen und dann Repainten ...
Florian |
Re: ListView, breite ändern - Items neu zeichnen.
Das erste habe ich versucht, er hängt sich auf.
Aber ich bin nicht der erste der ListView verwenden möchte, es muss doch eine lösung dafür geben ? Der MS Explorer wenn mann ihm die grösse ändert verschiebt doch auch die sachen und passt auf die "client" grösse alls an. gruss seba |
Re: ListView, breite ändern - Items neu zeichnen.
Moin Seba,
irgendwie verstehe ich Dein Problem nicht so ganz. Zitat:
Um Endlosschleifen bei manuellen Änderungen zu unterbinden kann man übrigens einfach die jeweils betroffene Eigenschaft deaktivieren, und anschliessend wieder aktivieren. Beispiel:
Delphi-Quellcode:
var
neSave : TNotifyEvent; begin neSave := CheckBox1.OnCheck; try CheckBox1.OnCheck := nil; CheckBox1.Checked := true; finally CheckBox1.OnCheck := neSave; end; end; |
Re: ListView, breite ändern - Items neu zeichnen.
Irgend wie versteht mich hier niemand :( .
Wenn ich Explorer in einder stelle wo ich Bilder habe öffne mit ansicht z.B. Mittelgrosse symbole, bekomme ich zu sehen Thumbnails mit beschriftung. Wenn ich das Fenster jetzt vergrössere oder verkleinere, passen sich die Items den Fenster an ( ministens von der breite ). Also wenn Fensterbreite ist X -> passen da z.B. 5 Objekte in der breite. Wenn ich jetzt das Fenster vergrössere X+200px Passen jetzt z.B. 7 Objekte in der Breite. Und das möchte ich hinkriegen. gruss seba |
Re: ListView, breite ändern - Items neu zeichnen.
Moin seba,
ach so, Du verwendest ViewStyle vsIcon, daran hatte ich ja nun gar nicht gedacht :wall: Allerdings: Bei mir werden die, je nach Grösse des ListView, automatisch neu angeordnet. :gruebel: |
Re: ListView, breite ändern - Items neu zeichnen.
Zitat:
Der ansatz WM_RESIZE ist nicht verkehrt.! Reicht aber nicht. Du benötigst den REC des Listviews. Holen über die API GetWindowRrec vom hwnd des Listviews. Die breite des Rec vergleichen mit der Anzahl an objekten dann dadurch teilen und neu zeichnen gruß |
Re: ListView, breite ändern - Items neu zeichnen.
Noch was anderes zu den Thema!
also wenn ich das richtig verstanden habe möchtest du objekte die im Listview angezeigt werden nicht neuzeichnen sondern reorganisieren abhängig von der breite der objekte welche du vorher festgelegt hast. Beispiel: Ein listview ist unterteil in Row und Col stelle es dir also als gitter vor. Wenn du nun zwei objekt hast welche 100x100 groß sind dann benötigst du zwei columheader(col) und ein Row Wird das Listview nun verschoben, verkleinert mußt du dafür sorge tragen das wie oben beschrieben du den REC des Listview kennst. Den holst du über GetWindowRec(handle vom listview). Diesen mußt du immer durch die breite und höhe deiner Objekte teilen. Da abhängig davon row/cols entfernt bzw.. addiert werden. Nur breite verändern! Ist der rec weniger als 200 + space(freiraum zwischen jeden objekt) dann mußt du dafür sorgen das dein objekt scaliert wird oder aber Col um 1 minimiert wird. Bei der ersten Methode bleiben beide objekte erhalten aber verkleinert Bei der zweiten ist nur noch eins vorhanden(sichtbar). Wenn du beides verschiebst. geht es im grunde genauso. Also wenn breite mehr als 200 + space dann col addieren und row abziehen wobei das objekt von Row dann in den neu geschaffenenen Columnheader angezeigt wird. Hoffe das ist es was du meinst. Sorry für die lange geschichte! gruß |
Re: ListView, breite ändern - Items neu zeichnen.
Das ist exackt was ich brauche.
Aller dings ich komme mit der materie nicht ganz klar. Aber bevor ich Euch weiter belestige werde ich noch versuchen das selber zu lösen, klingt aber schririg. Vor allem wie bringe ich ihm dazu es die Items zu zeichnen da wo ich sie brauche. hmm .. ich werde versuchen. danke erstmal. gruss seba |
Re: ListView, breite ändern - Items neu zeichnen.
Delphi-Quellcode:
Eigentlich wenn es standard items sind zeichnen sich diese von selbst.
Vor allem wie bringe ich ihm dazu es die Items zu zeichnen da wo ich sie brauche.
Wenn du aber Thumbnails in der Listview anzeigen willst, mit Rahmen und so das wird schwieriger. gruß |
Re: ListView, breite ändern - Items neu zeichnen.
Das ist nähmlich der fall, ich will Thumbnails zeichnen mit allem drum und Dran.
Habe erst mit ScrollBox versucht hatt eingentlich ganz gut geklapt aber es war zu langsam. Ich habe mir erhoft mit ListView geht es schneller. gruss seba |
Re: ListView, breite ändern - Items neu zeichnen.
Wie kann ich den Abstand zwischen den Thumbnails ( Items ) ändern ???
gruss seba |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz