Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ListView, breite ändern - Items neu zeichnen. (https://www.delphipraxis.net/78325-listview-breite-aendern-items-neu-zeichnen.html)

shifter 3. Okt 2006 10:45


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

bttb930 3. Okt 2006 10:56

Re: ListView, breite ändern - Items neu zeichnen.
 
gibt es nicht auch ein OnCustomDraw?

shifter 3. Okt 2006 10:59

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

Zacherl 3. Okt 2006 11:00

Re: ListView, breite ändern - Items neu zeichnen.
 
Hi,

mit ListView1.Repaint ... vielleicht

Florian

shifter 3. Okt 2006 11:09

Re: ListView, breite ändern - Items neu zeichnen.
 
ne, ne da gerät er doch in eine entlose schleife, oder ?

Zacherl 3. Okt 2006 12:06

Re: ListView, breite ändern - Items neu zeichnen.
 
Versuchs einfach mal ... oder du könntest die WM_RESIZE abfangen und dann Repainten ...

Florian

shifter 3. Okt 2006 12:17

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

Christian Seehase 3. Okt 2006 13:18

Re: ListView, breite ändern - Items neu zeichnen.
 
Moin Seba,

irgendwie verstehe ich Dein Problem nicht so ganz.

Zitat:

Zitat von shifter
Der MS Explorer wenn mann ihm die grösse ändert verschiebt doch auch die sachen und passt auf die "client" grösse alls an.

Was wird verschoben und angepasst :gruebel:

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;

shifter 3. Okt 2006 15:05

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

Christian Seehase 3. Okt 2006 17:12

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:

EWeiss 3. Okt 2006 17:24

Re: ListView, breite ändern - Items neu zeichnen.
 
Zitat:

Zitat von shifter
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

Wiedermal das berühmte subclassing (WinProc)
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ß

EWeiss 3. Okt 2006 18:07

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ß

shifter 3. Okt 2006 18:33

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

EWeiss 3. Okt 2006 18:39

Re: ListView, breite ändern - Items neu zeichnen.
 
Delphi-Quellcode:
Vor allem wie bringe ich ihm dazu es die Items zu zeichnen da wo ich sie brauche.
Eigentlich wenn es standard items sind zeichnen sich diese von selbst.
Wenn du aber Thumbnails in der Listview anzeigen willst, mit Rahmen und so
das wird schwieriger.

gruß

shifter 3. Okt 2006 19:15

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

shifter 3. Okt 2006 20:46

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 10:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz