;Последняя правка 18:32
#include <Word.au3>
#include <DateTimeConstants.au3>
#include <ListviewConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiEdit.au3>
Opt("GUIOnEventMode", 1)
Opt("TrayAutoPause", 0)
Global $hGui, $iDate, $iCal, $iInput, $iBtnFolder, $iBtnAddItem, $iBtnSave, $iListView
Global $sScriptNameNoExt, $sFolderName, $sFileName, $sFullPath
$sScriptNameNoExt = StringLeft(@ScriptName, StringInStr(@ScriptName, ".", 0, -1) - 1)
$sFolderName = IniRead(@ScriptDir & "\" & $sScriptNameNoExt & ".ini", $sScriptNameNoExt, "Folder", "")
If Not $sFolderName Then $sFolderName = @ScriptDir
$sFileName = @MDAY & "." & @MON & "." & @YEAR & ".doc"
$sFullPath = $sFolderName & "\" & $sFileName
Global $oWord = _Word_Create(False, True)
If @error Then Exit MsgBox(0, "Error", "Ошибка функции: _Word_Create" & @LF & "Error = " & @error & @LF & "Extended = " & @extended)
$oDocCS = _Word_DocAdd($oWord)
If @error Then Exit MsgBox(0, "Error", "Ошибка функции: _Word_DocAdd" & @LF & "Error = " & @error & @LF & "Extended = " & @extended)
$oRangeCS = _Word_DocRangeSet($oDocCS, 0)
If @error Then Exit MsgBox(0, "Error", "Ошибка функции: _Word_DocRangeSet" & @LF & "Error = " & @error & @LF & "Extended = " & @extended)
OnAutoItExitRegister("_OnExit")
$hGui = GUICreate($sFileName, 600, 210)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
$iDate = GUICtrlCreateDate("", 10, 10, 160, 20, BitOR($DTS_SHORTDATEFORMAT, $DTS_UPDOWN))
GUICtrlSetOnEvent($iDate, "_SetFileName")
$iCal = GUICtrlCreateMonthCal("", 10, 40, 160, 160)
GUICtrlSetOnEvent($iCal, "_SetFileName")
$iInput = GUICtrlCreateInput(@ScriptDir, 180, 10, 380, 20)
$iBtnFolder = GUICtrlCreateButton("...", 570, 10, 20, 20)
GUICtrlSetOnEvent($iBtnFolder, "_SetFolderName")
$iBtnAddItem = GUICtrlCreateButton("Добавить поле", 230, 180, 100, 20)
GUICtrlSetOnEvent($iBtnAddItem, "_AddItem")
$iBtnSave = GUICtrlCreateButton("Сохранить", 340, 180, 100, 20)
GUICtrlSetOnEvent($iBtnSave, "_Save")
$iBtnDelete = GUICtrlCreateButton("Удалить все", 450, 180, 100, 20)
GUICtrlSetOnEvent($iBtnDelete, "_DeleteAllItems")
$iListView = GUICtrlCreateListView("Text", 180, 40, 410, 100, BitOR($LVS_NOCOLUMNHEADER, $LVS_SINGLESEL, $LVS_EDITLABELS), BitOR($WS_EX_CLIENTEDGE, $LVS_EX_FULLROWSELECT, $LVS_EX_INFOTIP))
GUICtrlSendMsg($iListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($iListView, $LVM_SETCOLUMNWIDTH, 0, $LVSCW_AUTOSIZE_USEHEADER)
GUICtrlCreateListViewItem("1. ", $iListView)
GUICtrlCreateListViewItem("2. ", $iListView)
GUICtrlCreateListViewItem("3. ", $iListView)
GUICtrlCreateListViewItem("4. ", $iListView)
GUICtrlCreateListViewItem("5. ", $iListView)
$iInputCS = GUICtrlCreateInput("", 180, 150, 410, 20, $ES_READONLY)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState()
_CheckFile()
While 1
Sleep(10)
WEnd
Func _AddItem()
_GUICtrlListView_BeginUpdate($iListView)
$iIndex = _GUICtrlListView_AddItem($iListView, "")
_GUICtrlListView_SetItemText($iListView, $iIndex, $iIndex + 1 & ". ")
_GUICtrlEdit_SetSel(_GUICtrlListView_EditLabel($iListView, $iIndex), -1, 0)
_GUICtrlListView_EndUpdate($iListView)
EndFunc ;==>_AddItem
Func _DeleteAllItems()
_GUICtrlListView_BeginUpdate($iListView)
_GUICtrlListView_DeleteAllItems($iListView)
_GUICtrlListView_EndUpdate($iListView)
EndFunc ;==>_DeleteAllItems
Func _Save()
GUICtrlSetState($iCal, $GUI_DISABLE)
GUICtrlSetState($iBtnSave, $GUI_DISABLE)
GUISetState(@SW_LOCK)
Local $sItemText, $sAllText, $iErrors
For $iIndex = 0 To _GUICtrlListView_GetItemCount($iListView) - 1
$sItemText = _GUICtrlListView_GetItemText($iListView, $iIndex)
If $sItemText Then $sAllText &= $sItemText & @CRLF
Next
Local $oDoc = _Word_DocAdd($oWord)
$iErrors += @error
If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocAdd" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
Local $oRange = _Word_DocRangeSet($oDoc, 0)
$iErrors += @error
If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocRangeSet" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
$oRange.Text = $sAllText
If FileExists($sFullPath) Then
Switch MsgBox(4 + 32 + 262144, $sFileName, 'Файл "' & $sFileName & '" уже существует.' & @LF & "Заменить?", 0, $hGui)
Case 6
_Word_DocSaveAs($oDoc, $sFullPath)
$iErrors += @error
If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocSaveAs" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
Case Else
GUISetState(@SW_UNLOCK)
GUICtrlSetState($iBtnSave, $GUI_ENABLE)
GUICtrlSetState($iCal, $GUI_ENABLE)
Return
EndSwitch
Else
_Word_DocSaveAs($oDoc, $sFullPath)
$iErrors += @error
If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocSaveAs" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
EndIf
_Word_DocClose($oDoc)
$iErrors += @error
If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocClose" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
If Not $iErrors Then MsgBox(64 + 262144, $sFileName, "Файл успешно сохранен.", 0, $hGui)
GUISetState(@SW_UNLOCK)
GUICtrlSetState($iBtnSave, $GUI_ENABLE)
GUICtrlSetState($iCal, $GUI_ENABLE)
EndFunc ;==>_Save
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
Local $iIDFrom, $iCode, $tNMHDR
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
If $iIDFrom <> $iListView Then Return $GUI_RUNDEFMSG
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $iCode
Case $NM_CLICK
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
Local $iIndex = DllStructGetData($tInfo, "Index")
If $iIndex = -1 Then Return $GUI_RUNDEFMSG
Local $sText = _GUICtrlListView_GetItemText($iListView, $iIndex)
If Not $sText Then Return $GUI_RUNDEFMSG
$oRangeCS.Delete
$oRangeCS.InsertAfter($sText)
$oRangeCS.LanguageID = Number("0x" & @KBLayout)
Local $sCheckText, $sWord, $oSpellCollection
$oSpellCollection = $oRangeCS.SpellingErrors
If $oSpellCollection.Count > 0 Then
For $i = 1 To $oSpellCollection.Count
$sCheckText &= $oSpellCollection.Item($i).Text & " "
Next
GUICtrlSetData($iInputCS, $sCheckText)
Else
GUICtrlSetData($iInputCS, "")
EndIf
Case $NM_DBLCLK
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
Local $iIndex = DllStructGetData($tInfo, "Index")
If $iIndex = -1 Then Return $GUI_RUNDEFMSG
_GUICtrlListView_EditLabel($iListView, $iIndex)
Case $NM_RDBLCLK
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
Local $iIndex = DllStructGetData($tInfo, "Index")
If $iIndex = -1 Then Return $GUI_RUNDEFMSG
_GUICtrlListView_DeleteItem($iListView, $iIndex)
Case $LVN_ENDLABELEDITA, $LVN_ENDLABELEDITW
Local $sText = ControlGetText($hGui, "", _GUICtrlListView_GetEditControl($iListView))
$oRangeCS.Delete
$oRangeCS.InsertAfter($sText)
$oRangeCS.LanguageID = Number("0x" & @KBLayout)
Local $sCheckText, $oSpellCollection
$oSpellCollection = $oRangeCS.SpellingErrors
If $oSpellCollection.Count > 0 Then
For $i = 1 To $oSpellCollection.Count
$sCheckText &= $oSpellCollection.Item($i).Text & " "
Next
GUICtrlSetData($iInputCS, $sCheckText)
Else
GUICtrlSetData($iInputCS, "")
EndIf
Return True
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func _SetFolderName()
Local $sSelectFolder
$sSelectFolder = FileSelectFolder($sFileName, "", 1 + 2 + 4, "", $hGui)
If Not @error Then
GUICtrlSetData($iInput, $sFolderName)
$sFolderName = $sSelectFolder
$sFullPath = $sFolderName & "\" & $sFileName
EndIf
EndFunc ;==>_SetFolderName
Func _SetFileName()
Switch @GUI_CtrlId
Case $iCal
$sFileName = GUICtrlRead($iCal)
GUICtrlSetData($iDate, $sFileName)
Case $iDate
$sFileName = GUICtrlRead($iDate)
EndSwitch
$sFileName = StringRegExpReplace($sFileName, "([0-9]{4})/([0-9]{2})/([0-9]{2})", "\3.\2.\1") & ".doc"
$sFullPath = $sFolderName & "\" & $sFileName
WinSetTitle($hGui, "", $sFileName)
_CheckFile()
EndFunc ;==>_SetFileName
Func _CheckFile()
If Not FileExists($sFullPath) Then Return
If MsgBox(4 + 32 + 262144, $sFileName, 'Файл "' & $sFileName & '" уже существует.' & @LF & "Открыть?", 0, $hGui) = 6 Then
If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_Create" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
Local $oDoc = _Word_DocOpen($oWord, $sFullPath)
If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocOpen" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
Local $aText = StringSplit($oDoc.Content.Text, @CRLF)
_GUICtrlListView_DeleteAllItems($iListView)
_GUICtrlListView_BeginUpdate($iListView)
For $i = 1 To $aText[0]
If StringStripWS($aText[$i], 8) Then _GUICtrlListView_AddItem($iListView, $aText[$i])
Next
_GUICtrlListView_EndUpdate($iListView)
_Word_DocClose($oDoc)
If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocClose" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
EndIf
EndFunc ;==>_CheckFile
Func _OnExit()
GUIDelete($hGui)
IniWrite(@ScriptDir & "\" & $sScriptNameNoExt & ".ini", $sScriptNameNoExt, "Folder", $sFolderName)
_Word_DocClose($oDocCS)
_Word_Quit($oWord)
EndFunc ;==>_OnExit
Func _Exit()
Exit
EndFunc ;==>_Exit