MessageRequester personnalisé
Publié : ven. 27/mai/2016 11:33
Bonjour
Voila un code pour un MessageRequesterpersonnalisé, il s'utilise exactement comme le MessageRequester de PureBasic deux constante supplémentaire existe #PB_MessageRequester_NoYes et #PB_MessageRequester_NoYesCancel
MessageRequester(Title,Text,Flag=#PB_MessageRequester_Ok,Image=-1,CurrentLanguage=0)
Image --> si vous voulez ajouter une icone
CurrentLanguage --> pour changer la langue 0 FR 1 EN
Note: Seul gros HIC, n'est pas compatible si vous utilisé les BindEvent (je vais essayé de contourner ce problème)
Voila un code pour un MessageRequesterpersonnalisé, il s'utilise exactement comme le MessageRequester de PureBasic deux constante supplémentaire existe #PB_MessageRequester_NoYes et #PB_MessageRequester_NoYesCancel
MessageRequester(Title,Text,Flag=#PB_MessageRequester_Ok,Image=-1,CurrentLanguage=0)
Image --> si vous voulez ajouter une icone
CurrentLanguage --> pour changer la langue 0 FR 1 EN
Note: Seul gros HIC, n'est pas compatible si vous utilisé les BindEvent (je vais essayé de contourner ce problème)
Code : Tout sélectionner
;{ Code à coller en début d'application
#PB_MessageRequester_NoYes=$FF
#PB_MessageRequester_NoYesCancel=$FF2
Procedure OpenMessageRequester(Title.s,Text.s,Flag,Image,CurrentLanguage)
; Paramètres personalisables
Protected Margin=10
Protected MinimumWF=260 ; Largeur minimum de la fenêtre
Protected FontTxt=LoadFont(#PB_Any,"Arial",9,#PB_Font_HighQuality)
Protected FontBT=LoadFont(#PB_Any,"Arial",9,#PB_Font_HighQuality)
Protected FontTitle=LoadFont(#PB_Any,"Arial",10,#PB_Font_HighQuality)
Protected BgColor=$B8B8B8
Protected TitleBgColor=$4F4F4F
Protected TitleFgColor=$4FA5FF
Protected TextFgColor=$171717
Protected TitleHeight=32
Protected FlagW=#PB_Window_WindowCentered|#PB_Window_Invisible|#PB_Window_BorderLess
Protected Form,WF,HF,TW,TH,BtH=30,BtW=70,X,Y
Protected btYes,btNo,btChancel
Protected Event,Type
Protected MotherWindow=GetActiveWindow()
Protected MainContainer,MainCanvas
;Langue
Enumeration
#Yes
#No
#Chancel
EndEnumeration
Enumeration
#Fr
#En
EndEnumeration
Dim msg.s(#Chancel,#En)
msg(#Yes,#Fr)="Oui"
msg(#Yes,#En)="Yes"
msg(#No,#Fr)="Non"
msg(#No,#En)="No"
msg(#Chancel,#Fr)="Annuler"
msg(#Chancel,#En)="Chancel"
; Désactive la fenêtre mère
DisableWindow(MotherWindow,#True)
; Ouverture de la fenêtre
Form=OpenWindow(#PB_Any,0,0,100,100,Title,FlagW,WindowID(MotherWindow))
; Calcul de la taille nécessaire
StartDrawing(WindowOutput(Form))
DrawingFont(FontID(FontTxt))
TW=TextWidth(Text)
TH=TextHeight(Text)
DrawingFont(FontID(FontTitle))
If TextWidth(Title)+(margin*2)>TW
TW=TextWidth(Title)+(margin*2)
EndIf
If Image>-1
TW+TitleHeight
EndIf
WF=TW+(Margin*2)
HF=TH+(Margin*7)+TitleHeight
StopDrawing()
If WF<MinimumWF
WF=MinimumWF
EndIf
; Redimentionne la fenêtre
X=(WindowX(MotherWindow)+(WindowWidth(MotherWindow)/2))-(WF/2)
Y=(WindowY(MotherWindow)+(WindowHeight(MotherWindow)/2))-(HF/2)
ResizeWindow(Form,X,Y,WF,HF)
; Création du container
MainContainer=ContainerGadget(#PB_Any,0,0,WF,HF,#PB_Container_Raised)
; Création et dessin du Canvas
MainCanvas=CanvasGadget(#PB_Any,0,0,WF,HF)
StartDrawing(CanvasOutput(MainCanvas))
DrawingMode(#PB_2DDrawing_Default)
DrawingFont(FontID(FontTitle))
Box(0,0,WF,HF,BgColor)
Box(0,0,WF,TitleHeight,TitleBgColor)
If Image>-1
Y=2
X=WF-(TitleHeight+4)
DrawingMode(#PB_2DDrawing_AlphaClip)
DrawImage(ImageID(Image),X,Y,TitleHeight-4,TitleHeight-4)
EndIf
X=Margin
Y=(TitleHeight/2)-(TextHeight(Title)/2)
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(X,Y,Title,TitleFgColor)
X=(WF/2)-(TextWidth(Text)/2)
Y=Margin+TitleHeight
DrawingFont(FontID(FontTxt))
DrawText(X,Y,Text,TextFgColor)
StopDrawing()
DisableGadget(MainCanvas,#True)
Y+TH+(Margin)*2
Select Flag
Case #PB_MessageRequester_Ok
X=(WF/2)-(BtW/2)
btYes=ButtonGadget(#PB_Any,X,Y,btW,btH,"Ok")
SetGadgetData(btYes,#PB_MessageRequester_Ok)
SetGadgetFont(btYes,FontID(FontBT))
AddKeyboardShortcut(Form,#PB_Shortcut_Return,#PB_MessageRequester_Ok)
Case #PB_MessageRequester_YesNo
X=(WF/2)-(((BtW*2)+Margin)/2)
btYes=ButtonGadget(#PB_Any,X,Y,btW,btH,msg(#Yes,CurrentLanguage))
SetGadgetData(btYes,#PB_MessageRequester_Yes)
SetGadgetFont(btYes,FontID(FontBT))
AddKeyboardShortcut(Form,#PB_Shortcut_Return,#PB_MessageRequester_Yes)
SetActiveGadget(btYes)
X+BtW+Margin
btNo=ButtonGadget(#PB_Any,X,Y,btW,btH,msg(#No,CurrentLanguage))
SetGadgetData(btNo,#PB_MessageRequester_No)
SetGadgetFont(btNo,FontID(FontBT))
AddKeyboardShortcut(Form,#PB_Shortcut_Escape,#PB_MessageRequester_No)
Case #PB_MessageRequester_NoYes
X=(WF/2)-(((BtW*2)+Margin)/2)
btNo=ButtonGadget(#PB_Any,X,Y,btW,btH,msg(#No,CurrentLanguage))
SetGadgetData(btNo,#PB_MessageRequester_No)
SetGadgetFont(btNo,FontID(FontBT))
AddKeyboardShortcut(Form,#PB_Shortcut_Return,#PB_MessageRequester_No)
AddKeyboardShortcut(Form,#PB_Shortcut_Escape,#PB_MessageRequester_No)
X+BtW+Margin
btYes=ButtonGadget(#PB_Any,X,Y,btW,btH,msg(#Yes,CurrentLanguage))
SetGadgetData(btYes,#PB_MessageRequester_Yes)
SetGadgetFont(btYes,FontID(FontBT))
SetActiveGadget(btYes)
Case #PB_MessageRequester_YesNoCancel
X=(WF/2)-(((BtW*3)+(Margin*2))/2)
btYes=ButtonGadget(#PB_Any,X,Y,btW,btH,msg(#Yes,CurrentLanguage))
SetGadgetData(btYes,#PB_MessageRequester_Yes)
SetGadgetFont(btYes,FontID(FontBT))
AddKeyboardShortcut(Form,#PB_Shortcut_Return,#PB_MessageRequester_Yes)
X+BtW+Margin
btNo=ButtonGadget(#PB_Any,X,Y,btW,btH,msg(#No,CurrentLanguage))
SetGadgetData(btNo,#PB_MessageRequester_No)
SetGadgetFont(btNo,FontID(FontBT))
X+BtW+Margin
btChancel=ButtonGadget(#PB_Any,X,Y,btW,btH,msg(#Chancel,CurrentLanguage))
SetGadgetData(btChancel,#PB_MessageRequester_Cancel)
SetGadgetFont(btChancel,FontID(FontBT))
AddKeyboardShortcut(Form,#PB_Shortcut_Escape,#PB_MessageRequester_Cancel)
Case #PB_MessageRequester_NoYesCancel
X=(WF/2)-(((BtW*3)+(Margin*2))/2)
btNo=ButtonGadget(#PB_Any,X,Y,btW,btH,msg(#No,CurrentLanguage))
SetGadgetData(btNo,#PB_MessageRequester_No)
SetGadgetFont(btNo,FontID(FontBT))
AddKeyboardShortcut(Form,#PB_Shortcut_Return,#PB_MessageRequester_No)
X+BtW+Margin
btYes=ButtonGadget(#PB_Any,X,Y,btW,btH,msg(#Yes,CurrentLanguage))
SetGadgetData(btYes,#PB_MessageRequester_Yes)
SetGadgetFont(btYes,FontID(FontBT))
X+BtW+Margin
btChancel=ButtonGadget(#PB_Any,X,Y,btW,btH,msg(#Chancel,CurrentLanguage))
SetGadgetData(btChancel,#PB_MessageRequester_Cancel)
SetGadgetFont(btChancel,FontID(FontBT))
AddKeyboardShortcut(Form,#PB_Shortcut_Escape,#PB_MessageRequester_Cancel)
EndSelect
CloseGadgetList()
HideWindow(Form,#False)
Repeat
Event=WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Type=GetGadgetData(EventGadget())
CloseWindow(Form)
DisableWindow(MotherWindow,#False)
ProcedureReturn Type
Case #PB_Event_Menu
Type=EventMenu()
CloseWindow(Form)
DisableWindow(MotherWindow,#False)
ProcedureReturn Type
EndSelect
ForEver
EndProcedure
Macro MessageRequester(Title,Text,Flag=#PB_MessageRequester_Ok,Image=-1,CurrentLanguage=0)
OpenMessageRequester(Title,Text,Flag,Image,CurrentLanguage)
EndMacro
;} FIN de Code à coller en début d'application
; Code de teste
Enumeration
#BtOk
#BtYesNo
#BtNoYes
#BtYesNoChancel
#BtNoYerChancel
EndEnumeration
Global Dim txt.s(#BtNoYerChancel)
txt(#BtOk)=" Msg OK"
txt(#BtYesNo)=" Msg YesNo"
txt(#BtNoYes)=" Msg NoYes"
txt(#BtYesNoChancel)=" Msg YesNoChancel"
txt(#BtNoYerChancel)=" Msg NoYesChancel"
Declare EventButton()
OpenWindow(0,0,0,800,600,"teste",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
BtW=90
BtH=30
btMargin=10
X=400-((BtH*(#BtNoYerChancel+1))+(btMargin*#BtNoYerChancel))
Y=300+BtH
For N=#BtOk To #BtNoYerChancel
ButtonGadget(N,X,Y,BtW,BtH,txt(N))
X+BtW+btMargin
Next
Procedure EventButton()
Select EventGadget()
Case #BtOk
Debug MessageRequester("Teste",txt(EventGadget()),#PB_MessageRequester_Ok)
Case #BtYesNo
Debug MessageRequester("Teste",txt(EventGadget()),#PB_MessageRequester_YesNo)
Case #BtNoYes
Debug MessageRequester("Teste",txt(EventGadget()),#PB_MessageRequester_NoYes)
Case #BtYesNoChancel
Debug MessageRequester("Teste",txt(EventGadget()),#PB_MessageRequester_YesNoCancel)
Case #BtNoYerChancel
Debug MessageRequester("Teste",txt(EventGadget()),#PB_MessageRequester_NoYesCancel)
EndSelect
EndProcedure
Repeat
Event=WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
EventButton()
EndSelect
Until Event=#PB_Event_CloseWindow