AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Flowpanel geeignetes Control ?

Ein Thema von v2afrank · begonnen am 29. Jan 2018 · letzter Beitrag vom 18. Mär 2024
Antwort Antwort
Seite 1 von 2  1 2      
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
573 Beiträge
 
Delphi XE2 Professional
 
#1

Flowpanel geeignetes Control ?

  Alt 29. Jan 2018, 06:59
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 ?
  Mit Zitat antworten Zitat
CarlAshnikov

Registriert seit: 18. Feb 2011
Ort: Erfurt
108 Beiträge
 
Delphi XE5 Enterprise
 
#2

AW: Flowpanel geeignetes Control ?

  Alt 29. Jan 2018, 07:37
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.
Sebastian
Das kann ja wohl nicht var sein!
  Mit Zitat antworten Zitat
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Flowpanel geeignetes Control ?

  Alt 29. Jan 2018, 08:58
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 n Einträgen in X und Y-Richtung √n Zellen mit der Präferenz in X-Richtung eine Zelle mehr zu haben. Richtig?
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
573 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Flowpanel geeignetes Control ?

  Alt 29. Jan 2018, 09:28
Das FlowPanel kennst du ja schon.
Ich kenne es vom Namen her. Genutzt habe ich es noch nicht

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
  Mit Zitat antworten Zitat
CarlAshnikov

Registriert seit: 18. Feb 2011
Ort: Erfurt
108 Beiträge
 
Delphi XE5 Enterprise
 
#5

AW: Flowpanel geeignetes Control ?

  Alt 29. Jan 2018, 10:37
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;
Sebastian
Das kann ja wohl nicht var sein!
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
573 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Flowpanel geeignetes Control ?

  Alt 29. Jan 2018, 10:43
Perfekt. Das ist es. Genauso wollte ich es haben. Danke vielmals
  Mit Zitat antworten Zitat
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Flowpanel geeignetes Control ?

  Alt 29. Jan 2018, 11:40
BeginUpdate()/EndUpdate() ohne try..finally ist aber auch mutig.
  Mit Zitat antworten Zitat
CarlAshnikov

Registriert seit: 18. Feb 2011
Ort: Erfurt
108 Beiträge
 
Delphi XE5 Enterprise
 
#8

AW: Flowpanel geeignetes Control ?

  Alt 29. Jan 2018, 11:51
Das ist richtig, ich schrieb aber auch gebastelt

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;
Sebastian
Das kann ja wohl nicht var sein!
  Mit Zitat antworten Zitat
BergLoewe

Registriert seit: 20. Nov 2005
37 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Flowpanel geeignetes Control ?

  Alt 18. Mär 2024, 11:07
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Flowpanel geeignetes Control ?

  Alt 18. Mär 2024, 11:54
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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  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 15:41 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