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 Formular aus DLL erzeugt neuen Taskleisten-Eintrag (https://www.delphipraxis.net/71614-formular-aus-dll-erzeugt-neuen-taskleisten-eintrag.html)

CK_CK 18. Jun 2006 14:05


Formular aus DLL erzeugt neuen Taskleisten-Eintrag
 
Hi @ all,
ich versuche gerade, mich ein wenig in DLL-Programmierung einzuarbeiten ;)

Also, ich habe eine DLL, die folgende Funktion exportiert (Form1 ist ein hinzugefügtes Formular):
Delphi-Quellcode:
type
  TTestRec = record
    edit : PChar;
    check : Boolean;
  end;

function DLLFormular: TTestRec; stdcall;
var
  Form1: TForm1;
begin
  Form1:=TForm1.Create(Application);
  try
    Form1.ShowModal;
    Result.edit := PChar(Form1.Edit1.Text);
    Result.check := Form1.CheckBox1.Checked;
  finally
    Form1.Release;
  end;
end;
und eine Hauptanwendung, die die Funktion verwendet (Name: Form2):
Delphi-Quellcode:
function DLLFormular: TTestRec; stdcall; external 'pDLL.dll';
function GetStr(str: PChar): PChar; stdcall; external 'pDLL.dll';

procedure TForm2.Button1Click(Sender: TObject);
var
  Rec: TTestRec;
begin
  Rec := DLLFormular;
  Label1.Caption := Rec.edit;
  CheckBox1.Checked := Rec.check;
end;
Das klappt auch wunderbar, nur ist mein Problem, dass das DLL-Formular einen zusätzlichen Taskleisten-Eintrag erzeugt. Es sind dann zwei Einträge vorhanden, obwohl ich nur einen benötige.
Ein ShowMessage in der DLL-Form erzeugt übrigens noch einen dritten Eintrag...

Wie kann man das verhindern?

(Ich hoffe, ich habe mich verständlich ausgedrückt ;))

Viele Grüße,
CK_CK

CK_CK 18. Jun 2006 15:38

Re: Formular aus DLL erzeugt neuen Taskleisten-Eintrag
 
Hallo nochmal,
ich hab' eine Lösung gefunden...
...und damit dem Nächste mit dem Problem geholfen wird poste ich die gleich mal ;)

Ich habe zuerst Folgende Prozedur in die Dll integriert (und exportiert):
Delphi-Quellcode:
procedure SetHandle(handle: THandle); stdcall;
begin
  Application.Handle := handle;
end;
...und diese in der Exe einmal aufgerufen:
Delphi-Quellcode:
procedure SetHandle(hndl: THandle); stdcall; external 'pDLL.dll';
//[...]
SetHandle(Application.Handle);
Das behebt mein Problem und alle zukünftigen Formulare bekommen keinen zusätzlichen Taskbar-Eintrag... *freu*

Wenn jetzt noch jemand eine Idee hat, wie ich innerhalb der Dll das Handle der Hauptanwendung bekomme (ohne die Übergabefunktion), wäre ich SEHR dankbar ;)

Sonnige Grüße,
CK_CK

DGL-luke 18. Jun 2006 15:48

Re: Formular aus DLL erzeugt neuen Taskleisten-Eintrag
 
Das wird ohne explizite Übergabe nicht gehen. Woher soll die DLL auch wissen, wo deine Application liegt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:20 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