MessageBox with question and checkbox "Don't ask again"

Everything else that doesn't fall into one of the other PB categories.
AZJIO
Addict
Addict
Posts: 2191
Joined: Sun May 14, 2017 1:48 am

MessageBox with question and checkbox "Don't ask again"

Post by AZJIO »

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