nicolaus hat geschrieben:aber mal noch ne frage und zwar wie ist das wenn ich aus einer dll herraus z.b. in die Gadgetlist eines Containergadgets weitere gadgets hinzufügen will? Also das Containergadget is dann auch wieder in einer app. und ich möchte aus der dll raus dem container noch weitere steuerelemente hinzufügen.
Code: Alles auswählen
ProcedureDLL AddToContainer(hWnd)
UseGadgetList(hWnd)
; ... Nun ein paar Gadgets hinzufügen
EndProcedure
In dem Programm rufst Du dann AddToContainer in der DLL
auf und übergibst die GadgetID(#container).
Das mußt Du allerdings testen. Das hinzufügen sollte kein
Problem sein, d.h. die Gadgets sollten im Container auftauchen.
Probleme kann es mit der Eventverarbeitung dieser Gadgets
geben. Die Events werden ja im Hauptprogramm verarbeitet,
da die DLL direkt zu dem Prozess gehört in den sie geladen
wurde.
Wenn Du aber in der DLL ein Gadget mit der Nummer 15
erstellst, und im Programm auch die Nummer 15 verwendest,
dann wirst Du wohl beim betätigen beider Gadgets einen
Event mit der EventGadgetID 15 bekommen, weißt dann
aber nicht von welchem Gadget es kommt.
Das Hauptprogramm und die DLL sind ja getrennt kompilierte
"Programme", weshalb sich dann auch die Nummern und
Befehle überschneiden.
Du kannst in der DLL kein Gadget mit der Nummer 12 erstellen
und es im Programm mit HideGadget(12,1) verstecken.
Über WinAPI kannst Du das allerdings alles machen, wenn
die DLL-Funktion das Handle des neuen Gadgets zurückgibt.
Dann machst Du einfach ShowWindow_(handle, #SW_HIDE).
Du solltest also in der DLL z.B. GadgetNummern von 5000 bis 10000
verwenden. Wenn dann im Programm ein Event zwischen 5k und 10k
ankommt, dann weißt Du das er von einem DLL-Gadget kommt
und könntest es an die DLL weiterleiten indem Du eine entspr.
Funktion aufrufst und diese GadgetNummer übergibst.
DLL-Gadgets im Programm "bearbeiten" aber nur über plain API.
Hmm... sollte gehen. Mußt Du mal genau testen...
