j'essaie de créer une fenêtre avec des gadgets et un ecran pour afficher un starfield,
j'utilise la lib MP3D pour le starfield car c'est le plus simple,
au moment d'interchanger les buffers graphiques, ma fenêtre et mes gadgets ne sont plus visibles.... si j'enlève les MP_RenderWolrd et MP_Flip()
je vois bien ma fenêtre avec mes texts et boutons ....
connaissez vous un moyen de faire fonctionner les deux en même temps ?
je mets le source , un patcher pour fichier .exe (ou autre) , vous entrez votre offset en décimal ainsi que la valeur décimale à affecter .
Merci, edit : amélioration , j'ai le starfield dessous la fenetre principale .....si je la bouge, je le vois
Code : Tout sélectionner
IncludeFile "fmodex-min.pbi"
#FMOD_OPENMEMORY = $00000800
Enumeration
#chiptune
#scroll
#wmain
#wmain2
EndEnumeration
Structure FMOD_CREATESOUNDEXINFO
cbsize.i
length.i
params.i[32]
EndStructure
Global fmodsystem.i, Channel.i, i.i, j.i
Global Dim Sounds(1)
Define szFile.s
Define szOut.s
Define dwSize.l
Define lFF.l
Define Text_offsetV.i
InitSprite()
EP_InitFXLib()
MP_Graphics3DWindow(150,50,450,170,"", #PB_Window_ScreenCentered| #PB_Window_BorderLess)
OpenWindow(#wmain,150,50,500,360,"Single .EXE Dynamic patcher Jmg@2017 Esc to quit", #PB_Window_ScreenCentered)
;
SetWindowColor(#wmain,RGB(14, 10, 100))
;OpenWindowedScreen(WindowID(0),10,120,480,180)
Text_File = TextGadget(#PB_Any, 150, 15, 290, 20, "", #PB_Text_Border)
Text_f1= TextGadget(#PB_Any, 50, 20, 30, 20, "File")
SetGadgetColor(Text_f1,#PB_Gadget_FrontColor,RGB(154, 154, 154))
SetGadgetColor(Text_f1,#PB_Gadget_BackColor,RGB(14, 10, 100))
Text_offsetC= TextGadget(#PB_Any, 50, 50, 90, 20, "Decimal Offset :")
SetGadgetColor(Text_offsetC,#PB_Gadget_BackColor,RGB(14, 10, 100))
SetGadgetColor(Text_offsetC,#PB_Gadget_FrontColor,RGB(154, 154, 154))
Text_offsetV= EditorGadget(#PB_Any, 150, 45, 90, 20)
Text_valueC=TextGadget(#PB_Any, 50, 80, 90, 20, "Decimal Value :")
SetGadgetColor(Text_valueC,#PB_Gadget_BackColor,RGB(14, 10, 100))
SetGadgetColor(Text_valueC,#PB_Gadget_FrontColor,RGB(154, 154, 154))
Text_valueV =EditorGadget(#PB_Any, 150, 75, 90, 20)
Button_SelectFile = ButtonGadget(#PB_Any, 50, 320, 140, 20, "Select File")
Button_PatchFile = ButtonGadget(#PB_Any, 310, 320, 140, 20, "Patch File")
EP_Init2DStars(200,7,1.3,0,0,640,480)
EP_2DStarsColor(1,RGB(255,0,0))
EP_2DStarsColor(2,RGB(0,255,0))
Procedure FMOD_DataSectionLoadSound(SoundId, SoundLocStart, SoundLocEnd)
Protected exinfo.FMOD_CREATESOUNDEXINFO
exinfo\cbSize = SizeOf(FMOD_CREATESOUNDEXINFO)
exinfo\Length = SoundLocEnd - SoundLocStart
FMOD_System_CreateStream(FmodSystem, SoundLocStart, #FMOD_SOFTWARE | #FMOD_OPENMEMORY, @exinfo, @Sounds(SoundId))
EndProcedure
Procedure.l Patch(file.s,location.l,byte.b)
If OpenFile(0,file)
FileSeek(0,location)
WriteData(0,@byte,1)
CloseFile(0)
ProcedureReturn 1
EndIf
EndProcedure
;----------------Init sound First Part-------------------------------------------------
first:
FMOD_System_Create(@fmodsystem)
FMOD_System_Init(fmodsystem, 32, #FMOD_INIT_NORMAL, 0)
FMOD_DataSectionLoadSound(0, ?chiptune, ?endchiptune)
FMOD_System_PlaySound(fmodsystem, #FMOD_CHANNEL_FREE, Sounds(0), 0, @channel)
Repeat
;event=WindowEvent()
EP_2DStarsDraw()
Select WindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case Button_SelectFile
szFile = OpenFileRequester("Select file to patch", "", "*.*", 0)
If szFile
SetGadgetText(Text_File, szFile)
Else
EndIf
Case Button_PatchFile
offValue= Val(GetGadgetText(Text_offsetV))
byteValue = Val(GetGadgetText(Text_valueV))
; Debug offValue
; Debug byteValue
Patch(szFile, offValue, byteValue )
MessageRequester("Info"," File patched successfully ! ...")
EndSelect
EndSelect
MP_RenderWorld()
MP_Flip ()
Until GetAsyncKeyState_(#VK_ESCAPE)
DataSection
chiptune:
IncludeBinary "chiptune1.mp3"
endchiptune:
EndDataSection
edit : avec :
Code : Tout sélectionner
hwnd =OpenWindow(#wmain,150,50,500,360,"Single .EXE Dynamic patcher Jmg@2017 Esc to quit", #PB_Window_ScreenCentered)
MP_ScreenToHandle(hwnd)
donc j'ouvre une 2 ème fenêtre et je bind la lib MP avec celle-ci , c'est mieux j'ai bien le starfield où je le veux mais les gadgets de la première ne s'affichent pas ...
hwnd =OpenWindow(#wmain,150,50,500,360,"Single .EXE Dynamic patcher Jmg@2017 Esc to quit", #PB_Window_ScreenCentered)
hwnd2= OpenWindow(#wmain2,150,50,480,180,"", #PB_Window_ScreenCentered | #PB_Window_BorderLess)
MP_ScreenToHandle(hwnd2)
1ère fenetre plus 1 OpenWindowedScreen(WindowID(#wmain),10,120,480,180) : bien placé mais erreur mémoire quand MP_flip()

[/img]
avec
Starfield ok , mais plus de gadgets ...hwnd =OpenWindow(#wmain,150,50,500,360,"Single .EXE Dynamic patcher Jmg@2017 Esc to quit", #PB_Window_ScreenCentered)
hwnd2= OpenWindow(#wmain2,150,50,480,180,"", #PB_Window_ScreenCentered | #PB_Window_BorderLess)
MP_ScreenToHandle(hwnd2)

[/img]