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
Höhe TMainMenu
-
- 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
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.
-
- 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
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
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
-
- 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
Nein.aldicek hat geschrieben:Ich muss also die gewünschte Höhe meiner MainForm berechnen,
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
Du kannst auch die Zeilen- bzw. Spaltengrößen neu berechnen.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 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.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.
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
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- 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
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
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