Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Form nicht-modal mit eigenem Taskleitsten Eintrag erstellen (https://www.delphipraxis.net/140584-form-nicht-modal-mit-eigenem-taskleitsten-eintrag-erstellen.html)

Zacherl 21. Sep 2009 17:59


Form nicht-modal mit eigenem Taskleitsten Eintrag erstellen
 
Hey,

wie kann ich in meinem Programm zur Laufzeit ein Formular erstellen, dass ..

1) .. einen eigenen Eintrag in der Taskleiste besitzt
2) .. nicht modal angezeigt wird
3) .. hinter das Hauptfenster "rutschen" kann

Delphi-Quellcode:
procedure TfrmMain.bbSocketSettingsClick(Sender: TObject);
begin
  frmSockets := TfrmSockets.Create(Application);
  try
    frmSockets.PageControl.ActivePageIndex := 0;
    frmSockets.btnApply.Enabled := false;
    frmSockets.Show;
  finally

  end;
end;
Bisher wird das Formular nicht modal angezeigt, kann aber aus irgendwelchen Gründen nicht vom Hauptfenster verdeckt werden, sprich die erzeugen Child Fenster liegen IMMER über dem Main Window. Einen eigenen Taskleisten Eintrag haben sie auch nicht.

Viele Grüße
Zacherl

Zacherl 29. Sep 2009 21:12

Re: Form nicht-modal mit eigenem Taskleitsten Eintrag erstel
 
Ich pushe hier nochmal und beschränke meine Frage folgendermaßen:

Wie kann ich verhindern, dass meine zur Laufzeit erstellten Fenster immer vor dem Hauptfenster sind und nicht dahinter rutschen können?

himitsu 29. Sep 2009 21:30

Re: Form nicht-modal mit eigenem Taskleitsten Eintrag erstel
 
irgendwie wiederspricht sich hier einiges ... Modal bedeutet ja, daß die anderen (Parent)Forms nicht aktiv sind ... also wozu soll man dann die einzig aktive Form dann hinter diesen verstecken wollen?

Zacherl 29. Sep 2009 21:33

Re: Form nicht-modal mit eigenem Taskleitsten Eintrag erstel
 
Nein pass auf ich habe mein TfrmMain, welches das Hauptfenster ist. Dann erstelle ich ein TfrmSubForm. Als Parent nehme ich Application und ich zeige das Fenster mit der Show() [nicht der ShowModal()] Methode an.

Dieses Fenster liegt nun allerdings IMMER über TfrmMain. Selbst wenn ich TfrmMain anklicke und somit den Fokus gebe, bleibt TfrmSubForm immer vor TfrmMain im Vordergrund. Dieses Verhalten würde ich gerne abschalten.

Chris.R 30. Sep 2009 08:38

Re: Form nicht-modal mit eigenem Taskleitsten Eintrag erstel
 
Hallo,

hat die Eigenschaft FormStyle von TSubForm eventuell den Wert fsStayOnTop? Dann musst du den wieder auf fsNormal stellen.

Um dem zweiten Fenster einen eigenen Eintrag in der Taskleiste zu spendieren, musst du folgende Funktion z.B. im FormCreate
aufrufen:

Delphi-Quellcode:
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);

Ciao Chris

Zacherl 30. Sep 2009 11:59

Re: Form nicht-modal mit eigenem Taskleitsten Eintrag erstel
 
Danke dir für deine Antwort, das mit der Taskleiste funktioniert schonmal. Der Wert von FormStyle war allerdings auf fsNormal (hatte da auch nichts dran geändert). Das Formular ist ja auch nicht im Vordergrund aller geöffneten Fenster.

Sagen wir ich erstelle 2 SubForms, dann kann ich durch Anklicken entweder das eine oder das andere Fenster in den Vordergrund holen. Währenddessen wird das jeweils andere SubForm verdeckt oder zumindest teilweise verdeckt. Klicke ich aber auf das MainForm, so wird dieses zwar aktiviert, die zwei SubForms bleiben aber dennoch im Vordergrund =/

Chris.R 30. Sep 2009 12:40

Re: Form nicht-modal mit eigenem Taskleitsten Eintrag erstel
 
Ist TSubForm direkt von TForm abgeleitet? Wurde in dem Formular die Funktion CreateParams überschrieben?
Hast du mal eine leere Form hinzugefügt und mal probiert, ob die sich genauso verhält?

btw: fsStayOnTop bedeutet nicht, das das Fenster über allen Fenstern liegt, sondern nur über allen Fenstern deiner Anwendung.

Ciao Chris

Zacherl 30. Sep 2009 15:39

Re: Form nicht-modal mit eigenem Taskleitsten Eintrag erstel
 
Zitat:

Zitat von Chris.R
Ist TSubForm direkt von TForm abgeleitet?

Jap

Zitat:

Zitat von Chris.R
Wurde in dem Formular die Funktion CreateParams überschrieben?

Nein

Zitat:

Zitat von Chris.R
Hast du mal eine leere Form hinzugefügt und mal probiert, ob die sich genauso verhält?

Jap, verhält sich genauso. Auch in einem komplett neuen Projekt, können die SubForms niemals hinter das MainForm rutschen.

Chris.R 30. Sep 2009 17:53

Re: Form nicht-modal mit eigenem Taskleitsten Eintrag erstel
 
Hallo,

kannst du mir evtl mal ein kleines Projekt hochladen, das den Fehler demonstriert?
Es reicht, wenn nur eine Hauptform mit Button drauf ist, das ein SubForm anzeigt.

Bei mir kann ein SubForm auch hinter dem MainForm liegen.

Ciao Chris

Zacherl 30. Sep 2009 18:42

Re: Form nicht-modal mit eigenem Taskleitsten Eintrag erstel
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier die kleine Demo. EXE liegt auch bei. Vielleicht ist es ja ein generelles Problem unter D2010?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz