So habe nun eine Procedure geschrieben die das Laden des Plugins übernehmen soll
hier der Quellcode:
Code:
procedure TForm1.LoadPlugin(PluginPath: String);
var phm: HModule;
LoadP: procedure (
Handle: hwnd);
NewPanel: TPanel;
begin
phm:=LoadPackage(PluginPath);
If phm <> 0 Then
try
@LoadP:=GetProcAddress(phm, 'LoadMe');
If Assigned(LoadP) Then
begin
NewPanel:=TPanel.Create(Form1);
NewPanel.Align:=alTop;
NewPanel.BevelInner:=bvNone;
NewPanel.BevelOuter:=bvNone;
NewPanel.Height:=100;
NewPanel.Visible:=True;
LoadP(NewPanel.Handle);
end
else
begin
ShowMessage ('"LoadMe"-Prozedur nicht gefunden');
end
finally
UnloadPackage(phm);
end
else
ShowMessage ('Plugin nicht gefunden');
end;
die Plugin-
Unit sieht so aus:
Code:
...
procedure LoadMe(
Handle: hwnd);
begin
Form1:=TForm1.CreateParented(
Handle);
Form1.Align:=alClient;
Form1.Show;
end;
procedure GetMeFree;
begin
Form1.Release;
end;
exports
LoadMe,
GetMeFree;
end.
- So habe folgende Probleme Das Panel wird nicht erstellt (Bekomme ne Meldung das kein Parent an das Plugin übergeben wurde)
- erstelle ich zur entwurfzeit ein Panel und weise dem Plugin die als Paren zu so wird das Plugin dennoch nicht geladen (ausser einmal hats geklappt)
- Bei dem einen Mal wo es funktioniert hatte zeigte es sich aber nicht so wie erwünscht:
--eigener Taskbutton in der Taskleiste für das Plugin der aber störend ist
--da die Eigenschaft "Align" des Fensters auf "alClient" stand so bozog sich diese nicht auf das Panel sondern auf den Ganzen Bildschirm (Im Panel wurde also nur ein Teil der Form angezeigt)
--Jegliche Funktion der Anwendung war verschwunden noch nicht mal das beenden der Anwendung war möglich.
Kann mir jemand bei dem Problem helfen?
Die Anwendung die ich erstellen möcht soll so eine Art Sidebar werden wie die SmartBarXP oder die DesktopSidebar, wenn jemand die Anwendungen kennt so weiss er bestimmt was ich mit den Panels meine. Wenn jemand die Anwendungen nicht kennt so bin ich bereit ein Screenshot hier zu posten.
Danke schon mal für bisherige und folgende Hilfe.