Autor Beitrag
nekropole
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 22

Win 2000
D7 Ent
BeitragVerfasst: 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:
ausblenden 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
ausblenden 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 user profile iconTino: Code- durch Delphi-Tags ersetzt.

_________________
Gruß
Thomas
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 22

Win 2000
D7 Ent
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.)

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 22

Win 2000
D7 Ent
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 16.01.04 11:15 
Titel: Komponenten
Hallo!

Also, wenn Du alle Komponenten durchgehen willst, dann solltest Du folgendes benutzen:

ausblenden 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;

//oder heißt das Components statt Component ??? 
//Weiß ich jetzt gar nicht :oops:


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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
  For i:=0 to Hauptform.MDIChildCount-1 do begin
    If (Hauptform.MDIChildren[i] as Kindfenster).WindowState=wsMaximized then
    //Tu irgendwas
  end;


Das hier könnte auch noch nützlich sein:
www.delphi-forum.de/viewtopic.php?t=11486

MfG,
S.J.
nekropole Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 22

Win 2000
D7 Ent
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 22

Win 2000
D7 Ent
BeitragVerfasst: 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