![]() |
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:
Ab hier die neue Version mit DLL-Datei:
procedure TfrmHauptformular.Button1Click(Sender: TObject);
var Formular: TForm; begin Formular := TfrmTest.Create(Self); try Formular.ShowModal; finally Formular.Free; end; end; Hier mein Code welcher die DLL-Datei anspricht:
Delphi-Quellcode:
Und hier ist der Code in der DLL-Datei, welche das Formular aufruft:
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;
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; |
Re: Formulare aus DLL-Dateien anzeigen
ich glaub mit einem der Befehle gings
Delphi-Quellcode:
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.
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); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 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