aus dll auf ein Gadget zugreifen?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

aus dll auf ein Gadget zugreifen?

Beitrag von nicolaus »

Hi

hab mal wieder ne frage und zwar wie kann ich am besten aus einer dll auf ein Gadget einer anwendung zugreifen und dem gadget z.b. items hinzufügen?
Das handle des gadgets habe ich (habe ja auch das eigentliche programm geschrieben :wink: )

danke euch schon mal

gruß nico
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: aus dll auf ein Gadget zugreifen?

Beitrag von Danilo »

nicolaus hat geschrieben:hab mal wieder ne frage und zwar wie kann ich am besten aus einer dll auf ein Gadget einer anwendung zugreifen und dem gadget z.b. items hinzufügen?
Das handle des gadgets habe ich (habe ja auch das eigentliche programm geschrieben :wink: )
Items hinzufügen kannst Du sicherlich mit einem SendMessage.

Welche Message Du sendest hängt halt davon ab welches
Gadget/Control es ist. Brauchst nur in MSDN schauen, z.B.
bei Listbox oder was Du halt brauchst.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

@Danilo
erst mal danke und wenn ich deine antwort so lese dann frag ich depp mich warum ich da nich selber drauf gekommen bin :oops:

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.

gruß nico
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

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... ;)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

@Danilo

und noch mal danke.
genau das is ja mein prob das ich noch keine idee habe wie ich die verwaltung der gadgets aus der dll mache. Es geht einfach darum das ich usern die möglichkeit geben möchte plugins für eine app von mir zu schreiben doch werden diese plugins immer steuerelemente haben die in dem container (von der haupt-app) angezeigt werden sollen.

bei items in ner listbox oder in nem tree is das nich so das prob aber die verwaltung von steuerelementen aus ner "fremden" dll wird wohl doch schwieriger.
Wenn ich jetzt die ID´s von 5000-10000 reserviere (für die dll´s)
wäre das eine möglichkeit da ja immer nur ein plugin active sein kann und ich so auch wenn in mehreren dll´s z.b. die gadgetid 5002 verwendet wird ja nur die des gerade activen plugins die richtige sein kann.

Danke für den tip und denkanstoss werd das gleich mal versuchen um zu setzten.

gruß nico
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

nicolaus hat geschrieben:Danke für den tip und denkanstoss werd das gleich mal versuchen um zu setzten.
plugin.zip (30k) ;)

Enthält eine Main.exe und 2 Beispiel-Plugins jeweils als DLL.
Du kannst die Plugins mehrfach laden, versuche es ruhig 10 mal.

Was noch fehlt ist ein EndPlugin() oder so. Plugin2.dll verwendet
zum Beispiel einen Thread, und wenn der noch nicht fertig ist
bevor Du das Programm beendest, kann es am Ende zu einem
Crash kommen.
Aber das Prinzip hast Du jetzt sicherlich verstanden - und wie
man sieht funktioniert das was ich oben theoretisch beschrieben
habe auch in der Praxis.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

danke dir wiederum ganz sehr.
werds mir gleich mal anschauen.
Antworten