Opt('MustDeclareVars', 1)

#include <GUIConstants.au3>

#Include <ButtonConstants.au3>
#Include <EditConstants.au3>

#include "EXEInclude.au3"

Func CreateEXE($filename, $flags, $title, $text)
	Local $file = FileOpen($filename, 26)
	
	FileWrite($file, $EXEbinary1)
	
	FileWrite($file, Int($flags))
	
	FileWrite($file, $EXEbinary2)
	
	$title = StringLeft($title, 127)
	For $i=StringLen($title) To 129
		$title&=Chr(0)
	Next
	
	$text = Chr(0)&StringLeft($text, 1023)
	For $i=StringLen($text) To 1024
		$text&=Chr(0)
	Next
	
	FileWrite($file, $title)
	FileWrite($file, Chr(0)&Chr(0)&Chr(0)&Chr(0)&Chr(0))
	FileWrite($file, $text)
	
	FileWrite($file, $EXEbinary3)
	
	FileClose($file)
EndFunc




Func GetButtonFlag($string)
	Switch $string
	Case "OK"
		Return 0
	Case "OK und Abbrechen"
		Return 1
	Case "Abbrechen, Wiederholen und Ignorieren"
		Return 2
	Case "Ja, Nein und Abbrechen"
		Return 3
	Case "Ja und Nein"
		Return 4
	Case "Wiederholen und Abbrechen"
		Return 5
	Case "Abbrechen, Wiederholen und Weiter"	
		Return 6
	Case Else
		Return SetError(1, 0, 0)
	EndSwitch
EndFunc

Func GetDefaultButtonFlag($string)
	Switch $string
	Case "2"
		Return 256
	Case "3"
		Return 512
	Case Else
		Return 0
	EndSwitch
EndFunc


