AGB  ·  Datenschutz  ·  Impressum  







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

Panel Zentrieren...

Ein Thema von Delbor · begonnen am 2. Mai 2021 · letzter Beitrag vom 5. Mai 2021
Antwort Antwort
Seite 1 von 3  1 23      
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Panel Zentrieren...

  Alt 2. Mai 2021, 16:45
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:
pnl_monthparents-1.jpg

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
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Panel Zentrieren...

  Alt 2. Mai 2021, 16:56
Widthtotal := (6 * FDayNumberFrame.Width) + (6 * (margins.left + margins.right)); ?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Panel Zentrieren...

  Alt 2. Mai 2021, 17:01
Hi KodeZwerg

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

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Panel Zentrieren...

  Alt 2. Mai 2021, 17:15
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)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#5

AW: Panel Zentrieren...

  Alt 2. Mai 2021, 17:45
AlignwithMargins ist in allen irgendwie beteiligten Komponenten false.
Dann wird Padding aber auch nicht ausgewertet.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Panel Zentrieren...

  Alt 2. Mai 2021, 18:08
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:
DayNumberFrameUnit.pas
PnlCalendarFrameUnit.pas
TerminEingabeFrameUnit.pas

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Panel Zentrieren...

  Alt 2. Mai 2021, 18:24
Hi Uwe Raabe

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.
margins-paddings.jpg
Margins ist so Standard, während Padding standardmässig null ist und hier von mir belegt wurde.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Panel Zentrieren...

  Alt 2. Mai 2021, 19:52
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).
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Panel Zentrieren...

  Alt 2. Mai 2021, 20:11
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.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#10

AW: Panel Zentrieren...

  Alt 3. Mai 2021, 00:02
Paddings werden eigentlich immer angewendet.
Stimmt. Ich hatte da etwas anderes im Sinn, sorry.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 11:23 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