#include <Array.au3> ; _ArrayDisplay ()
#Include <File.au3> ; _FileReadToArray()
#include <WinAPIex.au3>
#include <GDIPlus.au3>
#Include <ScreenCapture.au3>
#include <WinAPI.au3>
#include <Constants.au3> ; $IMAGE_BITMAP
#include <WindowsConstants.au3> ; $WS_POPUPWINDOW | $WS_EX_TOOLWINDOW
#include <EditConstants.au3> ; $ES_PASSWORD
#include <ButtonConstants.au3> ; $BS_CENTER, $BS_VCENTER
#include <TabConstants.au3> ; $TCS_FLATBUTTONS
#include <GUIConstantsEx.au3> ; $GUI_EVENT_CLOSE
#include <StaticConstants.au3> ; $SS_CENTER | $SS_CENTERIMAGE
#Include <GuiListBox.au3> ; $LBS_STANDARD
#Include <GuiListView.au3>
#Include <GuiComboBox.au3> ; _GUICtrlComboBox_...
Global $hGUI_child = GUICreate ("characters", 500, 450, -1, -1, -1, -1)
Global $stFile[2] = [False, "character.ini"]
Global $hCharArray[1] = [0] ; массив для чаров меню
Global $hCharLabel = GUICtrlCreateLabel ("select character", 10, 5, 480, 30, BitOR ($SS_CENTER, $SS_CENTERIMAGE))
GUICtrlSetFont ($hCharLabel, 20)
GUICtrlSetBkColor ($hCharLabel, 0xFFFFFF)
Global $hCharMenu = GUICtrlCreateContextMenu ($hCharLabel)
Global $hCharMenuCreate = GUICtrlCreateMenuItem ("Create new character", $hCharMenu)
Global $hCharMenuDelete = GUICtrlCreateMenuItem ("Delete character...", $hCharMenu)
Global $hCharMenuSelect = GUICtrlCreateMenu ("Select", $hCharMenu)
GUISetState (@SW_SHOW, $hGUI_child)
_GUI_charLoad ()
While True
$hAction = GUIGetMsg (1)
If $hAction[0] = $hCharMenuCreate Then _GUI_charCreate () ; меню создать перса на label
If $hAction[0] = $hCharMenuDelete Then _GUI_charDelete () ; меню удалить перса на label
If $hAction[0] = $GUI_EVENT_CLOSE Then ExitLoop
For $k = 1 To $hCharArray[0]
If $hAction[0] = $hCharArray[$k] Then
MsgBox (0, 0, GUICtrlRead ($hCharArray[$k], 1))
_ArrayDisplay ($hCharArray)
EndIf
Next
WEnd
Func _GUI_charCreate ($_string = False)
Local $_exit = False ; флаг для дубляжей
Local $_load = True
If Not $_string Then ; если не задано имя тогда просим ввести
$_load = False
$_string = InputBox ("Character name", "Type Character name:", "", "", 300, 150, Default, Default, 0, $hGUI_child)
If @error Then ; cancel or other
Return
EndIf
EndIf
For $i = 1 To $hCharArray[0] ; пробегаем массив
If $_string == GUICtrlRead ($hCharArray[$i], 1) Then $_exit = True
Next
If $_exit Then Return
$hCharArray[0] += 1
ReDim $hCharArray[$hCharArray[0]+1]
$hCharArray[$hCharArray[0]] = GUICtrlCreateMenuItem ($_string, $hCharMenuSelect)
IniWrite ($stFile[1], $_string, "created", "true")
EndFunc
Func _GUI_charDelete ()
_GUI_charLoad ()
If $hCharArray[0] = 0 Then
MsgBox (48, "Attention", "Character list is empty.", 0, $hGUI_child)
Return
EndIf
GUISetState (@SW_DISABLE, $hGUI_child)
Local $hCharDelete_gui = GUICreate ("Delete Chararacter", 300, 400, -1, -1, -1, -1, $hGUI_child)
Local $hCharDelete_lst = _GUICtrlListView_Create ($hCharDelete_gui, "Characters", 5, 5, 260, 300)
_GUICtrlListView_SetColumnWidth ($hCharDelete_lst, 0, $LVSCW_AUTOSIZE_USEHEADER)
_GUICtrlListView_SetExtendedListViewStyle ($hCharDelete_lst, $LVS_EX_CHECKBOXES)
For $p = 1 To $hCharArray[0]
_GUICtrlListView_InsertItem ($hCharDelete_lst, GUICtrlRead ($hCharArray[$p], 1), 0)
Next
Local $hCharDelete_btn = GUICtrlCreateButton ("Delete checked", 20, 370, 90, 20)
GUISetState (@SW_SHOW, $hCharDelete_gui)
Local $hCharDelete_act
While True
$hCharDelete_act = GUIGetMsg()
Select
Case $hCharDelete_act = $GUI_EVENT_CLOSE
ExitLoop
Case $hCharDelete_act = $hCharDelete_btn
For $i = $hCharArray[0] To 1 Step -1
If _GUICtrlListView_GetItemChecked ($hCharDelete_lst, $i -1) Then
Local $_charName = _GUICtrlListView_GetItemText ($hCharDelete_lst, $i -1)
IniDelete ($stFile[1], $_charName)
EndIf
Next
ExitLoop
EndSelect
WEnd
GUIDelete ($hCharDelete_gui)
GUISetState (@SW_ENABLE, $hGUI_child)
_GUI_charLoad ()
EndFunc
Func _GUI_charLoad ()
Local $_array = IniReadSectionNames ($stFile[1]) ; считываем все имена чаров (секции)
For $k = 1 To $hCharArray[0] ; затираем gui
GUICtrlDelete ($hCharArray[$k]) ; удаляем хэндлы
Next
ReDim $hCharArray[1] ; затираем массив
$hCharArray[0] = 0 ; затираем счётчик
If @error Then Return
If Not (IsArray ($_array)) Or $_array[0] = 0 Then Return ; если массив и не нулевой
For $i = 1 To $_array[0]
_GUI_charCreate ($_array[$i]) ; добавляем в меню чара
Next
EndFunc