Page 1 sur 1
[OK] Créer un gadget via une Dll dans une fenêtre existante
Publié : sam. 30/mai/2015 7:51
par microdevweb
Bonjour,
J'aimerais créer dans une fenêtre existante un gadget, j'ai essayé ceci
Code : Tout sélectionner
ProcedureDLL Draw()
UseGadgetList(WindowID(0))
TextGadget(0,0,0,100,30,"teste")
EndProcedure
Mais cela ne fonctionne pas.
Merci d'avance
Re: Créer un gadget via une Dll dans une fenêtre existante
Publié : sam. 30/mai/2015 8:54
par falsam
je ne sais pas ce que tu veux faire avec, mais voila comment procéder.
■ la DLL
Code : Tout sélectionner
ProcedureDLL.l Draw(WindowID)
Protected OldGadgetList
OldGadgetList = UseGadgetList(WindowID) ; Create GadgetList and store old GadgetList
TextGadget(0, 0, 0, 100, 30, "teste")
UseGadgetList(OldGadgetList)
EndProcedure
■ Demo
Code : Tout sélectionner
OpenWindow(0, 0, 0, 500, 500, "Test", #PB_Window_ScreenCentered)
If OpenLibrary(0, "InsertGadget.dll")
If CallFunction(0, "Draw", WindowID(0))
CloseLibrary(0)
EndIf
EndIf
Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
Re: Créer un gadget via une Dll dans une fenêtre existante
Publié : sam. 30/mai/2015 9:08
par microdevweb
Merci Falsam,
Cela fonctionne parfaitement, ceci serrait'il possible si je créais la dll en purebasic et voudrais l'utilisée avec un autre langage?
Re: Créer un gadget via une Dll dans une fenêtre existante
Publié : sam. 30/mai/2015 9:15
par microdevweb
Après plusieurs testes ceci fonctionne aussi
; Code de la Dll de teste
Code : Tout sélectionner
ProcedureDLL Draw(WindowID)
Protected OldGadgetList
UseGadgetList(WindowID)
TextGadget(0, 0, 0, 100, 30, "teste")
EndProcedure
;Code de la fenêtre de teste
Code : Tout sélectionner
Import "TesteDll.lib"
Draw(IdWindow)
EndImport
OpenWindow(0, 0, 0, 500, 500, "Test", #PB_Window_ScreenCentered)
Draw(WindowID(0))
Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
Re: Créer un gadget via une Dll dans une fenêtre existante
Publié : sam. 30/mai/2015 9:36
par falsam
Si tu cherches à passer du texte à ta DLL ça ne va pas fonctionner.
Dans ce cas, tu vas devoir procéder autrement en utilisant un
prototype pour remplacer CallFunction()
■ On ajoute un paramètre String à la DLL
Code : Tout sélectionner
ProcedureDLL Draw(WindowID, Text.s)
UseGadgetList(WindowID)
TextGadget(0, 0, 0, 100, 30, Text)
EndProcedure
■ Le code de démo devient
Code : Tout sélectionner
Prototype.i ProtoDraw(Window.i, Text.s)
OpenWindow(0, 0, 0, 500, 500, "Test", #PB_Window_ScreenCentered)
If OpenLibrary(0, "InsertGadget.dll")
Draw.ProtoDraw = GetFunction(0, "Draw")
EndIf
Draw(WindowID(0), "Name")
Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
■ Documentation :
http://www.purebasic.com/french/documen ... types.html
Re: Créer un gadget via une Dll dans une fenêtre existante
Publié : sam. 30/mai/2015 15:04
par G-Rom
microdevweb a écrit :ceci serrait'il possible si je créais la dll en purebasic et voudrais l'utilisée avec un autre langage?
Peu de chance, ou alors avec de la bidouille, il faut que ta DLL ai accès à des fonctions interne à ton exécutable, l'idéal est d'envoyer à ta DLL une liste de pointeur.
ces pointeurs pointent vers des fonctions interne à l'executable, je ne sais pas si je suis clair...
Exemple :
L'executable :
Code : Tout sélectionner
Declare ChangeTitle(title.s)
Structure sApplicationAction
*funcChangeTitle
EndStructure
myApp.sApplicationAction
myApp\funcChangeTitle = @ChangeTitle
Procedure ChangeTitle(title.s)
SetWindowTitle(wnd, title)
EndProcedure
Tu as juste à passer la variable myApp avec la structure sApplicationAction à ta dll , ta dll pourra alors via le pointeur appeler la fonction avec callFunctionFast().
J'avais fait un post il y a quelques temps concernant les Plugins et une application , cela peu être t'aider à éclairer certaine chose :
http://www.purebasic.fr/french/viewtopi ... 21&t=12960
Re: Créer un gadget via une Dll dans une fenêtre existante
Publié : sam. 30/mai/2015 15:37
par microdevweb
Merci G-rom pour ce complément d'information.