#include <GuiListView.au3>
#include <GUIConstantsEx.au3>
#include <GuiButton.au3>
#include <File.au3>
#include <WindowsConstants.au3>
Global $iIndex, $EditLine = 0
; Создание GUI
Global $hGUI = GUICreate("Форма", 435, 350)
Global $iListView = GUICtrlCreateListView("№|Название Фирмы|ИНН|Адрес|Иное поле", 2, 2, 430, 200, $GUI_SS_DEFAULT_LISTVIEW, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
Global $hWndListView = GUICtrlGetHandle($iListView)
; Ширина колонки 0-я 30, остальные - 100
_GUICtrlListView_SetColumnWidth($iListView, 0, 30)
For $i = 1 To 4
_GUICtrlListView_SetColumnWidth($iListView, $i, 100)
Next
; Поля ввода данных
Local $Name = GUICtrlCreateInput('Название Фирмы', 5, 250, 210, 30)
;GUICtrlSetFont(-1, 12, 500)
Local $INN = GUICtrlCreateInput('ИНН', 220, 250, 210, 30)
;GUICtrlSetFont(-1, 12, 500)
Local $Adres = GUICtrlCreateInput('Адрес', 5, 290, 210, 30)
;GUICtrlSetFont(-1, 12, 500)
Local $Else = GUICtrlCreateInput('Иное поле', 220, 290, 210, 30)
;GUICtrlSetFont(-1, 12, 500)
Local $AddBut = GUICtrlCreateButton('Добавить Запись', 10, 210, 110, 30)
Local $SaveBut = GUICtrlCreateButton('Запись в Файл', 130, 210, 110, 30)
Local $ReadBut = GUICtrlCreateButton('Прочитать из файла', 250, 210, 110, 30)
GUISetState(@SW_SHOW, $hGUI)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
Local $hAditLine_GUI = GUICreate('Редактировать данные', 280, 170, -1, -1, -1, -1, $hGUI) ; создаём окно
GUICtrlCreateLabel('Название', 5, 7, 60, 20)
Local $NameL = GUICtrlCreateInput('', 70, 5, 200, 20)
GUICtrlCreateLabel('ИНН', 5, 32, 60, 20)
Local $INNL = GUICtrlCreateInput('', 70, 30, 200, 20)
GUICtrlCreateLabel('Адрес', 5, 57, 60, 20)
Local $AdresL = GUICtrlCreateInput('', 70, 55, 200, 20)
GUICtrlCreateLabel('Иное поле', 5, 84, 60, 20)
Local $ElseL = GUICtrlCreateInput('', 70, 80, 200, 20)
Local $SaveButL = GUICtrlCreateButton('Сохранить', 80, 120, 120, 30)
GUISetState(@SW_HIDE, $hAditLine_GUI)
Local $msg, $Text, $hFile
While 1
$msg = GUIGetMsg(1)
Switch $msg[0]
Case $GUI_EVENT_CLOSE
If $msg[1] = $hGUI Then
Exit
ElseIf $msg[1] = $hAditLine_GUI Then
GUISetState(@SW_HIDE, $hAditLine_GUI)
GUISetState(@SW_ENABLE, $hGUI)
WinActivate($hGUI)
EndIf
Case $SaveButL
_GUICtrlListView_SetItemText($iListView, $iIndex, GUICtrlRead($NameL), 1)
_GUICtrlListView_SetItemText($iListView, $iIndex, GUICtrlRead($INNL), 2)
_GUICtrlListView_SetItemText($iListView, $iIndex, GUICtrlRead($AdresL), 3)
_GUICtrlListView_SetItemText($iListView, $iIndex, GUICtrlRead($ElseL), 4)
GUISetState(@SW_HIDE, $hAditLine_GUI)
GUISetState(@SW_ENABLE, $hGUI)
WinActivate($hGUI)
Case $AddBut ; Добавить пункт в таблицу
GUICtrlCreateListViewItem(_GUICtrlListView_GetItemCount($iListView) + 1 & '|' & GUICtrlRead($Name) & '|' & GUICtrlRead($INN) & '|' & GUICtrlRead($Adres) & '|' & GUICtrlRead($Else), $iListView)
Case $SaveBut ;Записать в файл
Local $Path = FileSaveDialog("Выберите имя.", @ScriptDir, "Текстовый файл (*.txt)", 2)
If Not @error Then
$hFile = FileOpen($Path, 2)
For $i = 0 To _GUICtrlListView_GetItemCount($iListView) - 1
$Text = ''
For $j = 1 To _GUICtrlListView_GetColumnCount($iListView) - 1
$Text = $Text & _GUICtrlListView_GetItemText($iListView, $i, $j) & ';'
Next
FileWriteLine($hFile, $Text)
Next
FileClose($hFile)
EndIf
Case $ReadBut ;Заполнение таблицы из файла
_GUICtrlListView_DeleteAllItems($iListView)
Local $OpenPath = FileOpenDialog('Открыть файл', @ScriptDir, 'Текстовый файл (*.txt)', 1 + 2)
If Not @error Then
$hFile = FileOpen($OpenPath, 0)
For $i = 1 To _FileCountLines($OpenPath)
$Text = StringReplace(FileReadLine($hFile, $i), ';', '|')
$Text = $i & '|' & StringTrimRight($Text, 1)
GUICtrlCreateListViewItem($Text, $iListView)
Next
FileClose($hFile)
EndIf
EndSwitch
If $EditLine = 1 Then
GUISetState(@SW_DISABLE, $hGUI)
GUISetState(@SW_SHOW, $hAditLine_GUI)
GUICtrlSetData($NameL, _GUICtrlListView_GetItemText($iListView, $iIndex, 1))
GUICtrlSetData($INNL, _GUICtrlListView_GetItemText($iListView, $iIndex, 2))
GUICtrlSetData($AdresL, _GUICtrlListView_GetItemText($iListView, $iIndex, 3))
GUICtrlSetData($ElseL, _GUICtrlListView_GetItemText($iListView, $iIndex, 4))
$EditLine = 0
EndIf
WEnd
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iCode, $tNMHDR, $tInfo
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, 'hWndFrom'))
$iCode = DllStructGetData($tNMHDR, 'Code')
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $NM_RCLICK ;один клик правой кнопки мыши
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
$iIndex = DllStructGetData($tInfo, 'Index')
If $iIndex <> -1 Then
$EditLine = 1
EndIf
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY