Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi WindowState = wsMaximized. (https://www.delphipraxis.net/3269-windowstate-%3D-wsmaximized.html)

Gast 4. Mär 2003 07:33


WindowState = wsMaximized.
 
Hallo 8)

In einem Projekt habe ich ein Formular FormStyle := fsMDIForm (also Hauptformular) und mehrere
fsMDIChild (Kinder-) Formulare.

Leider habe ich ein Problem beim Aufruf vom besagten "Kinder"-Formularen.

Ein fsMDICHild Formular hat die Einstellung für WindowState = wsMaximized.

Beim Aufruf jedoch, bevor die volle Größe erreicht wird sieht man für einen
Augenblick wie das Formular eine andere Position annimmt (wsNormal) und erst dann
wird die volle Größe erreicht.

Wie kann ich erreichen, dass das Formular sofort auf wsMaximized steht?

Gruß

Paul Jr.

Luckie 4. Mär 2003 07:35

Laß es erst nach dem Maximieren sichtbar werden.

Gast 4. Mär 2003 07:37

Wie meinst Du das?

Gruß

Paul Jr.

Luckie 4. Mär 2003 07:44

Du erzeugst es unsichtbar. Stellst WindowState auf wsMaximized und dann MDIForm.Visible := TRUE;
Ich weiß nicht, ob das geht. Ist nur eine Idee.

Gast 4. Mär 2003 07:46

Luckie, ... ich weiß leider nicht wie Du es meinst, da wenn ich

visible auf FALSE einstele bekomme ich sofort folgende Meldung:

"Ein MDI-Kindformular kann nicht verborgen werden."

Mein Aufruf sieht so aus:

Form1 := TForm1.Create(Application);

Gruß

Paul Jr.

Luckie 4. Mär 2003 07:48

OK, dann geht meine Lösung nicht.

Gast 4. Mär 2003 07:53

Schade Luckie, da für mich ist das ein sehr großes Problem. Es sieht ganz einfach zum :kotz:


Ich wäre sehr Dankbar, wenn jemand mir ein Tipp geben könnte wie kann ich dieses „Nebeneffekt“ beseitigen


Gruß

Paul Jr.

MrSpock 4. Mär 2003 08:26

Hallo Paul Jr.,

schön, dass du wieder mal vorbeischaust.

Also den Effekt kann man nicht ganz ausschalten, aber mit folgendem Code sieht es nicht mehr so schlimm aus:

Delphi-Quellcode:
procedure TForm1.NeuesFenster1Click(Sender: TObject);
begin
   { Form2.FormStyle ist fsNormal }
   { Form2.Visible ist False }
   Form2 := TForm2.Create(Self);
   Form2.WindowState := wsMaximized;
   Form2.FormStyle := fsMDIChild;
end;

Gast 4. Mär 2003 08:46

Hallo Mr. Spock 8)

Danke auch Dir für Dein Versuch…. aber leider bleibt dieser Nebeneffekt so wie vorher.. (auch wenn etwas kleiner)...

Ich frage mich die ganze Zeit, wie kann man es wirklich unterbinden....

Gruß

Paul Jr.

MrSpock 4. Mär 2003 09:12

Hallo Paul Jr.,

ich denke mit mdiChilds geht es nicht anders.

Du könntest aber eventuell mit PageControl Komponenten arbeiten, wenn du immer mit "ganzseitigen" Anzeigen arbeiten willst.

Motzi 4. Mär 2003 09:13

Ein MDI-Child-Fenster kann schon verborgen, allerdings nicht über VCL-Methoden sonder über API:
Delphi-Quellcode:
ShowWindow(MDIChild.Handle, SW_HIDE);

Gast 4. Mär 2003 09:16

Hallo Mr. Spock

leider besteht mein Projekt oder besser gesagt Anwendung derzeit aus sagen wir ca. 100 Formulare... also schon ein Verkaufs-Produkt... darum kommt hier in Frage nur eine wirkliche Lösung....

Danke :)


Gruß

Paul Jr.

Gast 4. Mär 2003 09:18

Hallo Motzi,

ich habe das schon auch irgendwo gesehen... aber weiß nicht wie kann ich das ohne Gefahr an mein Projekt einbinden

Gruß

Paul Jr.

Gast 4. Mär 2003 09:38

