Also in Form1.controls registrieren geht definitiv nicht, denn dann knallt die
VCL dir Exceptions um die Ohren. Wie gesagt, wenn du Sharemem benutzt dürfte es gehen, aber schön ist es nicht. Allerdings für ein Pluginsystem, was nur unter deinem Delphi geschrieben wird, wäre es vielleicht sogar mal praktisch.
(Du musst dazu irgendwie in
DLL und Programm als erstes die
Unit Sharmem einbinden und irgendeine
DLL der finalen Exe mitgeben)
Dann kannst du
IMHO so programmieren, als wäre die
DLL eine
Unit im Programm. (Und du kannst auch AnsiStrings verwenden
Wenn dir Sharemem (wie den meisten) auch nicht gefällt:
Mit createwindow bekommst du den Buttonclick als Message an das ParentWindow mit, das geht etwa so:
Delphi-Quellcode:
//alles im Hauptprogramm
type TForm1=class(TForm)
...
procedure WMCommand(var msg:TMessage);message WM_COMMAND;
...
procedure WMCommand(var msg:TMessage);message WM_COMMAND;
begin
inherited;
if (msg.wparamhi=BN_clicked) then
begin
//in msg.wparamlo steht der identifier (also in dem Fall die 1, die wir oben angegeben haben)
//in msg.lparam sollte das WindowHandle des Buttons sein (result aus createwindow)
end;
end;
Am besten ist du fertigst dir für diese PluginButtons eine eigene Liste der Windowhandles. Denen kannst du auch eine CloseMessage schicken, wenn sich dein Formular schließt.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.