Delphi-PRAXiS

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 Formulare aus DLL-Dateien anzeigen (https://www.delphipraxis.net/44888-formulare-aus-dll-dateien-anzeigen.html)

Stefan H. 26. Apr 2005 13:11


Formulare aus DLL-Dateien anzeigen
 
Hallo Leute,

ich habe bei meinem Programm selten genutzte Formulare in DLL-Dateien ausgelagert.
Nun ist mir aufgefallen, dass wenn ich ein Formular aus der DLL-Datei aufrufe, dass dieses Fenster separat in der Taskleiste angezeigt wird, was ich aber nicht möchte.
Bevor ich die Formulare in DLL-Dateien ausgelagert hatte, wurde nur mein Hauptprogramm in der Taskleiste angezeigt, was den Vorteil hatte, wenn man auf das zuletzt geöffnete Formular zurück will, dass man dann nur auf die Anwendung in der Taskleiste klicken musste und schon kahm man auf sein zuletzt geöffnetes Fenster zurück. (Ich hoffe, Ihr versteht mich was ich meine)
Übrigens, in beiden Fällen (zuvor und jetzt in der DLL), wurde bzw. wird das Formular als "ShowModal" aufgerufen.

Meine Frage:
Was muss ich ändern, damit das aufgerufene Formular aus der DLL-Datei nicht in der Taskleiste erscheint.
Es soll aber als separates Fenster angezeigt werden und wenn ich in der Taskleiste aus meine Hauptanwendung klicke, dass dann das zuletzt geöffnete Fester angezeigt wird.
Ich hatte auch schon einige Versuche mit Parent und Fenster-Handle versucht, hat aber irgendwie nie so richtig funktioniert.

Ich hoffe, Ihr die Profis könnt mir da evtl. weiter helfen.
Danke im Voraus!

PS. Die Suchfunktion hatte ich auch schon ausgiebig gequält, hat mir aber auch nicht viel weiter geholfen.

Hier mein Coder zuvor OHNE DLL-Datei:
Delphi-Quellcode:
procedure TfrmHauptformular.Button1Click(Sender: TObject);
var
  Formular: TForm;
begin
  Formular := TfrmTest.Create(Self);
  try
    Formular.ShowModal;
  finally
    Formular.Free;
  end;
end;
Ab hier die neue Version mit DLL-Datei:

Hier mein Code welcher die DLL-Datei anspricht:
Delphi-Quellcode:
procedure TfrmHauptformular.Button1Click(Sender: TObject);
var
  ProcCall: procedure;
  hDLL: THandle;
begin
  hDLL := LoadLibrary('MeineTestDLL.dll');
  if hDLL <> 0 then
  begin
    try
      ProcCall := GetProcAddress(hDLL,'DLLFormShow');
      if Assigned(ProcCall) then ProcCall else ShowMessage('Fehlerhafte DLL!');
    finally
      FreeLibrary(hDLL);
    end;
  end
  else
    ShowMessage('DLL konnte nicht geladen werden');
end;
Und hier ist der Code in der DLL-Datei, welche das Formular aufruft:
Delphi-Quellcode:
library MeineTestDLL;

uses
  Forms,
  SysUtils,
  Classes,
  Windows,
  UnitTest in 'UnitTest.pas' {frmTest};

{$R *.res}

procedure DLLFormShow;
var
  dllForm: TForm;
begin
  dllForm :=TfrmTest.Create(Application);
  try
    dllForm.ShowModal;
  finally
    dllForm.Release;
  end;
end;

exports
  DLLFormShow;

SirThornberry 26. Apr 2005 22:31

Re: Formulare aus DLL-Dateien anzeigen
 
ich glaub mit einem der Befehle gings
Delphi-Quellcode:
SetWindowPos(Handle, HWND_TOPMOST, Left,Top, Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
SetWindowLong(Handle, GWL_HWNDPARENT, 0);
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
Das Hauptproblem liegt darin das die forms aus der dll nicht "Application" als Parent haben. Und somit zeigen sie in der Taskleiste das Form an. Wenn du die Forms als ToolWin declarierst dürfte das ganze nicht mehr vorkommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:51 Uhr.

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