Ich frage mich allerdings an dieser Stelle WARUM nimmt ein Kinder-Formular zuerst die letzte wsNormal Position und erst dann wsMaximized?

Das ist die Ursache...

könnte ich diese beseitigen wäre alles in Ordnung (ohne das Versteck-Spiel)

Gruß

Paul Jr.

Motzi 4. Mär 2003 10:02

Hi,

Zitat:

Zitat von Paul Jr.
Hallo Motzi,

ich habe das schon auch irgendwo gesehen... aber weiß nicht wie kann ich das ohne Gefahr an mein Projekt einbinden

Gruß

Paul Jr.

Ich weiß nicht wie dein Projekt ausschaut, aber irgendwie in der Richtung:
Delphi-Quellcode:
ShowWindow(Handle, SW_HIDE);
ShowWindow(Handle, SW_MAXIMIZE);
ShowWindow(Handle, SW_SHOW);

Gast 4. Mär 2003 10:23

Hallo Motzi 8) ,

mein Kind-Aufruf sieht natürlich so aus:


Form1 := TForm1.Create(Application);


wie und wo sollte ich das Ganze einbauen?

Gruß und Danke

Paul Jr.

MrSpock 4. Mär 2003 10:47

Hallo Motzi,

das Problem ist aber, dass du erst ein Handle hast, wenn du die MdiChild Form erstellt hast, dann wird sie aber auch schon angezeigt. Wenn du sie anschließend versteckst und dann maximierst ist der Effekt, den Paul Jr. beschrieben hat, leider erst recht da.

Motzi 4. Mär 2003 11:05

Zitat:

Zitat von MrSpock
Hallo Motzi,

das Problem ist aber, dass du erst ein Handle hast, wenn du die MdiChild Form erstellt hast, dann wird sie aber auch schon angezeigt. Wenn du sie anschließend versteckst und dann maximierst ist der Effekt, den Paul Jr. beschrieben hat, leider erst recht da.

Wie wärs mit dem OnCreate-Ereignis? Da existiert die Form bzw. das Handle bereits, aber die Form wird zu diesem Zeitpunkt noch nicht angezeigt.

MrSpock 4. Mär 2003 11:11

Hallo Motzi,

hab ich versucht, aber der "das Fenster geht auf" Effekt ist klar sichtbar :mrgreen: .

Motzi 4. Mär 2003 13:16

Zitat:

Zitat von MrSpock
Hallo Motzi,

hab ich versucht, aber der "das Fenster geht auf" Effekt ist klar sichtbar :mrgreen: .

Hm.. ich werd mich am Nachmittag wenn ich zuhause bin mal mit dem Problem beschäftigen.. ich bin nämlich der Meinung es schon mal erfolgreich bewältigt zu haben! :wink:

Gast 5. Mär 2003 06:49

Hallo Motzi :D ,

ich hoffe, dass Dir das gelingt... Aber auch, falls Du es nicht schaffst... da möchte ich Dich und die anderen System-Profis beruhigen... zwar meine Frage, die ich hier gestellt habe sieht harmlos aus... ABER da waren schon von Dir ein paar Berufs-Programmierer :coder: die es leider AUCH nicht geschafft haben... ich übrigens auch nicht... :oops:

Ich warte gespannt auf ein Lebenszeichen von Dir und wünsche viel Erfolg


Gruß

Paul Jr.

Motzi 5. Mär 2003 14:35

Ich bin zwar der Meinung es schon mal anders gemacht zu haben, aber so funzt es auch:

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
begin
  bFirstActivate := False;
end;

procedure TForm2.FormActivate(Sender: TObject);
begin
  if not bFirstActivate then
  begin
    ShowWindow(Handle, SW_HIDE);
    ShowWindow(Handle, SW_SHOWMAXIMIZED);
    bFirstActivate := True;
  end;
end;

Gast 6. Mär 2003 08:32

Hallo Motzi :D ,


ich stehe in Deiner Schuld... hervorragend :!:

Nach ein paar einfachen Anpassungen läuft jetzt alles so wie ich wollte...

Gruß

Paul Jr.

Motzi 6. Mär 2003 08:35

Zitat:

Zitat von Paul Jr.
ich stehe in Deiner Schuld... hervorragend :!:

Kein Problem! Aber bei Bedarf komm ich gern darauf zurück! :wink: :)

Gast 6. Mär 2003 10:10

:D OK!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz