Autor Beitrag
gispos
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 94

WIN 7
XE10, D2007
BeitragVerfasst: Di 24.02.09 19:07 
Tag zusammen,

mein Problem besteht beim erzeugen einer Form in einer DLL.
Die erzeugte Form soll Modal und ohne eigenen Eintrag in der Taskleiste angezeigt werden.

Das klappt bei mir aber nur wenn der Borderstyle auf bsDialog gesetzt wird, sobald der Style auf bsSizeable gesetzt wird, wird entweder ein Taskeintrag angezeigt oder noch schlimmer, die Form wird nicht mehr im Vordergrund gehalten und vom Hauptfenster verdeckt.

Weis hier jemand Abhilfe?
Beispiel-Versuche aus meiner DLL.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function GetFolderIndex(WND : THandle; Title : PChar;  ShowNewFolderBtn : Boolean;
  InitialDir : PChar): Integer; register;
begin
  {Hauptfenster schließt sich manchmal nach beenden der Funktion}
  //Application.Handle := WND;
  //Application.CreateForm(TForm1, Form1);

  {Kein Taskeintrag, aber nur wenn Borderstyle bsDialog}
  Form1 := TForm1.CreateParented(WND);

  Try
    Form1.Label1.Caption  := Title; 
    {Hier wird alles Initialisiert und Form1.ShowModal aufgerufen}
    Result := Form1.ShowDialog(ShowNewFolderBtn, InitialDir);
  finally
    FreeAndNil(Form1);
  end;
end;


Gruß gispos


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Di 24.02.2009 um 20:26
Bernhard Geyer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 3



BeitragVerfasst: Di 24.02.09 20:47 
Setz mal den Application.Handle der DLL auf den der Exe (z.B. mit InitDLL(AppHandle: THandle) und aufruf aus der Exe mit InitDLL(Application.Handle);
gispos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 94

WIN 7
XE10, D2007
BeitragVerfasst: Di 24.02.09 23:03 
Hab ich doch schon versucht, siehe Oben.

Application.Handle := WND // hier übergebe ich der DLL das Handle der Application
Application.CreateForm(TForm1, Form1) // Form1 erzeugen

Result ist aber das nach Beendigung der DLL Function mein Hauptfenster der Application entweder Minimiert oder gar geschlossen wird.
Übergebe ich kein Applications Handel, bleibt die Hauptform obwohl sie nicht StayOnTop ist im Vordergrund, oder es wird eine Tasksymbol für Form1 erstellt.

Nur wenn Form1 BorderStyle = bsDialog ist flutsch alles.

Aber das ganze Fensterhandling bei Delphi war schon immer eine Katastrophe und seit Einführung des PopUp Mode ist es noch schlimmer geworden. Teilweise wird ja nicht mal ShowMessage im Vordergrund angezeigt und man muss die API verwenden.

Andere Vorschläge?

Gruß gipo