![]() |
Form in DLL - ShowModal
Liste der Anhänge anzeigen (Anzahl: 1)
hallo zusammen
ich hab folgendes Problem: ich habe eine Form in einer DLL und möchte diese Modal anzeigen - kein Problem und denkt an: Application.Handle := AHandle; das funktioniert ja auch - aber erst nach dem zweiten Aufruf der ShowModal Funktion: !? (Detailbeschreibung: Beim ersten Aufruf der ShowModal Funktion wird ein eigenes Fenster für die Form in der DLL in der Taskleiste angezeigt. Wenn ich alle Fenster minimiere und das Fenster der Hauptapplikation dann wieder anklicke, erscheint die Hauptapplikation - nicht aber wie erwartet die ModalForm aus der DLL. Wenn ich dann die ModalForm schliesse und mir erneut anzeige ohne die Applikation zu schliessen, dann funktionierts korrekt?) ((ich hab hier auch schon einige threads zu diesem thema gefunden, deshalb hat meinem Testprojekt im attachment auch ähnlichkeiten mit dem dll tutorial von ![]() vielleicht kann mir ja bitte jemand helfen? meine DLL:
Delphi-Quellcode:
meine Form in der DLL:
library VCL_SampleDLL;
uses Forms, Windows, FormUnit1 in 'FormUnit1.pas' {FormDLL}; procedure FormShowModal(AHandle: THandle); stdcall; begin with TFormDLL.Create(nil) do begin AHandleInCreate := AHandle; //für einen Versuch über SetParent Application.Handle := AHandle; ShowModal; Free; end; end; exports FormShowModal; end.
Delphi-Quellcode:
unit FormUnit1;
interface uses dialogs, Windows, Forms, Classes, StdCtrls, Controls, unit3; type TFormDLL = class(TForm) procedure FormCreate(Sender: TObject); private public AHandleInCreate: THandle; end; var FormDLL: TFormDLL; implementation {$R *.DFM} procedure TFormDLL.FormCreate(Sender: TObject); begin FormDLL := Self; Windows.SetParent( FormDLL.Handle, AHandleInCreate ); end; end. und meine Unit in welcher ich die DLL aufrufe:
Delphi-Quellcode:
unit AppFormUnit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, unit2; type TForm1 = class(TForm) Button1: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} const dllname = 'VCL_SampleDLL.dll'; type TFNFormShowModal = procedure(AHandle: THandle); stdcall; var FormShowModal: TFNFormShowModal = nil; procedure TForm1.Button1Click(Sender: TObject); begin if Assigned(FormShowModal) then FormShowModal(Application.Handle); end; procedure TForm1.Button3Click(Sender: TObject); begin form2.ShowModal; end; var lib: HMODULE; initialization lib := LoadLibrary(@dllname[1]); if lib <> 0 then @FormShowModal := GetProcAddress(lib, 'FormShowModal'); finalization if lib <> 0 then FreeLibrary(lib); end. vielen dank für euren Input |
Re: Form in DLL - ShowModal
hallo DPler
ich hab nochmals alle möglichen und unmöglichen ideen durchprobiert - doch ich kriegs nicht hin :( vielleicht hat jemand ein bisschen beispielcode wo's funktioniert? eine Form in einer DLL welche Modal angezeigt wird? thx 4 every input |
Re: Form in DLL - ShowModal
Hi,
was passiert, wenn du in der DLL das Application.Handle vor dem Form.Create setzt? mfG mirage228 |
Re: Form in DLL - ShowModal
you are the hero! :hello: yes that's it!
manchmal kommt man auf die 'einfachsten' sachen nicht, deshalb an alle hier die LÖSUNG: man muss den Application Handle vor dem FormCreate zuweisen:
Delphi-Quellcode:
thx a lot - i'm :-D
procedure FormShowModal(AHandle: THandle); stdcall;
begin Application.Handle := AHandle; with TFormDLL.Create(nil) do begin ShowModal; Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 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