Autor |
Beitrag |
nekropole
      
Beiträge: 22
Win 2000
D7 Ent
|
Verfasst: Di 13.01.04 11:43
Ich habe versucht, bei öffnen eines MDI-Child dessen Größe auf die ClientHeight des Hauptformulars zu setzen.
In der OnCreat-Ereignis des Child:
Delphi-Quelltext 1:
| self.Height := Hauptform.ClientHeight |
Das MDI-Child wird aber größer angezeigt (rd. 60 px), sodass es
in den unteren Bildrand ragt und Scroll-Leitsten angezeigt werden.
Nur wenn ich
Delphi-Quelltext 1:
| self.Height := Hauptform.ClientWeight-56 |
code stimmt das Ergebnis. Sollte das nicht mit dem ersten Code erledigt sein? (Die Entwurfgröße im Objektinspektor ist wesentlicn kleiner als die tatsächlich erwünschte Erstellungsgröße.)
Wo liegt mein Denkfehler?
Moderiert von Tino: Code- durch Delphi-Tags ersetzt.
_________________ Gruß
Thomas
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 13.01.04 12:02
Titel: Kann es sein?
Hallo!
Könnte es sein, dass Du im Hauptformular auch noch andere Komponenten hast?
Damit meine ich jetzt speziell ein Hauptmenü, Toolleisten, oder ähnliches. Diese werden in ClientHeight nämlich nicht ausgeschlossen. Mit ClientHeight erhälst Du nur die Höhe des Formulars minus die Titelleiste (ungefähr jedenfalls).
Das heißt: Wenn Du ein hauptmenü im hauptfenster hast, musst Du dessen Höhe von CLientHeight abziehen und die 60 Pixel sehen mir verdammt nach so etwas aus...
MfG,
S.J.
|
|
nekropole 
      
Beiträge: 22
Win 2000
D7 Ent
|
Verfasst: Di 13.01.04 13:13
Ja, stimmt
ich habe eine Menüleiste, eine Buttonleiste und eine Statusleiste.
Ich erkenne schon den Denkfehler.
d.h. um die tatsächlich zur Verfügung stehende Höhe zu ermitteln, muß ich die Anwesenheit und die die Höhe dieser Komponenten ermitteln und die Summe von Hauptformular.ClientHight abziehen.
Äh -
wie kann ich grundsätzlich die Anwesenheit von Komponenten ermitteln?
Schließlich könnte ich ja noch die eine oder andere Leiste ein- oder ausblenden (grundsätzlich betrachtet).
_________________ Gruß
Thomas
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 15.01.04 09:43
Titel: ???
Hallo!
Na ja, wenn Du die Leiste ausblendest, wird das ja wahrcheinlich mit ???.Visible:=False erfolgen. Und wenn Du dann die Höhe brauchst, kannst Du das folgendermaßen machen:
(Ich nehme hier mal an, dass eine Statusleiste stbStatus und eine Toolleiste pnlMain existiert.)
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| var ClientHoehe: Integer; begin ClientHoehe:=Hauptform.ClientHeight -IfThen(stbStatus.Visible,stbStatus.Height,0) -IfThen(pnlMain.Visible,pnlMain.Height,0); end; |
Oder wie meintest Du das ausblenden sonst
MfG,
S.J.
|
|
nekropole 
      
Beiträge: 22
Win 2000
D7 Ent
|
Verfasst: Do 15.01.04 10:03
Ich meine das grundsätzlich.
Man kann ja im vorhineine nicht wissen, wann der User das Child öffnet.
Es können daher eine Leiste vorhanden sein, keine oder mehrere. Es könnten auch andere Childs vorhanden sein und ich möchte dem Child einen bestimmten Platz zuweisen und es nicht überdecken lassen.
In jedem Fall muß ich dem Child die richtige Höhe zuweisen und andere Forms verschieben, in der Größe ändern usw.
Es ist daher die Frage wie stelle ich fest was für Fenster und Komponenten im verwaltenden Hauptformular geöffnet/anwesend sind, damit ich entsprechend reagieren kann.
@Moderator
interessiert vielleicht auch andere, sollte der Tread getrennt werden?
_________________ Gruß
Thomas
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 16.01.04 11:15
Titel: Komponenten
Hallo!
Also, wenn Du alle Komponenten durchgehen willst, dann solltest Du folgendes benutzen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var i, Hoehe: Integer; begin For i:=0 to Hauptform.ComponentCount-1 do begin If Hauptform.Component[i] is TToolBar then begin If (Hauptform.Component[i] as TToolBar).Visible then Inc(Hoehe,(Hauptform.Component[i] as TToolBar).Height); end Else If Hauptform.Component[i] is TStatusBar then begin Inc(Hoehe,(Hauptform.Component[i] as TStatusBar).Height); end; end; end;
|
Damit kannst Du alle auf dem Hauptformular vorhandenen Komponenten erreichen und falls sie sichtbar sind, die Höhe entsprechend vergrößern.
Für die Kindfenster:
Delphi-Quelltext 1: 2: 3: 4:
| For i:=0 to Hauptform.MDIChildCount-1 do begin If (Hauptform.MDIChildren[i] as Kindfenster).WindowState=wsMaximized then end; |
Das hier könnte auch noch nützlich sein:
www.delphi-forum.de/viewtopic.php?t=11486
MfG,
S.J.
|
|
nekropole 
      
Beiträge: 22
Win 2000
D7 Ent
|
Verfasst: Fr 16.01.04 11:26
Ja, ich glaube das ist es was ich brauche.
Danke, für den Link.
Wenn es euch nicht gäbe, müsste man euch erfinden, was wäre ein Anfänger wie ich ohne euch.
Sollte sich meine Lösung wesentlich unterscheiden, werde ich diese posten.
_________________ Gruß
Thomas
|
|
nekropole 
      
Beiträge: 22
Win 2000
D7 Ent
|
Verfasst: So 18.01.04 21:10
Passt,
nur um keine ScrollBars angezeigt zu bekommen, muss man trotzdem noch 3 Pixel von der Höhe abziehen.
Danke
_________________ Gruß
Thomas
|
|
|