Code : Tout sélectionner
Enumeration Window
#MainForm
#MyText
EndEnumeration
If OpenWindow(#MainForm, 0, 0, 800, 600)
TextGadget(#MyText,20, 20, 100, 22, "My text", RGB(255, 0, 0))
Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
EndIf
-Le titre de la fenêtre est manquant
-La couleur n'est pas un paramètre de la fonction TextGadget()
Et pourtant .....
En regardant un des codes d'Eddy sur le forum Anglais, j'ai vu qu'il a trouvé une astuce pour Overrider les fonctions natives de PureBasic.
Imaginons que vous souhaitez redéfinir :
- OpenWindow() pour toujours afficher les fenêtres centrées sur l'écran et sans titre.
- TextGadget() pour ajouter le paramétre couleur du texte.
L'include et la zone de test sont dans ce code que je partage avec vous.
Code : Tout sélectionner
;PBOverride.pbi
CompilerIf Not Defined(MacroBuilder, #PB_Module)
DeclareModule MacroBuilder
EnableExplicit
Macro _Colon
:
EndMacro
Macro DefineMacro(_MacroHead, _MacroBody)
_Colon#Macro _MacroHead#_Colon#_MacroBody#_Colon#EndMacro
EndMacro
Macro Override(_Name, _Prefix=_)
DefineMacro(_Name, _Prefix#_Name)
EndMacro
EndDeclareModule
Module MacroBuilder
EndModule
CompilerEndIf
CompilerIf Not Defined(PBFunctionRename, #PB_Module)
DeclareModule PBOverride
EnableExplicit
Declare _OpenWindow(Window, x, y, InnerWidth, InnerHeight)
Declare _TextGadget(Gadget, x, y, Width, Height, Text$, Color=$000000)
EndDeclareModule
Module PBOverride
;Redéfinition de OpenWindow()
Procedure _OpenWindow(Window, x, y, InnerWidth, InnerHeight)
Protected Result
If Window = #PB_Any
Result = OpenWindow(#PB_Any, x, y, InnerWidth, InnerHeight, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
Else
Result = OpenWindow(Window, x, y, InnerWidth, InnerHeight, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EndIf
ProcedureReturn Result
EndProcedure
;Redéfinition de TextGadget()
Procedure _TextGadget(Gadget, x, y, Width, Height, Text$, Color=$000000)
Protected Result
If Gadget = #PB_Any
Result = TextGadget(#PB_Any, x, y, Width, Height, Text$)
SetGadgetColor(Result, #PB_Gadget_FrontColor, Color)
Else
Result = TextGadget(Gadget, x, y, Width, Height, Text$)
SetGadgetColor(Gadget, #PB_Gadget_FrontColor, Color)
EndIf
EndProcedure
EndModule
UseModule MacroBuilder
UseModule PBOverride
Override(OpenWindow)
Override(TextGadget)
CompilerEndIf
; ****** Zone de test ******
;IncludeFile "PBOverride.pbi"
Enumeration Window
#MainForm
#MyText
EndEnumeration
If OpenWindow(#MainForm, 0, 0, 800, 600)
TextGadget(#MyText,20, 20, 100, 22, "My text", RGB(255, 0, 0))
Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
EndIf