![]() |
Flowpanel geeignetes Control ?
Hallo zusammen,
in meinem Programm hat der User die Möglichkeit bis zu sechs Gruppen auszuwählen die anschließend angezeigt werden. Dabei soll die einzelne Gruppe möglichst groß angezeigt werden. Bei 6 Gruppen sollte es z.B. so aussehen: 1 | 2 | 3 4 | 5 | 6 wenn nur vier Gruppen angezeigt werden sollen so 1 | 2 3 | 4 usw. Könnte man so etwas mit eine Grid/Flowpanel hinbekommen oder muss ich das Layout selber berechnen ? Hat vielleicht jemand noch eine andere Idee ? |
AW: Flowpanel geeignetes Control ?
Ich denke mit einem Gridpanel sollte das klappen. Einfach die Zeilen und Spalten entsprechend anlegen. Das Hinzufügen sollte in der Reihenfolge sein wie du es haben möchtest. Wichtig ist, wenn alle Zeilen und Spalten gleich groß sein sollen, dass diese gleichzeitg auf die Größe gesetzt werden mit beginUpdate und endUpdate.
|
AW: Flowpanel geeignetes Control ?
Das FlowPanel kennst du ja schon. Da dir das "bis die Zeile/Spalte voll ist, dann Umbruch" anscheinend nicht reicht und du eine genaue Vorstellung hast wie es sein soll musst du wohl selbst ran.
Wenn ich das System richtig verstanden habe dann ist es bei
Delphi-Quellcode:
Einträgen in X und Y-Richtung
n
Delphi-Quellcode:
Zellen mit der Präferenz in X-Richtung eine Zelle mehr zu haben. Richtig?
√n
|
AW: Flowpanel geeignetes Control ?
Zitat:
Was Du mit Deiner Wurzel meinst verstehe ich wiederum nicht. Im Prinzip soll es vier Möglichkeiten geben. Hätte ich sofort alle schreiben sollen 1 | 2 | 3 4 | 5 | 6 1 | 2 3 | 4 1 | 2 1 Ich hoffe jetzt ist es klar. Hätte ich wirklich sofort schreiben können. Entschuldigung |
AW: Flowpanel geeignetes Control ?
Ich habe mal was gebastelt wie ich es lösen würde. Voraussetzung sind ein Gridpanel und zwei Spinedits zum einstellen der Zeilen und Spalten dann kannst du probieren ob das das ist was du brauchst:
Delphi-Quellcode:
type
TForm2 = class(TForm) gpTest: TGridPanel; bTest: TButton; seRows: TSpinEdit; seCols: TSpinEdit; procedure bTestClick(Sender: TObject); private procedure AddControlsToGridPanel(AGridPanel: TGridPanel; ARows, ACols: integer; AControls: TArray<TControl>); public end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.AddControlsToGridPanel(AGridPanel: TGridPanel; ARows, ACols: integer; AControls: TArray<TControl>); var i: integer; begin Assert(ARows * ACols = Length(AControls)); AGridPanel.ControlCollection.Clear; with AGridPanel do begin ColumnCollection.BeginUpdate; if ColumnCollection.Count <> ACols then begin ColumnCollection.Clear; for i := 0 to ACols - 1 do begin ColumnCollection.Add; ColumnCollection.Items[i].Value := 50; end; end; ColumnCollection.EndUpdate; RowCollection.BeginUpdate; if RowCollection.Count <> ARows then begin RowCollection.Clear; for i := 0 to ARows - 1 do begin RowCollection.Add; RowCollection.Items[i].Value := 50; end; end; RowCollection.EndUpdate; end; for i := Low(AControls) to High(AControls) do begin AControls[i].Parent := AGridPanel; AControls[i].Align := alClient; end; end; procedure TForm2.bTestClick(Sender: TObject); var vControls: TArray<TControl>; vB: TButton; i: integer; begin Setlength(vControls, seRows.Value * seCols.Value); for i := 0 to seRows.Value * seCols.Value - 1 do begin vB := TButton.Create(gpTest); vB.Caption := i.tostring(); vControls[i] := vB; end; AddControlsToGridPanel(gpTest, seCols.Value, seRows.Value, vControls); end; |
AW: Flowpanel geeignetes Control ?
Perfekt. Das ist es. Genauso wollte ich es haben. Danke vielmals
|
AW: Flowpanel geeignetes Control ?
BeginUpdate()/EndUpdate() ohne try..finally ist aber auch mutig.
|
AW: Flowpanel geeignetes Control ?
Das ist richtig, ich schrieb aber auch gebastelt :-D
Hier die verbesserte Variante:
Delphi-Quellcode:
procedure TForm2.AddControlsToGridPanel(AGridPanel: TGridPanel; ARows, ACols: integer;
AControls: TArray<TControl>); var i: integer; begin Assert(ARows * ACols = Length(AControls)); AGridPanel.ControlCollection.Clear; with AGridPanel do begin ColumnCollection.BeginUpdate; try if ColumnCollection.Count <> ACols then begin ColumnCollection.Clear; for i := 0 to ACols - 1 do ColumnCollection.Add.Value := 50; end; finally ColumnCollection.EndUpdate; end; RowCollection.BeginUpdate; try if RowCollection.Count <> ARows then begin RowCollection.Clear; for i := 0 to ARows - 1 do RowCollection.Add.Value := 50; end; finally RowCollection.EndUpdate; end; end; for i := Low(AControls) to High(AControls) do begin AControls[i].Parent := AGridPanel; AControls[i].Align := alClient; end; end; |
AW: Flowpanel geeignetes Control ?
Hallo,
ich will auch gerade ein FlowPanel einsetzen und darin LabeledEdits platzieren. Nun ordnet das FlowPanel die einzelnen Elemente ja automatisch an. Soll es auch. Aber es zieht die für meine Begriffe zu eng aneinander. Ich finde aber keine Eigenschaft, wo ich einstellen kann, dass zwischen den eizelnen LabelEdits gößere Zwischenräume bleiben. Kann da jemand helfen? |
AW: Flowpanel geeignetes Control ?
Das Padding beim FlowPanel bezieht sich leider nur auf den gesamten Client-Bereich und nicht auf die Ausrichtung der einzelnen SubControls, also nur außenrum der Rand nach innen.
Für die Zwischenräume fehlt dem Panel leider eine Eigenschafft. Also mußt du die Margins der einzlnen Edits setzen. ABER dort nicht vergessen zusätzlich AlignWithMargins auf True zu setzen. Ich weiß, es ist totaler Schwachsinn, dass standardmäßig Margins gesetzt sind, diese aber ignoriert werden, außer es wird ein weit entferntes anderes Property gesetzt, an statt es wie beim Padding einfach standardmäßig auf 0 steht. Alle Edits markieren (mit Shift+Klick, im Designer oder der Struktur) und dann AlignWithMargins=True und bei den Margins dann den Abstand. * entweder bei jedem Edit die Hälfte * oder jeweils neu eine Seite (z.B. Top und Left) und zusätzlich eventuell dann noch die andere Seite (z.B. Bottom und Right) über das Padding im Panel. Padding = Abstand nach innen Margins = Abstand nach außen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:26 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 by Thomas Breitkreuz