Hallo Christian!
Für mich schaut das arg nach "durch den Zeh eine Hirnoperation vorgenommen" aus.
Nette Umschreibung. Aber womöglich ist der Weg nicht ganz so weit. Ich hab das halt einfach mal gemacht (nur ganz einfach) und kann nur sagen: "Es hat geklappt!".
Hier der Delphicode für die DLL:
Code: Alles auswählen
library Formdll;
uses
Forms,
FormularDll in 'FormularDll.PAS' {DllForm};
{$R *.RES}
exports
ZeigDich;
begin
end.
Hier der Delphicode für das Formular:
Code: Alles auswählen
unit FormularDll;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ComCtrls, OleCtrls, ExtCtrls, Buttons;
type
TDllForm = class(TForm)
BitBtn2: TBitBtn;
procedure BitBtn2Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
DllForm: TDllForm;
{$ifdef WIN32}
procedure ZeigDich;
{$else}
procedure ZeigDich; export;
{$endif}
implementation
{$R *.DFM}
Procedure ZeigDich;
begin
DllForm := TDllForm.Create(Application);
DllForm.Show;
end;
procedure TDllForm.BitBtn2Click(Sender: TObject);
begin
DllForm.Release;
end;
end.
Hier der Lazaruscode für das Project:
Code: Alles auswählen
program project1;
{$mode objfpc}{$H+}
{$R *.res}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms
{ you can add units after this }, Unit1;
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Hier der Lazaruscode für das aufrufende Formular:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, TypInfo, Forms, ExtCtrls,
AvgLvlTree, LCLType, LCLProc, LCLIntf, LResources, GraphType, Graphics, Menus,
ActnList, ClipBrd, Controls, Buttons, Windows;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Panel1: TPanel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
aWnd : Hwnd;
WPM : TWindowPlacement;
procedure ZeigDich;
implementation
{ TForm1 }
procedure ZeigDich; external 'FORMDLL';
procedure TForm1.Button1Click(Sender: TObject);
begin
ZeigDich;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;
initialization
{$I unit1.lrs}
end.
Ich hänge da mal ein Bildchen an.
Es wäre echt schade wenn keiner was macht weil es halt Windows spezifisch ist und Windows spezifisches für Lazarus links liegen bleibt. Ja stell Dir vor es gibt Freibier und keiner geht hin. Ich probiere das mal weiter bis ich im Hirn bin und lass den Sinn erst mal aussen vor.
Tschüsss!