Höhe TMainMenu

Rund um die LCL und andere Komponenten
Antworten
aldicek
Beiträge: 37
Registriert: Do 6. Mär 2008, 12:48
OS, Lazarus, FPC: WinXP/Mint13KDE (Lazarus 1.0.8 FPC 2.6.2)
CPU-Target: 64 Bit
Wohnort: Halle (Saale)

Höhe TMainMenu

Beitrag von aldicek »

Hallo!

Ich möchte das Hauptfenster meiner Anwendung beim OnCreate-Ereignis initial (und danach bei OnResize-Ereignissen zur Laufzeit) in der Größe an die verwendeten Controls anpassen. Hierfür möchte ich ClientWidth und -Height entsprechend maximaler Breite des größten Controls (hier ein StringGrid) sowie der Höhe aller vertikal übereinander liegenden Controls setzen. (Da das verwendete StringGrid bei einem Resize der MainForm mitwachsen soll, kann ich es nicht zur Entwurfszeit hart kodieren.) Das Problem: Wie kann ich zur Laufzeit die Höhe des MainMenu ermitteln? Ein Property dafür gibt es anscheinend nicht, da ich aber weiß, dass diese Höhe je nach Schriftart des Menüs durchaus unterschiedlich sein kann, wäre es aus meiner Sicht schon wichtig, dessen Höhe ermitteln zu können. Ist das plattformspezifisch? Wenn ja, wie macht man es denn unter den verschiedenen Plattformen?

Viele Grüße
Aldi

diogenes
Beiträge: 200
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Re: Höhe TMainMenu

Beitrag von diogenes »

Wär's da nicht einfacher, die Ancjors-Eigenschaft zu benutzen? Die hat mir bei solchen Sachen irrsinngi geholfen, zumal ich nix mehr coden mußte :)
Ceterum censeo computatores per Pascal docendos esse.

aldicek
Beiträge: 37
Registriert: Do 6. Mär 2008, 12:48
OS, Lazarus, FPC: WinXP/Mint13KDE (Lazarus 1.0.8 FPC 2.6.2)
CPU-Target: 64 Bit
Wohnort: Halle (Saale)

Re: Höhe TMainMenu

Beitrag von aldicek »

Hallo Diogenes!

Danke für den Tipp. Allerdings soll das Formular sich durch Ziehen mit der Maus in der Größe verändern lassen. Dabei soll mein StringGrid mitwachsen, aber immer quadratisch bleiben und keine häßlichen Leerstreifen oder geclippte Zellen unten oder an der Seite haben. Darunter habe ich noch ein Progressbar (Höhe soll konstant sein) und eine Statuszeile, die ich jeweils miteinander verankere. Wie auch immer ich es jetzt mit dem verankern anstelle, wird es immer 2 Controls geben, die bei Änderung der Formulargröße ihre Größe ändern können. Beim einen (StringGrid) will ich es in einem zu rechnenden Rahmen (alle 9 oder 10 Spalten respektive Zeilen sollen genau in Width und Height des StringGrid passen), beim anderen (Progressbar) will ich keine Höhenänderung. Ich muss also die gewünschte Höhe meiner MainForm berechnen, dafür brauche ich neben der ClientWidth des MainForm auch seine ClientHeight und die setzt sich zusammen aus Höhe Menüzeile, Höhe StringGrid, Höhe Progressbar und Höhe Statusbar.

Viele Grüße
Aldi

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Höhe TMainMenu

Beitrag von Socke »

aldicek hat geschrieben:Ich muss also die gewünschte Höhe meiner MainForm berechnen,
Nein.
Wenn du ein Steuerlement auswählst, kannst du im Objektinspektor die Eigenschaft Anchors auswählen dort erscheint eine kleine Schaltfläche .... Ein Klick darauf öffnet ein weiteres Fenster. Dort kannst du das ausgewählte Steuerelement an anderen verankern.
Da kannst du für jede Richtung einstellen:
  • Keine Verankerung: An der absoluten Position des Elternelements (bspw. Formular)
  • Verankerung ohne Steuerelement: an der relativen Position des Elternelements
  • Verankerung mit Steuerlement: An ausgewähltem Element ausrichten (links, rechts, oben, unten, zentriert); gegebenenfalls mit Abstand
aldicek hat geschrieben:Beim einen (StringGrid) will ich es in einem zu rechnenden Rahmen (alle 9 oder 10 Spalten respektive Zeilen sollen genau in Width und Height des StringGrid passen)
Du kannst auch die Zeilen- bzw. Spaltengrößen neu berechnen.
aldicek hat geschrieben:Ich muss also die gewünschte Höhe meiner MainForm berechnen, dafür brauche ich neben der ClientWidth des MainForm auch seine ClientHeight und die setzt sich zusammen aus Höhe Menüzeile, Höhe StringGrid, Höhe Progressbar und Höhe Statusbar.
Du kannst auch dein Grid (oder was sich so alles ändern soll) auf ein TPanel setzen. Das Panel lässt du dann automatisch vergrößern/verkleinern. Dessen Größe kennst du immer.

Zeig doch mal einen Screenshot deiner Anwendung. Vielleicht wissen wir dann mehr, was du erreichen willst.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

aldicek
Beiträge: 37
Registriert: Do 6. Mär 2008, 12:48
OS, Lazarus, FPC: WinXP/Mint13KDE (Lazarus 1.0.8 FPC 2.6.2)
CPU-Target: 64 Bit
Wohnort: Halle (Saale)

Re: Höhe TMainMenu

Beitrag von aldicek »

Hallo an alle!

Ich habe meinen Fehler erkannt. Berechnungen dieser Art sollte man nicht im Form.Create machen, da ist das MainMenu noch nicht da. Tue ich es im Form.Show, verrechnet Form.ClientHeight bereits die Menüzeilenhöhe. Trotzdem vielen Dank für die Beiträge!

Grüße
Aldi

Antworten