MessageBox with question and checkbox "Don't ask again"
Posted: Sat Apr 15, 2023 8:10 pm
Code: Select all
EnableExplicit
Enumeration
#Win0
#Win1
EndEnumeration
Enumeration
#w0_btn
#w1_btnYes
#w1_btnNo
#w1_ch
#w1_txt
#StatusBar
EndEnumeration
Global LngCheck$, LngYes$, LngNo$, Title$, Text$
Define Answer
Declare MsgAsk(Title$, Text$, Width = 270, Height = 170, ChBox = 0, LngCheck$ = "Not to ask any more", LngYes$ = "Yes", LngNo$ = "No", WinID = -1)
Define UserIntLang, *Lang
If OpenLibrary(0, "kernel32.dll")
*Lang = GetFunction(0, "GetUserDefaultUILanguage")
If *Lang
UserIntLang = CallFunctionFast(*Lang)
EndIf
CloseLibrary(0)
EndIf
; En
LngCheck$ = "Not to ask any more"
LngYes$ = "Yes"
LngNo$ = "No"
Title$ = "Message"
Text$ = "Use as default?"
; Ru
If UserIntLang = 1049
LngCheck$ = "Больше не спрашивать"
LngYes$ = "OK"
LngNo$ = "Отмена"
Title$ = "Сообщение"
Text$ = "Использовать по умолчанию?"
EndIf
OpenWindow(#Win0, 0, 0, 420, 300, "Win", #PB_Window_TitleBar | #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
ButtonGadget(#w0_btn, 20, 20, 90, 30, "Question")
TextGadget(#StatusBar, 20, 60, 330, 150 , "")
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #w0_btn
Answer = MsgAsk(Title$, Text$, 250, 100, 1, LngCheck$, LngYes$, LngNo$, #Win0)
SetGadgetText(#StatusBar, "Answer = " + Str(Answer & 1) + #CRLF$ + "Check = " + Str(Answer & 2) + #CRLF$ + "Close = " + Str(Answer & 4))
EndSelect
Case #PB_Event_CloseWindow
CloseWindow(#Win0)
End
EndSelect
ForEver
Procedure MsgAsk(Title$, Text$, Width = 270, Height = 170, ChBox = 0, LngCheck$ = "Not to ask any more", LngYes$ = "Yes", LngNo$ = "No", WinID = -1)
Protected Answer, hWnd
If Width < 170
Width = 170
EndIf
If WinID > -1
hWnd = WindowID(WinID)
DisableWindow(WinID, 1)
Else
hWnd = 0
EndIf
OpenWindow(#Win1, 0, 0, Width, Height, Title$, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, hWnd)
TextGadget(#w1_txt, 10, 10, Width - 20, Height - 75, Text$)
CheckBoxGadget(#w1_ch, 10, Height - 65, Width - 20, 17, LngCheck$)
; SetGadgetState(#w1_ch, ChBox)
If ChBox
SetGadgetState(#w1_ch, #PB_Checkbox_Checked)
EndIf
ButtonGadget(#w1_btnYes, (Width - 150) / 2, Height - 40, 70, 28, LngYes$)
ButtonGadget(#w1_btnNo, (Width - 150) / 2 + 80, Height - 40, 70, 28, LngNo$)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #w1_btnYes
Answer | 1
Break
Case #w1_btnNo
Break
EndSelect
Case #PB_Event_CloseWindow
Answer | 4
Break
EndSelect
ForEver
If GetGadgetState(#w1_ch)
Answer | 2
EndIf
If hWnd
DisableWindow(WinID, 0)
EndIf
CloseWindow(#Win1)
ProcedureReturn Answer
EndProcedure