Delphi-PRAXiS
Seite 2 von 3     12 3      

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/)
-   -   Panel Zentrieren... (https://www.delphipraxis.net/207782-panel-zentrieren.html)

Delbor 3. Mai 2021 12:37

AW: Panel Zentrieren...
 
Hi zusammen

Ich habe gerade gesehen, dass die drei *.pas- Dateien bislang dreimal angeklickt, bzw. wahrscheinlich drei mal gedownloaded wurden. Habt ihr dabeieine Antwort gefunden?

Gruss
Delbor

KodeZwerg 3. Mai 2021 15:06

AW: Panel Zentrieren...
 
Zitat:

Zitat von Delbor (Beitrag 1488491)
Habt ihr dabeieine Antwort gefunden?

Ich konnte mit den Units noch nichts anfangen da mir RzTabs(?) unit fehlt. Noch keine Zeit gehabt das auseinander-zu-pflücken um es irgendwie nutzbar zu machen.

Delbor 3. Mai 2021 15:38

AW: Panel Zentrieren...
 
Hi CodeZwerg

Der Termineingabeframe enthält keinen Code. Wenn der also nicht gefunden wird, kannst du die entsprechende Referenz darauf einfach löschen lassen.
Andrerseits könntest du dir die Raize-Components gratis von Embarcadero Downloaden. Allenfalls geht das mit der Communitie nicht.

Die Komponenten sind etwas besser als die Standards - die Tabsheets des PageControls lassen sich einfärben, die Reiter haben verschiedene Formen/Ecken oder auch nicht.

Einfach die Pas in ein Beispielprojekt kopieren (NICHT UMBENENNEN) und dem Projekt hinzufügen.

Gruss
Delbor

Delbor 4. Mai 2021 12:00

AW: Panel Zentrieren...
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi zusammen

Das ist der PnlCalendaframe zur Designzeit :
Anhang 53955
clAqua sind dabei die beiden Panels, die je 6 Monatsframes aufnehmen. Width dieser Panels ist Widthtotal.
AParentCtrl ist das blaue Panel.

Und das ist das, wasmir zur Laufzeit gemeldet wird:
Zitat:

[Window Title]
Terminkalenderproject

[Content]
FDayNumberFrame.Width := 260 <== die sechs Monats-Kalender
AParentCtrl.Width := 1320 <== Der blaue Panel
Widthtotal := 1560 <== alle sechs Monatskalender
FDayNumberFrame.Width := 260
GetParentControlPostion := -240

[OK]
Und das ist der Frame zur Laufzeit:
Anhang 53956

Withtotal ist also grösser als das umgebende Panel. Also 2 verschiedene Koordinatensysteme? Und nun?

Gruss
delbor

himitsu 4. Mai 2021 12:16

AW: Panel Zentrieren...
 
Andere spezille Ausrichtungkomponenten hast du auch mal ausprobiert?

Suche mal in der Komponenten nach Dingen mit "Panel" im Namen.
TGridPanel, TFlowPanel, TRelativePanel, ...


Im FMX nennen die sich "Layout".

Rollo62 4. Mai 2021 12:37

AW: Panel Zentrieren...
 
Zitat:

Zitat von himitsu (Beitrag 1488552)
Im FMX nennen die sich "Layout".

Nicht ganz, da gibt es auch ein TPanel.
TLayout sollte man als Container nehmen für andere Controls, das zeichnet sich nicht selbst und ist sehr schlank.
TPanel gehr aber auch, ist halt auch selbst ein Control.

Delphi.Narium 4. Mai 2021 12:38

AW: Panel Zentrieren...
 
Delphi-Quellcode:
...
  case AMonth of
    1..6: begin
            FParentCtrl := PnlSixMonts1;
            // Beim ersten Panel machst Du das und das Ergebnis stimmt.
            FParentCtrl.Padding.Left := GetParentControlPostion(FParentCtrl);
          end;
    7..12:begin
            FParentCtrl := PnlSixMonts2;
            // Beim zweiten Panel machst Du das nicht und das Ergebnis stimmt nicht.
            FParentCtrl.Padding.Left := GetParentControlPostion(FParentCtrl);
          end;
  end;
...
end;
Wäre das eine Möglichkeit?
Delphi-Quellcode:
...
  case AMonth of
    1.. 6: FParentCtrl := PnlSixMonts1;
    7..12: FParentCtrl := PnlSixMonts2;
  end;
  FParentCtrl.Padding.Left := GetParentControlPostion(FParentCtrl);
...

stahli 4. Mai 2021 12:42

AW: Panel Zentrieren...
 
Bei solchen komplexeren Positionierungen würde ich das lieber selbst berechnen, also keine Aligns, Paddings und Margins benutzen.
Das wird insgesamt schneller sein und Du hast keine unübersichtlichen gegenseitigen Beeinflussungen.

Du kannst gezielt gewünschte Abstände einberechnen und die z.B. auch verringern, falls der Platz etwas knapper wird.
Auch das Zentrieren horizontal und vertikal ist kein Problem.

Natürlich musst Du dafür eine Funktion schreiben, aber das ist ein einmaliger Aufwand.
Aufrufen musst Du sie einmal bei der Initialisierung und dann im OnResize.

Dann hast Du alles selbst in der Hand und musst nicht mit Überraschungen der VCL umgehen.

Delbor 4. Mai 2021 13:51

AW: Panel Zentrieren...
 
Hi zusammen
Zuerst mal recht vielen Dank für eure vielen Antworten!
Zitat:

Zitat von himitsu (Beitrag 1488552)
Andere spezille Ausrichtungkomponenten hast du auch mal ausprobiert?

Suche mal in der Komponenten nach Dingen mit "Panel" im Namen.
TGridPanel, TFlowPanel, TRelativePanel, ...

Ja,danke. Habe ich, bis auf TRelativpanel: Letzteres hab ich mir nur mal die Demo angesehen, während ich nach einer solchen suchte:TGridpanel, und von TFlowPanel habe ich auch eine Demo durchgearbeitet. Vielleicht mit gewissen Nuancen hab ich überall das selbe Problem: alle kleben standardmässig immer in Left.
Bei TGridpanel habe ich keinen Wert für den Abstand zischen zwei Controls gefunden, bei TFlowpanel ist es wohl mehr oder weniger dasselbe.

Zitat:

Zitat von Delphi.Narium (Beitrag 1488554)
Wäre das eine Möglichkeit?
Delphi-Quellcode:
...
  case AMonth of
    1.. 6: FParentCtrl := PnlSixMonts1;
    7..12: FParentCtrl := PnlSixMonts2;
  end;
  FParentCtrl.Padding.Left := GetParentControlPostion(FParentCtrl);
...

Hab ich bereits so umgesetzt, steht so korrigiert aber nicht in der bereitgestellten *.pas. Was da (auch bei mir) noch fehlt: FParentCtrl hat von 1..6 einen andern Wert als von 7...12, wird also die ersten 6 mal überschrieben.

Zitat:

Zitat von stahli (Beitrag 1488555)
Bei solchen komplexeren Positionierungen würde ich das lieber selbst berechnen, also keine Aligns, Paddings und Margins benutzen.
Das wird insgesamt schneller sein und Du hast keine unübersichtlichen gegenseitigen Beeinflussungen.

Du kannst gezielt gewünschte Abstände einberechnen und die z.B. auch verringern, falls der Platz etwas knapper wird.
Auch das Zentrieren horizontal und vertikal ist kein Problem.

Natürlich musst Du dafür eine Funktion schreiben, aber das ist ein einmaliger Aufwand.
Aufrufen musst Du sie einmal bei der Initialisierung und dann im OnResize.

Dann hast Du alles selbst in der Hand und musst nicht mit Überraschungen der VCL umgehen.[/QUOTE]


Grundsätzlich stimme ich dir zu. Eine Besonderheit von Align ist zB., dass sich eine Komponente, die alLeft ausgrichtet werden soll, vor eine alLeft ausgerichtete Komponente schiebt. Bei mir kann das dann plötzlich heissen, dass der Februar vor dem Januar kommt...
Aber da sind auch die Werte, die ich zur Laufzeit ermittle und die den sichtbaren Panels total wiedersprechen.
Im "untersten" Frame, dem FDayNumberFrame, sind keinerlei Margins oder Paddings gesetzt: das Ding muss mit absolut minimalem Platz auskommen.
Ansonsten müsste ich mir das nochmal genau vornehmen...

Gruss
Delbor

Delphi.Narium 4. Mai 2021 14:05

AW: Panel Zentrieren...
 
Wenn ich was links anordnen will, aber nicht ganz links, sondern rechts neben dem letzten ganz links, helfe ich mir in der Art:
Delphi-Quellcode:
Panel.Align := alRight; // Schiebt erstmal nach ganz rechts.
Panel.Align := alLeft; // Schiebt nun nicht nach ganz links, sondern rechts neben das "letzte" der links angeordeneten Elemente.

// oder:
Panel.Align := alLeft; // Schiebt nach ganz links.
Panel.Left := Parent.Width; // Verschiebt nach vielzuweit rechts, da aber Align = alLeft ist, wird daraus rechts neben dem "Letzten" links.

// oder:
Panel.Left := MaxInt; // Verschiebt nach vielzuweit rechts, da aber Align = alLeft ist, wird daraus rechts neben dem "Letzten" links.
Panel.Align := alLeft; // Schiebt nach ganz links. neben dem "Letzten" links.

// oder:
// In umgekehrter Reihenfolge einfügen.
// Zuerst das, was im Ergebnis am weitesten rechts sein soll.
// Dann das davor
// und dann das davor
// ...
// Hieße bei Dir also einfügen von
// Juni
// Mai
// April
// März
// Februar
// Januar


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:42 Uhr.
Seite 2 von 3     12 3      

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