Delphi-PRAXiS
Seite 1 von 3  1 23      

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 2. Mai 2021 15:45

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

Ich hab jetzt länger gesucht, aber keine Antwort auf mein Problem gefundn. Mein erster gedanke: Es liegt an unterschiedlichen Koordinatensystemen. Die antwort wäre wohl ParentToClient oder umgekehrt.
Bloss - wie bringe ich Client.Width und Parent.Padding "zusammen" ?

Mein Ansatz (ohne TGridPanel...):
Delphi-Quellcode:
function TPnlCalendarFrame.GetParentControlPostion(AParentCtrl : TPanel): integer;
  var Widthtotal : Word;
begin
  Widthtotal := (6 * FDayNumberFrame.Width);
  Result := (AParentCtrl.ClientWidth div 2) - (Widthtotal div 2);
end;


procedure TPnlCalendarFrame.CreateDayNumberFrame(AMonth: Integer);
  var LMonat, LName :String; LYear, LMonth, LDay : Word;
begin
  System.SysUtils.DecodeDate(FFirstMonthDay, LYear, LMonth, LDay);
  FDayNumberFrame := TDayNumberFrame.Create(Self);
  LMonat := Monate[AMonth];
  LName := LMonat + 'Frame';
  case AMonth of
    1..6: begin
            FParentCtrl := PnlSixMonts1;
            FParentCtrl.Padding.Left := GetParentControlPostion(FParentCtrl);
          end;
    7..12:begin
            FParentCtrl := PnlSixMonts2;

          end;
  end;
  FDayNumberFrame.LblCaption.Caption := LMonat;
  FDayNumberFrame.Name := LName;
  FDayNumberFrame.InitDayNumberFrame;
  FDayNumberFrame.FirstMonthDay := StartOfAMonth(LYear, AMonth);
  FDayNumberFrame.LastMonthDay := EndOfAMonth(LYear, AMonth);
  FDayNumberFrame.Parent := FParentCtrl;
  FDayNumberFrame.Align := alLeft;
  FDayNumberFrame.Visible := true;
  FDayNumberFrame.HorzDayNumbersMonths;
end;
Und so schauts dann aus:
Anhang 53937

Dass die Reihenfolge der Monate durcheinanderkommt, bemerke ich auch erst jetzt...
Dass das Monatspanel über den linken Rand hinausragt, führe ich auf die unterschiedlichen Koordinatensysteme beider Panels zurück. Das schreit nach ClienttoParent... Blos: wie bringt man TPoint und integer (AParentCtrl.ClientWidth) zusammen?

Gruss
Delbor

KodeZwerg 2. Mai 2021 15:56

AW: Panel Zentrieren...
 
Delphi-Quellcode:
Widthtotal := (6 * FDayNumberFrame.Width) + (6 * (margins.left + margins.right));
?

Delbor 2. Mai 2021 16:01

AW: Panel Zentrieren...
 
Hi KodeZwerg

Danke für deine Antwort!
AlignwithMargins ist in allen irgendwie beteiligten Komponenten false.

Gruss
Delbor

KodeZwerg 2. Mai 2021 16:15

AW: Panel Zentrieren...
 
Es scheint sich ja um eine art Komponente zu handeln die du da bastelst wo noch an manchen stellen dinge falsch laufen.
Visuell würde ich es so machen wie der Windows Kalender es macht.
(Immer 31 Felder rein, "in grau" vor-monat bzw nächster-monat felder. Das du die KW visuell mit aufnimmst ist ein nettes gimmick!)
Für eine bessere Reparatur / alternative vorgehensweisen, würde ich den kompletten source mal anheften.
(Ich pers. würde zBsp immer nur einen Monat darstellen lassen, das vereinfacht den Umgang denk ich mal enorm da man ja weiß wieviel felder es sind)

Uwe Raabe 2. Mai 2021 16:45

AW: Panel Zentrieren...
 
Zitat:

Zitat von Delbor (Beitrag 1488437)
AlignwithMargins ist in allen irgendwie beteiligten Komponenten false.

Dann wird Padding aber auch nicht ausgewertet.

Delbor 2. Mai 2021 17:08

AW: Panel Zentrieren...
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hi Kodezwerg

Anbei im Anhang mal der Kalenderframe - der zeigt tatsächlich jeweils einen Monat an, führt aber zusätzlicj noch die letzten Tage des Vor- und die ersten Tage des Nachfolgemonats, sofern sie in eine Woche fallen, die auch zum aktuell angezeigten Monat gehört:
Anhang 53940
Anhang 53938
Anhang 53939

Gruss
Delbor

Delbor 2. Mai 2021 17:24

AW: Panel Zentrieren...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Uwe Raabe

Zitat:

Zitat von Uwe Raabe (Beitrag 1488439)
Zitat:

Zitat von Delbor (Beitrag 1488437)
AlignwithMargins ist in allen irgendwie beteiligten Komponenten false.

Dann wird Padding aber auch nicht ausgewertet.

Seit wann denn das? Das hätte ich bei all meinen Versuchen bemerken müssen. Margins verwende ich in der Regel nur, wenn 2 AlTop ausgerichtete Panels(..) nicht nur zum Parent abstand halten sollen, sondern auch untereinander. Allerdings gibt es keinen Boolean und keine vorbelegten Werte wie bei margins.
Anhang 53941
Margins ist so Standard, während Padding standardmässig null ist und hier von mir belegt wurde.

Gruss
Delbor

himitsu 2. Mai 2021 18:52

AW: Panel Zentrieren...
 
Paddings werden eigentlich immer angewendet. (jedenfalls bisher noch nie irgendwo gesehen, dass es nicht so war)

Bei den Margins sieht es aber anders aus, denn die werden böswillig ignoriert, außer man setzt ganz oben das Häkchen bei AlignWithMargins (aber darauf muß man erstmal kommen).

KodeZwerg 2. Mai 2021 19:11

AW: Panel Zentrieren...
 
Sollte dann das padding nicht noch mit reingerechnet werden bei "Widthtotal", rein vom logischen Aspekt?
Ich spiele eigentlich nur mit margins rum. Durch on/off find ich es flexibler.

Uwe Raabe 2. Mai 2021 23:02

AW: Panel Zentrieren...
 
Zitat:

Zitat von himitsu (Beitrag 1488447)
Paddings werden eigentlich immer angewendet.

Stimmt. Ich hatte da etwas anderes im Sinn, sorry.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:09 Uhr.
Seite 1 von 3  1 23      

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