![]() |
dynamisch erzeugte elemente in mehren zeilen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
Delphi-Quellcode:
Mit diesem Code erzeuge ich dynamisch Panels, die später mit Kontaktinformationen gefüllt werden sollen.
SetLength(CaptionPanelArray, i);
for i:=0 to 10 do begin //Panel erzeugen CaptionPanelArray[i] := TJvCaptionPanel.Create(Self); CaptionPanelArray[i].CaptionPosition := dptop; CaptionPanelArray[i].Height := 200; CaptionPanelArray[i].Width := 300; CaptionPanelArray[i].DragMode := dmAutomatic; CaptionPanelArray[i].Color := clwhite; CaptionPanelArray[i].Parent := Form1; CaptionPanelArray[i].Top := 10; CaptionPanelArray[i].Left := 10; CaptionPanelArray[i].left := 10 + ((CaptionPanelArray[i].width + 10) * i); end; Das Problem ist, dass ich es nicht hinbekomme mehrer Zeilen zu erzeugen, wenn der rechte Rand des Formulars erreicht ist, soll eine neue Zeile eröffnet werden. Wie z.B. in Outlook Kontakte. Momentan liegt alles in einer Zeile. (Siehe Bild im Anhang) Die Anzahl der Panels ist später von der Anzahl der Datensätze abhängig. Labels zur Datenanzeigen in dem Panel werden schon erzeugt, sind aber hier in dem Code nicht zu sehen. Hat jemand eine Idee? Für die Hilfe und Unterstützung bedanke ich mich. LG Roland |
AW: dynamisch erzeugte elemente in mehren zeilen
Vom Design her würde ich eine art Layout-Komponente darunter legen (so wie TScrollbox). Ich weiss nicht, ob die neueren Delphis schon eine passende Komponente haben. Ansonsten musst du sie selber erstellen. Und diese Komponente legt dann fest, wo jedes Panel hinkommt.
Und die Positionsbestimmung ist nur ein klein wenig Mathematik.. |
AW: dynamisch erzeugte elemente in mehren zeilen
Du kannst doch ausrechnen, ob Panel.Left + Panel.Width kleiner als Parent.ClientWidth ist. Wenn nicht, Panel.Top entsprechend erhöhen und Panel.Left zurücksetzen.
|
AW: dynamisch erzeugte elemente in mehren zeilen
Danke für die schnellen Tipps.
Ich werde beides versuchen. Bei Nichtgelingen melde ich mich wieder. LG Roland |
AW: dynamisch erzeugte elemente in mehren zeilen
In neueren Delphis sollen ja TFlowPanel und TGridPanel für solche Fälle gedacht sein,
lso hier speziell das TFlowPanel. Warum setzt du eigentlich Left doppelt?
Delphi-Quellcode:
MaximaleAnzahlProZeile := {Parent}.ClientWidth div Breite;
... xxx[i].Left := (i mod MaximaleAnzahlProZeile) * Breite; xxx[i].Top := (i div MaximaleAnzahlProZeile) * Höhe; |
AW: dynamisch erzeugte elemente in mehren zeilen
Mit dem Flowpanel klappt es so wie ich es mir vorstelle.
Vielen Dank für diesen Tipp. Leider hat das Flowpanel keine ScrollBar. Kann ich dem Flowpanel eine Scrollbar zuweisen? LG |
AW: dynamisch erzeugte elemente in mehren zeilen
Zitat:
Die Höhe des Panels kannst du ja erstmal mit der Scrollbox gleichsetzen (heisst, die Scrollbars sind initial nicht sichtbar). Wenn du aber dann deine Controls innerhalb des Flow-Panels hinzufügst, erweiterst du einfach nach Bedarf die Höhe des FlowPanels im Code. Wie das?: Wenn du ein Control innerhalb des FlowPanels erzeugt hast, kannst du nach dem Positionieren über Control.Top die reale, vertikale Position im FlowPanel auslesen, die dadurch entsteht, dass das FlowPanel evtl. automatisch umgebrochen hat, und wenn dann Control.Top + Control.Height die Höhe des Flowpanels überschreitet, einfach die Höhe des FlowPanels um die fehlende Höhe erweitern. Die Scrollbox fügt dann automatisch eine Scrollbar hinzu, sobald das FlowPanel die Höhe der Scrollbox überschreitet, und, voila, schon scrollt das Ding innerhalb der Scrollbox automatisch. Oder du setzt von Anfang an eine feste, maximale Höhe des FlowPanels, die wesentlich höher ist als die der Scrollbox und die du mit den Controls nicht überschreiten wirst. Das ist aber nicht so schön (scrollbarer Leerraum, wenn ungenutzte Höhe) und weniger dynamisch :-) Das gleiche geht natürlich auch mit der Breite, aber das ist denke ich in deinem Fall nicht Sinn der Sache, denn dann wäre ja das Flowpanel überflüssig :-) |
AW: dynamisch erzeugte elemente in mehren zeilen
Du kannst auch gern meine
![]() |
AW: dynamisch erzeugte elemente in mehren zeilen
Ich habe mir dein ScrolBoxFlow angesehen. Sieht gut aus.
Wie kann ich diese denn jetzt verfügbar machen? Ich arbeite mit Delphi 2009. LG |
AW: dynamisch erzeugte elemente in mehren zeilen
Liste der Anhänge anzeigen (Anzahl: 1)
Oh, die pas war gar nicht dabei :oops:
Hier mal nachträglich als Anhang... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 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