AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi dynamisch erzeugte elemente in mehren zeilen
Thema durchsuchen
Ansicht
Themen-Optionen

dynamisch erzeugte elemente in mehren zeilen

Ein Thema von roland0 · begonnen am 3. Aug 2011 · letzter Beitrag vom 5. Aug 2011
Antwort Antwort
Seite 1 von 2  1 2      
roland0

Registriert seit: 6. Jan 2011
22 Beiträge
 
#1

dynamisch erzeugte elemente in mehren zeilen

  Alt 3. Aug 2011, 15:41
Hallo zusammen,

Delphi-Quellcode:
  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;
Mit diesem Code erzeuge ich dynamisch Panels, die später mit Kontaktinformationen gefüllt werden sollen.
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
Miniaturansicht angehängter Grafiken
dynamik2.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: dynamisch erzeugte elemente in mehren zeilen

  Alt 3. Aug 2011, 15:46
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..
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: dynamisch erzeugte elemente in mehren zeilen

  Alt 3. Aug 2011, 15:47
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
roland0

Registriert seit: 6. Jan 2011
22 Beiträge
 
#4

AW: dynamisch erzeugte elemente in mehren zeilen

  Alt 3. Aug 2011, 15:54
Danke für die schnellen Tipps.
Ich werde beides versuchen. Bei Nichtgelingen melde ich mich wieder.

LG
Roland
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#5

AW: dynamisch erzeugte elemente in mehren zeilen

  Alt 3. Aug 2011, 16:53
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
roland0

Registriert seit: 6. Jan 2011
22 Beiträge
 
#6

AW: dynamisch erzeugte elemente in mehren zeilen

  Alt 3. Aug 2011, 22:36
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
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#7

AW: dynamisch erzeugte elemente in mehren zeilen

  Alt 3. Aug 2011, 22:50
Zitat:
Leider hat das Flowpanel keine ScrollBar.
Kann ich dem Flowpanel eine Scrollbar zuweisen?
Packe das TFlowPanel einfach in eine TScrollBox, aber nicht mit alClient, sondern alNone! (mit alClient scrollt das Flowpanel nicht!)
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

Geändert von blackfin ( 3. Aug 2011 um 23:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: dynamisch erzeugte elemente in mehren zeilen

  Alt 4. Aug 2011, 09:35
Du kannst auch gern meine ScrollBoxFlow nutzen
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
roland0

Registriert seit: 6. Jan 2011
22 Beiträge
 
#9

AW: dynamisch erzeugte elemente in mehren zeilen

  Alt 4. Aug 2011, 11:00
Ich habe mir dein ScrolBoxFlow angesehen. Sieht gut aus.

Wie kann ich diese denn jetzt verfügbar machen?

Ich arbeite mit Delphi 2009.

LG
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: dynamisch erzeugte elemente in mehren zeilen

  Alt 4. Aug 2011, 11:32
Oh, die pas war gar nicht dabei
Hier mal nachträglich als Anhang...
Angehängte Dateien
Dateityp: pas ScrollBoxFlow.pas (7,0 KB, 34x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli ( 4. Aug 2011 um 11:47 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 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