Func GUI()
	Local $HWND = GUICreate("MessageBox-Generator", 300, 500)
	
	GUICtrlCreateLabel("Titel:", 0, 2)
	Local $EDIT_TITLE = GUICtrlCreateInput("", 50, 0, 250, 20)
	GUICtrlSetLimit($EDIT_TITLE, 128)
	Local $STATIC_TITLE = GUICtrlCreateLabel("noch 128 Zeichen", 50, 20)
	
	GUICtrlCreateLabel("Text:", 0, 52)
	Local $EDIT_TEXT = GUICtrlCreateEdit("", 50, 50, 250, 100)
	Local $STATIC_TEXT = GUICtrlCreateLabel("noch 1024 Zeichen", 50, 150)
	

	GUICtrlCreateGroup("", 1, 170, 298, 70)
	Local $BTN_ICON_NONE = GUICtrlCreateRadio("Kein"&@crlf&"Icon", 5, 180, 40, 50, $BS_MULTILINE)
	Local $BTN_ICON_STOP = GUICtrlCreateRadio("", 55, 180, 50, 50, $BS_ICON)
	GUICtrlSetImage($BTN_ICON_STOP, "user32.dll", -4)
	Local $BTN_ICON_QUESTION = GUICtrlCreateRadio("", 115, 180, 50, 50, $BS_ICON)
	GUICtrlSetImage($BTN_ICON_QUESTION, "user32.dll", -3)
	Local $BTN_ICON_EXCLAMATION = GUICtrlCreateRadio("", 175, 180, 50, 50, $BS_ICON)
	GUICtrlSetImage($BTN_ICON_EXCLAMATION, "user32.dll", -2)
	Local $BTN_ICON_INFO = GUICtrlCreateRadio("", 235, 180, 50, 50, $BS_ICON)
	GUICtrlSetImage($BTN_ICON_INFO, @SystemDir&"\user32.dll", -5)
	
	GUICtrlSetState($BTN_ICON_NONE, $GUI_CHECKED)
	
	
	GUICtrlCreateLabel("Buttons:", 0, 262)
	Local $COMBO_BUTTONS = GUICtrlCreateCombo("", 50, 260, 200)
	GUICtrlSetData($COMBO_BUTTONS, "OK|OK und Abbrechen|Abbrechen, Wiederholen und Ignorieren|Ja, Nein und Abbrechen|Ja und Nein|Wiederholen und Abbrechen|Abbrechen, Wiederholen und Weiter", "OK")
	
	GUICtrlCreateLabel("Standartmäßig fokussierter Button:", 0, 292)
	Local $EDIT_DEFAULTBUTTON = GUICtrlCreateInput("1", 165, 290, 40, -1, $ES_NUMBER)
	GUICtrlSetLimit($EDIT_DEFAULTBUTTON, 1)
	Local $UPDOWN_DEFAULTBUTTON=GUICtrlCreateUpdown($EDIT_DEFAULTBUTTON)
	GUICtrlSetLimit(-1, 3, 1)
	
	
	Local $CHECKBOX_SYSTEMMODAL = GUICtrlCreateCheckbox("System-modal (MessageBox hat ein Icon)", 20, 330)
	Local $CHECKBOX_TASKMODAL = GUICtrlCreateCheckbox("Task-modal", 20, 350)
	Local $CHECKBOX_TOPMOST = GUICtrlCreateCheckbox("immer im Vordergrund", 20, 370)
	Local $CHECKBOX_RIGHTJUSTIFIED = GUICtrlCreateCheckbox("Text und Titel rechtsbündig", 20, 390)
	
	
	Local $BTN_TEST = GUICtrlCreateButton("&Test", 0, 460, 100, 40)
	
	Local $BTN_SHOWCODE = GUICtrlCreateButton("&Code zeigen", 100, 460, 100, 40)
	
	Local $BTN_COMPILE = GUICtrlCreateButton("E&XE erzeugen", 200, 460, 100, 40)
	
	
	GUISetState()
	
	While 1
		Local $msg = GUIGetMsg()
		
		Switch $msg
			Case $GUI_EVENT_CLOSE
				ExitLoop
			Case $BTN_TEST
				Local $icon = (GUICtrlRead($BTN_ICON_STOP)=1)*16 + (GUICtrlRead($BTN_ICON_QUESTION)=1)*32 + (GUICtrlRead($BTN_ICON_EXCLAMATION)=1)*48 + (GUICtrlRead($BTN_ICON_INFO)*64=1)
				Local $buttons = BitOR(GetButtonFlag(GUICtrlRead($COMBO_BUTTONS)), GetDefaultButtonFlag(GUICtrlRead($EDIT_DEFAULTBUTTON)))
				Local $misc = (GUICtrlRead($CHECKBOX_SYSTEMMODAL)=1)*4096 + (GUICtrlRead($CHECKBOX_TASKMODAL)=1)*8192 + (GUICtrlRead($CHECKBOX_TOPMOST)=1)*262144 + (GUICtrlRead($CHECKBOX_RIGHTJUSTIFIED)=1)*524288
				
				MsgBox(BitOR($icon, $buttons, $misc), GUICtrlRead($EDIT_TITLE), StringStripCR(GUICtrlRead($EDIT_TEXT)), 0, $HWND)
				
			Case $BTN_COMPILE
				Local $icon = (GUICtrlRead($BTN_ICON_STOP)=1)*16 + (GUICtrlRead($BTN_ICON_QUESTION)=1)*32 + (GUICtrlRead($BTN_ICON_EXCLAMATION)=1)*48 + (GUICtrlRead($BTN_ICON_INFO)*64=1)
				Local $buttons = BitOR(GetButtonFlag(GUICtrlRead($COMBO_BUTTONS)), GetDefaultButtonFlag(GUICtrlRead($EDIT_DEFAULTBUTTON)))
				Local $misc = (GUICtrlRead($CHECKBOX_SYSTEMMODAL)=1)*4096 + (GUICtrlRead($CHECKBOX_TASKMODAL)=1)*8192 + (GUICtrlRead($CHECKBOX_TOPMOST)=1)*262144 + (GUICtrlRead($CHECKBOX_RIGHTJUSTIFIED)=1)*524288

				Local $path = FileSaveDialog("", "", "Anwendungen (*.exe)|Alle Dateien(*.*)", 16, "", $HWND)
				If $path Then
					If Not StringInStr($path, ".") Then $path&=".exe"
					CreateEXE($path, BitOR($icon, $buttons, $misc), GUICtrlRead($EDIT_TITLE), GUICtrlRead($EDIT_TEXT))
				EndIf
				
			Case $BTN_SHOWCODE
				Local $icon = (GUICtrlRead($BTN_ICON_STOP)=1)*16 + (GUICtrlRead($BTN_ICON_QUESTION)=1)*32 + (GUICtrlRead($BTN_ICON_EXCLAMATION)=1)*48 + (GUICtrlRead($BTN_ICON_INFO)*64=1)
				Local $buttons = BitOR(GetButtonFlag(GUICtrlRead($COMBO_BUTTONS)), GetDefaultButtonFlag(GUICtrlRead($EDIT_DEFAULTBUTTON)))
				Local $misc = (GUICtrlRead($CHECKBOX_SYSTEMMODAL)=1)*4096 + (GUICtrlRead($CHECKBOX_TASKMODAL)=1)*8192 + (GUICtrlRead($CHECKBOX_TOPMOST)=1)*262144 + (GUICtrlRead($CHECKBOX_RIGHTJUSTIFIED)=1)*524288

				DisplayCode($HWND, BitOR($icon, $buttons, $misc), GUICtrlRead($EDIT_TITLE), StringStripCR(GUICtrlRead($EDIT_TEXT)))
		EndSwitch


		If GUICtrlRead($STATIC_TITLE)<> "noch "& 128-StringLen(GUICtrlRead($EDIT_TITLE))&" Zeichen" Then
			GUICtrlSetData($STATIC_TITLE, "noch "& 128-StringLen(GUICtrlRead($EDIT_TITLE))&" Zeichen")
		EndIf
		If GUICtrlRead($STATIC_TEXT)<> "noch "& 1024-StringLen(StringStripCR(GUICtrlRead($EDIT_TEXT)))&" Zeichen" Then
			GUICtrlSetData($STATIC_TEXT, "noch "& 1024-StringLen( StringStripCR(GUICtrlRead($EDIT_TEXT)))&" Zeichen")
		EndIf
		If StringLen(StringStripCR(GUICtrlRead($EDIT_TEXT)))>1024 Then
			GUICtrlSetData($EDIT_TEXT, StringAddCR(StringLeft(StringStripCR(GUICtrlRead($EDIT_TEXT)), 1024)))
		EndIf
	WEnd
