[OK] Créer un gadget via une Dll dans une fenêtre existante

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

[OK] Créer un gadget via une Dll dans une fenêtre existante

Message 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
Dernière modification par microdevweb le jeu. 18/juin/2015 8:23, modifié 1 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Créer un gadget via une Dll dans une fenêtre existante

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Créer un gadget via une Dll dans une fenêtre existante

Message 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?
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Créer un gadget via une Dll dans une fenêtre existante

Message 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
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Créer un gadget via une Dll dans une fenêtre existante

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Créer un gadget via une Dll dans une fenêtre existante

Message 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
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Créer un gadget via une Dll dans une fenêtre existante

Message par microdevweb »

Merci G-rom pour ce complément d'information.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Répondre