Einzelnen Beitrag anzeigen

Stefan H.

Registriert seit: 10. Dez 2003
12 Beiträge
 
Delphi 6 Personal
 
#1

Formulare aus DLL-Dateien anzeigen

  Alt 26. Apr 2005, 14:11
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;
  Mit Zitat antworten Zitat