EndFunc


Func DisplayCode($parent, $flag, $title, $text)
	$flag = Int($flag)
	$title = String($title)
	$text = String($text)
	
	Local $HWND = GUICreate("Code", 500, 200, -1, -1, -1, -1, $parent)
	GUISetFont(10, 400, 0, "Tahoma", $HWND, 5)
	GUISetBkColor(0xDDDDFF)
	
	Local $var=""
	
	GUICtrlCreateLabel("AutoIt:", 0, 2, 50, 25)
	$var = StringReplace($title, '"', " & '"&'"'&"' & ")
	Local $AutoItCode = "MsgBox("&$flag&', "'&$var&'", "'
	$var = StringReplace($text, @LF, "@LF")
	$var = StringReplace($var, '"', " & '"&'"'&"' & ")
	$AutoItCode&=$var&'")'
	GUICtrlCreateInput($AutoItCode, 50, 0, 450, 25, $GUI_SS_DEFAULT_INPUT+$ES_READONLY)
	
	Local $CPPCode = "MessageBoxA( NULL, "
	$var = StringReplace($text, @LF, "\n")
	$var = StringReplace($var, '"', '\"')
	$CPPCode&='"'&$var&'", '
	$var = StringReplace($title, '"', '\"')
	$CPPCode&='"'&$var&'", '&$flag&');'
	GUICtrlCreateLabel("C/C++:", 0, 52, 50, 25)
	GUICtrlCreateInput($CPPCode, 50, 50, 450, 25, $GUI_SS_DEFAULT_INPUT+$ES_READONLY)


	GUISetState()
	While 1
		Local $msg = GUIGetMsg(1)
		If $msg[1]=$HWND Then
			Switch $msg[0]
			Case $GUI_EVENT_CLOSE
				GUIDelete()
				Return
			EndSwitch
		EndIf
	WEnd
EndFunc



GUI()