Höhe des MainMenü stimmt nicht

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
HobbyProgrammer
Beiträge: 166
Registriert: Di 29. Okt 2019, 12:51
Wohnort: Deutschland , Baden-Württemberg

Höhe des MainMenü stimmt nicht

Beitrag von HobbyProgrammer »

Hallo zusammen und noch einen schönen Ostermontag,

ich habe ein kleines Problem mit der Größeneinstellung des MainWindow meines Z180SoftSystems.
Ich lege mit Constraints die Höhe und Breite des Fensters in Abhängigkeit der Größe des Terminal Displays fest.
Mit Constraints deshalb, da ich ein Fester haben möchte welches sich in der Größe nicht mit der Maus verändern lassen soll. Dazu verwende ich im OnShow Event des MainWindow folgenden Code:

Code: Alles auswählen

procedure TMainWindow.FormShow(Sender: TObject);
var
    size: TSize;
begin
    ...

    SystemTerminal := TSystemTerminal.Create(panelSystemTerminal, False);
    
    ...

    size := SystemTerminal.getDisplaySize;
    
    Constraints.MinWidth := size.Width;
    Constraints.MinHeight := size.Height + panelButtons.Height + statusbarMainWindow.Height + menuMainWindow.Height;
    Constraints.MaxWidth := Constraints.MinWidth;
    Constraints.MaxHeight := Constraints.MinHeight;
    ...
    
end;
Unter Windows funktioniert das wunderbar, allerdings stimmt die Höhe der Abfrage 'menuMainWindow.Height' unter Linux nicht mit der Tatsächlichen Höhe des MainMenu überein. Das Fenster wird Höher gemacht als es sein sollte und das ergibt unterhalb des Terminal Display einen dicken Rand bis dann die Statusbar beginnt. Es ist auch nicht bei alles Linux Varianten gleich:

KUbuntu 37 -> 27
Debian KDE 35 -> 27
Mint Cinnamon 28 -> 24

Gibts da eine Lösung oder ist das ein Bug in der LCL? Ich habe auch schon versucht das mit Client.Height/Width zu Lösen, aber da bleibt das Fenster Resizeable und der Schalter Border bsSimple funktioniert auch nur unter Windows.

Grüße

Hobbyprogrammer
Host: Core i7-12700H, NVIDIA RTX3050 6GB, 32GB Ram, 1TB NVME SSD mit KUbuntu 22.04LTS 64bit , VM KUbuntu 22.04 LTS 64bit mit Lazarus 2.2.6 und Cross-Platform Compiler für Linux 32/64bit und Windows 32/64bit. Wine für erste Tests der Windows Binarys.

Benutzeravatar
Roland Chastain
Beiträge: 156
Registriert: Sa 7. Jul 2012, 21:50
Wohnort: Saargemünd
Kontaktdaten:

Re: Höhe des MainMenü stimmt nicht

Beitrag von Roland Chastain »

Hallo! Jemand hatte mir diesen Trick gegeben, um die Höhe der Menüleiste zu ermitteln. Ich hoffe, dies wird dir helfen.

Code: Alles auswählen

procedure TForm1.FormActivate(Sender: TObject);
var
  h: integer;
begin
   h := Self.Height - Self.ClientHeight;
   // ...
end;
Viele Grüße.

Roland
Petit poisson deviendra grand,
Pourvu que Dieu lui prête vie.

HobbyProgrammer
Beiträge: 166
Registriert: Di 29. Okt 2019, 12:51
Wohnort: Deutschland , Baden-Württemberg

Re: Höhe des MainMenü stimmt nicht

Beitrag von HobbyProgrammer »

Das mit der Berechnung über Height und ClientHeight hatte ich schon versucht, ohne Erfolg. Jedoch im 'FormShow' Event.
Ich werde das nochmals in dem von Dir genannten 'FormActivate' Event versuchen.
Die Fanzösische Diskussion über das Thema hab ich mir übersetzen lassen und gelesen.
Vielen Dank dafür. :D
Host: Core i7-12700H, NVIDIA RTX3050 6GB, 32GB Ram, 1TB NVME SSD mit KUbuntu 22.04LTS 64bit , VM KUbuntu 22.04 LTS 64bit mit Lazarus 2.2.6 und Cross-Platform Compiler für Linux 32/64bit und Windows 32/64bit. Wine für erste Tests der Windows Binarys.

Benutzeravatar
Roland Chastain
Beiträge: 156
Registriert: Sa 7. Jul 2012, 21:50
Wohnort: Saargemünd
Kontaktdaten:

Re: Höhe des MainMenü stimmt nicht

Beitrag von Roland Chastain »

Bitte. :wink:

Was passiert, wenn Sie die AutoSize-Eigenschaft auf True setzen und dies tun?

Code: Alles auswählen

procedure TForm1.FormShow(Sender: TObject);
begin
  with Constraints do
  begin
    MaxHeight := Height;
    MaxWidth := Width;
    MinHeight := Height;
    MinWidth := Width;
  end;
end;
Dateianhänge
project1.zip
(4.07 KiB) 66-mal heruntergeladen
Petit poisson deviendra grand,
Pourvu que Dieu lui prête vie.

HobbyProgrammer
Beiträge: 166
Registriert: Di 29. Okt 2019, 12:51
Wohnort: Deutschland , Baden-Württemberg

Re: Höhe des MainMenü stimmt nicht

Beitrag von HobbyProgrammer »

Die Lösung liegt in der Verarbeitung der Größe im 'FormActivate' Event:

Code: Alles auswählen

procedure TMainWindow.FormActivate(Sender: TObject);
var
  size: TSize;
begin
    size := SystemTerminal.getDisplaySize;
    Constraints.MinWidth := size.Width;
    Constraints.MinHeight := size.Height + panelButtons.Height + statusbarMainWindow.Height + (Height - ClientHeight);
    Constraints.MaxWidth := Constraints.MinWidth;
    Constraints.MaxHeight := Constraints.MinHeight;
end;
damit wird die Größe nun immer sauber richtig festgelegt. :D

Vielen Dank
Grüße
HobbyProgrammer
Host: Core i7-12700H, NVIDIA RTX3050 6GB, 32GB Ram, 1TB NVME SSD mit KUbuntu 22.04LTS 64bit , VM KUbuntu 22.04 LTS 64bit mit Lazarus 2.2.6 und Cross-Platform Compiler für Linux 32/64bit und Windows 32/64bit. Wine für erste Tests der Windows Binarys.

Antworten