Ouvrir une fenêtre (ecran) extern ds un programme purebasic
Ouvrir une fenêtre (ecran) extern ds un programme purebasic
Salut
Savez-vous comment je peux faire pour ouvrir l'intérieur d'une fenêtre d'un programme dans purebasic.
Par exemple, avec Runprogram() j'ouvre wordpad, et j'affiche wordpad (uniquement l'intérieur de la fenêtre) dans mon programme purebasic puis j'agis dessus en récupérant des informations.
Evidemment, ce n'est pas avec wordpad ^^, c'est pour me faire un éditeur de niveau 3D utilisant un moteur de jeu dont j'ai la licence.
Je voudrais utiliser l'affichage de ce moteur de jeu (un .exe) et ajouter des gadgets pour pouvoir ajouter des objets, les modifier, les bouger, changer les sahders/textures, les lights, etc...
Vous savez si c'est possible et si oui, comment je peux faire ça ?
merci.
Savez-vous comment je peux faire pour ouvrir l'intérieur d'une fenêtre d'un programme dans purebasic.
Par exemple, avec Runprogram() j'ouvre wordpad, et j'affiche wordpad (uniquement l'intérieur de la fenêtre) dans mon programme purebasic puis j'agis dessus en récupérant des informations.
Evidemment, ce n'est pas avec wordpad ^^, c'est pour me faire un éditeur de niveau 3D utilisant un moteur de jeu dont j'ai la licence.
Je voudrais utiliser l'affichage de ce moteur de jeu (un .exe) et ajouter des gadgets pour pouvoir ajouter des objets, les modifier, les bouger, changer les sahders/textures, les lights, etc...
Vous savez si c'est possible et si oui, comment je peux faire ça ?
merci.
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: Ouvrir une fenêtre (ecran) extern ds un programme pureba
Ma théorie :
Je dirai déjà que ce sera du windows only car tu vas devoir te taper de l'API SendMessage_ à gogo, ne serait-ce que pour lier ta fenêtre PB à ta fenêtre externe.
Ensuite, si ton exe moteur accepte les lignes de commandes, tu pourras logiquement communiquer avec les bouton de ta fenêtre PB qui échangeront des instructions via #PB_Program_Open/read/write
Je dirai déjà que ce sera du windows only car tu vas devoir te taper de l'API SendMessage_ à gogo, ne serait-ce que pour lier ta fenêtre PB à ta fenêtre externe.
Ensuite, si ton exe moteur accepte les lignes de commandes, tu pourras logiquement communiquer avec les bouton de ta fenêtre PB qui échangeront des instructions via #PB_Program_Open/read/write
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Ouvrir une fenêtre (ecran) extern ds un programme pureba
et hop !

Code : Tout sélectionner
; mettre un prg dans sa propre fenetre
#APPNAME1 = "Calculatrice"
Define *Parent
Global *Child
Procedure MyWindowCallback(hWnd, uMsg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_PAINT
RedrawWindow_(*Child, 0, 0, #RDW_INVALIDATE|#RDW_ERASE|#RDW_FRAME)
EndSelect
ProcedureReturn result
EndProcedure
*Child = FindWindow_(0, #APPNAME1)
If Not *Child
RunProgram("calc.exe") : Delay(1000)
*Child = FindWindow_(0, #APPNAME1)
If Not *Child
MessageRequester("Error", #APPNAME1 + " must be running !")
End
EndIf
EndIf
*Parent = OpenWindow(0, 0, 0, 320, 240, "Master", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget)
If *Parent
SetWindowColor(0, $AAAAAA)
CreateStatusBar(0, WindowID(0))
SetParent_(*Child, WindowID(0))
SetWindowPos_(*Child, 0, 0, 0, 0, 0, #SWP_NOSIZE | #SWP_SHOWWINDOW)
SetWindowCallback(@MyWindowCallback())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
If IsWindow_(*Child)
SetParent_(*Child, 0)
EndIf
CloseWindow(0)
Break
EndSelect
ForEver
EndIf
End

Re: Ouvrir une fenêtre (ecran) extern ds un programme pureba
salut Zorro 
Merci pour cet exemple
, ça marche pas mal effectivement (j'avais vu ça sur le forum anglais).
Tu sais ensuite comment je peux faire pour envoyer des informations (text$ ou variable) dans la fenêtre de la calculette et récupérer des informations depuis la calculette vers ma fenêtre à moi ?
En fait , j'aimerai faire un éditeur de niveau 3D pour les jeux 3D que je réalise avec un game engine qui ne permet pas de faire facilement des interfaces type gadget/menu/ etc.. Pour ça, purebasic est excellent et j'aimerai l'utiliser avec en écran central le game engine (j'ai testé et ça marche super bien en fait ^^).
Mais je dois pouvoir interagir avec l'écran central (le game engine), en lui envoyant des infos :
- je clique dans ma fenêtre purebasic sur une checkbox (pour activer les ombres par exemple)
- j'envoie cette information dans l'écran central (la fenêtre game engine) : ombre active
- et paf, j'active les ombres dans l'écran game-engine
Une idée pour faire ça ?
merci beaucoup

Merci pour cet exemple

Tu sais ensuite comment je peux faire pour envoyer des informations (text$ ou variable) dans la fenêtre de la calculette et récupérer des informations depuis la calculette vers ma fenêtre à moi ?
En fait , j'aimerai faire un éditeur de niveau 3D pour les jeux 3D que je réalise avec un game engine qui ne permet pas de faire facilement des interfaces type gadget/menu/ etc.. Pour ça, purebasic est excellent et j'aimerai l'utiliser avec en écran central le game engine (j'ai testé et ça marche super bien en fait ^^).
Mais je dois pouvoir interagir avec l'écran central (le game engine), en lui envoyant des infos :
- je clique dans ma fenêtre purebasic sur une checkbox (pour activer les ombres par exemple)
- j'envoie cette information dans l'écran central (la fenêtre game engine) : ombre active
- et paf, j'active les ombres dans l'écran game-engine

Une idée pour faire ça ?
merci beaucoup

http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: Ouvrir une fenêtre (ecran) extern ds un programme pureba
oui !blendman a écrit : Une idée pour faire ça ?

il te faut utiliser un protocole de dialogue entre 2 applis les MailSlot
ton moteur et ton designer
pour ça il existe une methode (mais il y en a d'autre ) j'ai utilisé ça pour commander EPB
en clair c'est comme un disque Virtuel (une boite au lettres)
les deux application ecrivent dedans
pour echanger des données
apres c'est a toi de voir ce que tu fais de ces info
lance les 2 prg suivant et imagine que c'est ton moteur et ton designer
exemple :
prg Envoie :
Code : Tout sélectionner
Procedure Error(message$)
wError = GetLastError_()
If wError
*ErrorBuffer = AllocateMemory(1024)
message$+Chr(10)+PeekS(*ErrorBuffer, FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM, 0, wError, 0, *ErrorBuffer, 1024, 0))
FreeMemory(*ErrorBuffer)
EndIf
MessageRequester("Error", message$)
End
EndProcedure
#file=1
If OpenWindow(1,320, 200, 320, 200,"Interprocess communications: Mailslot client",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget)
If CreateGadgetList(WindowID(1))
StringGadget(0, 8, 8, 304, 152, "")
ButtonGadget(1, 8, 168, 64, 32, "Send")
MailSlot$ = "\\.\mailslot\test"
MailSlotData = RegisterWindowMessage_("DATASENT")
Repeat
eventID = WaitWindowEvent()
Select eventID
Case #PB_Event_Gadget
If EventGadget()=1
If OpenFile(#file, MailSlot$)
WriteString(#file,GetGadgetText(0))
CloseFile(#file)
PostMessage_(#HWND_BROADCAST, MailSlotData, 0, 0)
Else
Error("OpenFile()")
EndIf
EndIf
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit
EndIf
EndIf
prg recois
Code : Tout sélectionner
Procedure Error(message$)
wError = GetLastError_()
If wError
*ErrorBuffer = AllocateMemory(1024)
message$+Chr(10)+PeekS(*ErrorBuffer, FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM, 0, wError, 0, *ErrorBuffer, 1024, 0))
FreeMemory(*ErrorBuffer)
EndIf
MessageRequester("Error", message$)
End
EndProcedure
MailSlot$ = "\\.\mailslot\test"
hMailslot = CreateMailslot_(MailSlot$, 0, #MAILSLOT_WAIT_FOREVER, #Null)
If hMailslot=#INVALID_HANDLE_VALUE:Error("CreateMailslot_()"):EndIf
If OpenWindow(0, 640, 200, 320, 200, "Interprocess communications: Mailslot server",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget)
If CreateGadgetList(WindowID(0))
TextGadget(0, 8, 8, 304, 192, "No waiting messages.")
MailSlotData = RegisterWindowMessage_("DATASENT")
Repeat
eventID = WaitWindowEvent()
Select eventID
Case MailSlotData
If GetMailslotInfo_(hMailslot, #Null, @cbMessage, @cMessage, #Null)=0:Error("GetMailslotInfo_()"):EndIf
If cbMessage<>#MAILSLOT_NO_MESSAGE
While cMessage
*Message = AllocateMemory(cbMessage+1)
If ReadFile_(hMailslot, *Message, cbMessage, @cbRead, 0)=0:Error("ReadFile_()"):EndIf
SetGadgetText(0, PeekS(*Message, cbRead))
FreeMemory(*Message)
fResult = GetMailslotInfo_(hMailslot, #Null, @cbMessage, @cMessage, #Null)
If fResult=0:Error("GetMailslotInfo_()"):EndIf
Wend
EndIf
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit
EndIf
EndIf
CloseHandle_(hMailslot)
Re: Ouvrir une fenêtre (ecran) extern ds un programme pureba
salut
Encore merci Zorro
J'ai testé et c'est pas mal du tout. En fait, j'avais pensé à un truc du genre (passer par le network comme un server-client classique), mais je ne savais pas que ça existait ^^.
Je crois que ça peut être une solution pour mes tests (voire plus).
Encore un grand merci
.
Encore merci Zorro

J'ai testé et c'est pas mal du tout. En fait, j'avais pensé à un truc du genre (passer par le network comme un server-client classique), mais je ne savais pas que ça existait ^^.
Je crois que ça peut être une solution pour mes tests (voire plus).
Encore un grand merci

http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: Ouvrir une fenêtre (ecran) extern ds un programme pureba
Ah mince, je viens de me rendre compte que je ne peux pas utiliser ça, car je n'ai pas ce "GetMailslotInfo_" dans mon gameengine ^^.
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: Ouvrir une fenêtre (ecran) extern ds un programme pureba
comprends pas
tu n'a pas acces aux sources ?
tu n'a pas acces aux sources ?
Re: Ouvrir une fenêtre (ecran) extern ds un programme pureba
pas aux sources du gameengine ^^.Zorro a écrit :comprends pas
tu n'a pas acces aux sources ?
Je veux créer un editeur de niveau 3D avec pb, et utiliser dans celui-ci le "screen" du game engine que j'utilise (ce n'est pas moi qui ai fait ce game engine).
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: Ouvrir une fenêtre (ecran) extern ds un programme pureba
ha d'accords !
alors les 2 solution qui te restent c'est
1- le gars qui a cree le moteurs a prevu qu'on puisse le commander d'une façon ou une autre ....
faut lui demander
2- utiliser un hack ... c'est a dire taper dans les adresses du prg ... mais sans informations c'est pas gagner
surtout pour des choses aussi complexe
pour un jeux ou on poke une valeur pour passer a travers les murs, c'est deja pas tres simple, mais faisable par taton avec des soft de recherche comme Cheat Engine par exemple on repere l'adresse qui va bien, et on creer un prg qui va poser la bonne valeur
mais pour ton projet, c'est mort !!
alors les 2 solution qui te restent c'est
1- le gars qui a cree le moteurs a prevu qu'on puisse le commander d'une façon ou une autre ....
faut lui demander
2- utiliser un hack ... c'est a dire taper dans les adresses du prg ... mais sans informations c'est pas gagner
surtout pour des choses aussi complexe
pour un jeux ou on poke une valeur pour passer a travers les murs, c'est deja pas tres simple, mais faisable par taton avec des soft de recherche comme Cheat Engine par exemple on repere l'adresse qui va bien, et on creer un prg qui va poser la bonne valeur
mais pour ton projet, c'est mort !!
Re: Ouvrir une fenêtre (ecran) extern ds un programme pureba
Je me suis mal exprimé ^^.
En fait, je peux faire beaucoup de chose, mais pas utiliser GetMailslotInfo_ (il s'agit d'agk). Par exemple, il y a des fonctions pour faire du multiplayer (socket, créer un server-client, envoyer & recevoir des messages, etc..), je peux aussi lire des fichiers ou écrire dedans, etc...
Evidemment, je peux charger des images, des modèles 3D, les afficher, créer et gérer des sprites, etc... Mais cette partie-là ne concerne pas trop la gestion-inter-fenêtre ^^.
En fait, je peux faire beaucoup de chose, mais pas utiliser GetMailslotInfo_ (il s'agit d'agk). Par exemple, il y a des fonctions pour faire du multiplayer (socket, créer un server-client, envoyer & recevoir des messages, etc..), je peux aussi lire des fichiers ou écrire dedans, etc...
Evidemment, je peux charger des images, des modèles 3D, les afficher, créer et gérer des sprites, etc... Mais cette partie-là ne concerne pas trop la gestion-inter-fenêtre ^^.
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: Ouvrir une fenêtre (ecran) extern ds un programme pureba
donc ça reviens a demander aux Auteurs de Agk
le protocole de comunication avec leur moteur 3D
il y avait un gars sur le forum anglais qui avait fait un Wrapp du moteur 3D du Dark Basic
c'est le meme principe !
je suppose que AGK utilise un protocole de comunication entre leur editeur et le moteur au moment de la compilation
c'est la qu'il te faut chercher ...
prends d'abord un max d'info concernant agk (chez eux... leur forum )
car forcement le moteur 3D doit etre séparé ... comme Ogre avec Purebasic ...
c'ets au moment de la compilation que l'un parle avec l'autre
d'ailleurs ... pourquoi ne pas directement coder ton editeur 3D avec AGK
ça me semble le plus simple ...
le protocole de comunication avec leur moteur 3D
il y avait un gars sur le forum anglais qui avait fait un Wrapp du moteur 3D du Dark Basic
c'est le meme principe !
je suppose que AGK utilise un protocole de comunication entre leur editeur et le moteur au moment de la compilation
c'est la qu'il te faut chercher ...
prends d'abord un max d'info concernant agk (chez eux... leur forum )
car forcement le moteur 3D doit etre séparé ... comme Ogre avec Purebasic ...
c'ets au moment de la compilation que l'un parle avec l'autre
d'ailleurs ... pourquoi ne pas directement coder ton editeur 3D avec AGK
ça me semble le plus simple ...

Re: Ouvrir une fenêtre (ecran) extern ds un programme pureba
C'est ce que j'ai fait au départ, mais il n'y a aucun gadget (c'est orienté jeu mobile essentiellement), donc, je suis obligé de tout coder moi-même : panelgadget, trackbar, checkbox, stringgadget, event, menu, etc... J'ai commencé, mais c'est vraiment pas terrible, je perds un temps fou à coder des gadgets et pas à avancer sur l'éditeur, alors qu'avec Purebasic, j'ai déjà tous les gadgets sous la main (ainsi que menu, eventwindow, eventgadget, etc...) et plein de fonctions très pratique, comme les requester par exemple. c'est pour ça que je voudrais utiliser le moteur de jeu pour l'affichage et la manipulation interne et purebasic pour la gestion de l'interface (gadget, menu, etc...)Zorro a écrit :d'ailleurs ... pourquoi ne pas directement coder ton editeur 3D avec AGK
ça me semble le plus simple ...
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: Ouvrir une fenêtre (ecran) extern ds un programme pureba
je comprends, bon je ne vais pas pouvoir t'aider
je ne connais pas AGK , du reste je viens de regarder une video de demo
ça a l'air sympath a coder , on dirai du Basic
par contre tu me deçois en disant qu'il n'y a pas de gadget .... c'est vraiement dommage
j'aurai peut etre investi ...
[reedit]
ha mais c'est du DarkBasic ... ok je comprends
je ne connais pas AGK , du reste je viens de regarder une video de demo
ça a l'air sympath a coder , on dirai du Basic

par contre tu me deçois en disant qu'il n'y a pas de gadget .... c'est vraiement dommage
j'aurai peut etre investi ...

[reedit]
ha mais c'est du DarkBasic ... ok je comprends

Re: Ouvrir une fenêtre (ecran) extern ds un programme pureba
oui, c'est très proche du basic (on peut aussi coder en c++ si on veut, mais je préfère le basic c'est plus simple et je peux me concentrer sur le gameplay).Zorro a écrit :je viens de regarder une video de demo
ça a l'air sympa a coder , on dirai du Basic
En fait, il y a quelques gadgets, mais c'est très limité : virtualbutton, virtualjoystick, editbox (sorte de stringgadget) et message (messagerequester très simplifié), mais c'est tout ^^.par contre tu me deçois en disant qu'il n'y a pas de gadget .... c'est vraiment dommage
j'aurai peut etre investi ...
Je suis crée une lib avec plein de gadgets et pour les menus, statusbar, etc... mais je préfèrerai vraiment faire mon éditeur en pb

En fait, c'est publié par la même boîte qui a fait DB (qui n'existe plus d'ailleurs), mais ce n'est pas le même développeur qui fait AGK (il me semble). C'est très orienté mobile comme appli, même si on peut aussi faire du pc, mais les perf sont moins bonnes qu'avec purebasic.[reedit]ha mais c'est du DarkBasic ... ok je comprends
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english