Если убрать комментарии с группы хоткеев, то постоянно выпадают ошибки о неопределенных переменных. Куда переставить HotKeySet'ы, чтобы избежать ошибок?
Добавлено:
АААА, все, разобрался!
Нужно было писать не HotKeySet("!1", CopyDate()), а HotKeySet("!1", "CopyDate()")
Т.е. внутри HotHeySet необходимо писать названия функций в кавычках.
уже который раз делаю эту ошибку
жалко, что при запуске скрипта AutoIt не распознает, в чем именно ошибка.
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#Include <GUIEdit.au3>
#include <Date.au3>
#include <File.au3>
#include <Array.au3>
;~ Глобальные настройки
Opt("ExpandVarStrings", 1)
;~ глобальные переменные
Global $GuiName = "NSR-авто, версия 1.0 beta"
Global $Filelist[1], $Message
Global $tTime = _Date_Time_GetSystemTime()
Global $aTime = _Date_Time_SystemTimeToArray($tTime)
Global $Today = $aTime[1] & "/" & $aTime[0] & "/" & $aTime[2]
Global $Br = "[ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ]"
Global $Lr = "[йцукенгшщзхъфывапролджэячсмитьбю]"
Global $MyDocsFolder = "::{450D8FBA-AD25-11D0-98A8-0800361B1103}"
;~ регулярное выражения для поиска фамилий
Global $Fam = $Br & "\.\s*" & $Br & "\.\s*" & $Br & $Lr & "+" & "|" & $Br & $Lr & "+\s+" & $Br & "\.\s*" & $Br & "\."
Global $Month = "[Яя]нваря|[Фф]евраля|[Мм]арта|[Аа]преля|[Мм]ая|[Ии]юня|[Ии]юля|[Аа]вгуста|[Сс]ентября|[Оо]ктября|[Нн]оября|[Дд]екабря"
;~ Ищем врапперы
;~ $Filelist = _FileListToArray(@ScriptDir, "*.txt")
;~ Global $WrapperList
;~ For $x = 1 to $FileList[0]
;~
;~ $WrapperList = $WrapperList & "|" & StringTrimRight($FileList[$x], 4)
;~ Next
;~ _ArrayDisplay($Filelist)
;~ Основная форма
Global $MainForm = GUICreate($GuiName, 911, 701, 233, 151)
GUISetFont(10, 400, 0, "Arial")
;~ Акселераторы
$SelectAll = GUICtrlCreateDummy()
$SaveDoc = GUICtrlCreateDummy()
Global $AccelKeys[2][2] = [["^a", $SelectAll], ["^s", $SaveDoc]]
GUISetAccelerators($AccelKeys)
;~ КУДА ПЕРЕСТАВИТЬ ЭТИ ХОТКЕИ, ЧТОБЫ ОНИ НЕ СОЗДАВАЛИ ОШИБОК?
;~ HotKeySet("!1", CopyDate())
;~ HotKeySet("!2", CopyNum())
;~ HotKeySet("!3", CopyName())
;~ HotKeySet("!4", CopyText())
;~ HotKeySet("!5", CopyLeftSign())
;~ HotKeySet("!6", CopyRightSign())
;~ HotKeySet("{F5}", Wrap())
;~ HotKeySet("{F6}", SaveDefault())
;~ Группа 1
$Group1 = GUICtrlCreateGroup("1.", 10, 5, 325, 75)
$Combo = GUICtrlCreateCombo("", 20, 45, 270, 25, $CBS_DROPDOWNLIST)
;~ GUICtrlSetData(-1, $WrapperList)
$Label1 = GUICtrlCreateLabel("Выбрать враппер для работы", 80, 20, 240, 20)
GUICtrlSetFont(-1, 10, 400, 0, "Label1")
$Button1 = GUICtrlCreateButton("Изм", 295, 45, 30, 25, 0)
GUICtrlSetState(-1, $GUI_DISABLE)
;~ Группа 2
$Group2 = GUICtrlCreateGroup("2.", 340, 5, 175, 75)
$Input1 = GUICtrlCreateInput("", 350, 45, 101, 24, BitOR($ES_AUTOHSCROLL, $ES_NUMBER))
$Label2 = GUICtrlCreateLabel("Начать с топика", 380, 20, 110, 20)
$Button2 = GUICtrlCreateButton("<", 455, 45, 25, 25, 0)
$Button3 = GUICtrlCreateButton(">", 481, 45, 25, 25, 0)
;~ Группа 3
$Group3 = GUICtrlCreateGroup("3.", 520, 5, 175, 75)
$Button4 = GUICtrlCreateButton("Создать NSR", 530, 30, 75, 40, $BS_MULTILINE)
$Button5 = GUICtrlCreateButton("Cохранить NSR", 610, 30, 75, 40, $BS_MULTILINE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Edit1 = GUICtrlCreateEdit("", 0, 85, 445, 614, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_WANTRETURN))
GUICtrlSetState(-1, $GUI_FOCUS)
GUICtrlSetLimit($Edit1, 99999999)
$Edit2 = GUICtrlCreateEdit("", 445, 85, 465, 614, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_WANTRETURN))
GUICtrlSetLimit($Edit2, 99999999)
;~ Настройки, помощь
$Group4 = GUICtrlCreateGroup("Настройки, помощь", 700, 5, 205, 75)
$Checkbox1 = GUICtrlCreateCheckbox(" Включить автозамену", 710, 30, 157, 17)
GUICtrlSetState (-1, 1)
$Button6 = GUICtrlCreateButton("Изм", 707, 50, 30, 25, 0)
$Label3 = GUICtrlCreateLabel("Правила автозамены", 740, 55, 130, 20)
$Button7 = GUICtrlCreateButton("i", 879, 15, 21, 21, 0)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Combo
GUICtrlSetState($Button1, $GUI_ENABLE)
Case $Button1
If GUICtrlRead($Combo) <> "" Then
FileCopy(@ScriptDir & "\" & GUICtrlRead($Combo) & ".txt", @ScriptDir & "\" & GUICtrlRead($Combo) & ".bak", 1)
Run("notepad.exe " & @ScriptDir & "\" & GUICtrlRead($Combo) & ".txt")
EndIf
Case $Button2
$iTopic = GUICtrlRead($Input1)
if @error = 0 Then GUICtrlSetData($Input1, $iTopic-1)
Case $Button3
$iTopic = GUICtrlRead($Input1)
if @error = 0 Then GUICtrlSetData($Input1, $iTopic+1)
Case $Button4
For $x = 1 To $FileList[0]
if $FileList[$x] = GUICtrlRead($Combo) & ".txt" Then
Global $WrapperName = $FileList[$x] & ".txt"
Wrap()
EndIf
Next
Case $Button5
SaveAs()
Case $Button6
FileCopy("автозамена.ini", "автозамена.bak", 1)
Run("notepad.exe " & "автозамена.ini")
Case $Button7
Case $SelectAll
SelectAll()
Case $SaveDoc
SaveAs()
EndSwitch
WEnd
Func Wrap()
;~ Global $WrapperData
;~ _FileReadToArray($FileList[$x], $WrapperData)
Global $Topic = GUICtrlRead($Input1)
Global $Spravka = $Topic + 10000
;~ Делаем автозамену
Global $TextFromEdit1 = GUICtrlRead($Edit1)
If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then
$ini = FileRead("автозамена.ini")
$patern = '(Найти:.+?[\r\n]+Заменить на:[^\r\n]*)'
$Search = StringRegExp($ini, $patern, 3)
If IsArray($Search) Then
$patern = 'Найти:(.+?)[\r\n]+Заменить на:(.*)'
For $i = 0 To UBound($Search) - 1
$sSearch = StringRegExpReplace($Search[$i], $patern, '\1')
$sReplace = StringRegExpReplace($Search[$i], $patern, '\2')
$TextFromEdit1 = StringRegExpReplace($TextFromEdit1, '(?m)' & $sSearch, $sReplace)
Next
EndIf
FileClose($ini)
EndIf
Local $IN = FileRead($FileList[$x])
Local $Line = StringSplit($TextFromEdit1, @CRLF)
for $i = 1 to UBound($Line) - 1
if @error = 0 And StringLen($Line[$i]) > 0 Then
;~ Распознаем название, вариант: !01.01.2010 N 2133/12 "Название документа"
Local $Matches = StringRegExp ($Line[$i], "^!\s*0?(\d+)[\.\\\/](\d+)[\.\\\/](\d+)\s*г?о?д?а?\.?\s*[N№]\s*(\S+)\s*(.+)", 1)
If @error = 0 Then
Global $Code = $Matches[3]
;~ Global $Name = $Matches[4]
Global $Name = StringRegExpReplace($Matches[4], """*(.+)""$", "\1")
if StringLen ($Matches[0]) = 1 Then
Global $DatePoints = "0" & $Matches[0] & "." & $Matches[1] & "." & $Matches[2]
Global $DateSlash = "0" & $Matches[0] & "/" & $Matches[1] & "/" & $Matches[2]
Else
Global $DatePoints = $Matches[0] & "." & $Matches[1] & "." & $Matches[2]
Global $DateSlash = $Matches[0] & "/" & $Matches[1] & "/" & $Matches[2]
EndIf
Global $DateLong = $Matches[0] & " " & _DigitToMonth($Matches[1]) & " " & $Matches[2] & " г."
Puts($IN)
$Topic = $Topic + 1
$Spravka = $Spravka + 1
ContinueLoop
EndIf
;~ Распознаем название, вариант: !01 Апреля 2010 "Название документа"
Local $Matches = StringRegExp ($Line[$i], "^!\s*0?(\d+)\s+($Month$),?\s+(\d+)\s*г?\.?\s*(.+)", 1)
If @error = 0 Then
Global $Name = StringRegExpReplace($Matches[3], """*(.+)""*$", "\1")
if StringLen ($Matches[0]) = 1 Then
Global $DatePoints = "0" & $Matches[0] & "." & _MonthToDigit($Matches[1]) & "." & $Matches[2]
Global $DateSlash = "0" & $Matches[0] & "/" & _MonthToDigit($Matches[1]) & "/" & $Matches[2]
Else
Global $DatePoints = $Matches[0] & "." & _MonthToDigit($Matches[1]) & "." & $Matches[2]
Global $DateSlash = $Matches[0] & "/" & _MonthToDigit($Matches[1]) & "/" & $Matches[2]
EndIf
Global $DateLong = $Matches[0] & " " & StringLower($Matches[1]) & " " & $Matches[2] & " г."
Puts($IN)
$Topic = $Topic + 1
$Spravka = $Spravka + 1
ContinueLoop
EndIf
;~ Распознаем название, вариант: !01.01.2010 Название документа. НЕ ОПРЕДЕЛЯЕТСЯ DATELONG
Local $Matches = StringRegExp ($Line[$i], "^!\s*0?(\d+)[\./](\d+)[\./](\d+)\s*(.+)", 1)
If @error = 0 Then
Global $Name = $Matches[3]
if StringLen ($Matches[0]) = 1 Then
Global $DatePoints = "0" & $Matches[0] & "." & $Matches[1] & "." & $Matches[2]
Global $DateSlash = "0" & $Matches[0] & "/" & $Matches[1] & "/" & $Matches[2]
Else
Global $DatePoints = $Matches[0] & "." & $Matches[1] & "." & $Matches[2]
Global $DateSlash = $Matches[0] & "/" & $Matches[1] & "/" & $Matches[2]
EndIf
Global $DateLong = $Matches[0] & " " & StringLower($Matches[1]) & " " & $Matches[2] & " г."
Puts($IN)
$Topic = $Topic + 1
$Spravka = $Spravka + 1
ContinueLoop
EndIf
;~ Поиск заголовков
Local $Matches = StringRegExp($Line[$i], "^\^(.+)", 1)
If @error = 0 Then
Puts ("")
Puts ("!STYLE C 0 73 0")
Puts ("" & $Matches[0] & "")
Puts ("")
ContinueLoop
EndIf
;~ Поиск обычного текста
if StringRegExp($Line[$i], "^([^!].+)", 0) Then
Puts ("!STYLE J 0 73 5")
Puts ($Line[$i])
ContinueLoop
EndIf
;~ Поиск подписи
;~ вариант подписи: !А.А. Петров
$Matches = StringRegExp($Line[$i], "^!($Fam$)", 1)
If @error = 0 Then
Puts("")
Puts("")
Puts("STYLE L 0 73 0")
Puts($Matches[0])
Puts("")
Puts(";")
ContinueLoop
EndIf
;~ вариант подписи: !Руководитель А.А. Петров
$Matches = StringRegExp($Line[$i], "^!(.+)\s*($Fam$)", 1)
If @error = 0 Then
Puts("")
Puts("")
Puts("!STYLE S 0 73 0")
Puts($Matches[0] & " | " & $Matches[1])
Puts("")
Puts(";")
ContinueLoop
EndIf
;~ вариант подписи: !Пресс-служба департамента
$Matches = StringRegExp($Line[$i], "^!.+(?!$Fam$)", 1)
If @error = 0 Then
Puts("")
Puts("")
Puts("!STYLE L 0 73 0")
Puts($Matches[0])
Puts("")
Puts(";")
ContinueLoop
EndIf
EndIf
Next
FileClose($FileList[$x])
EndFunc
Func Say ($Message)
MsgBox(0, "", $Message)
EndFunc
Func Puts ($Message)
_GUICtrlEdit_AppendText($Edit2, @CRLF & $Message)
EndFunc
Func _DigitToMonth($Month)
If $Month = 1 Then Return "января"
If $Month = 2 Then Return "февраля"
If $Month = 3 Then Return "марта"
If $Month = 4 Then Return "апреля"
If $Month = 5 Then Return "мая"
If $Month = 6 Then Return "июня"
If $Month = 7 Then Return "июля"
If $Month = 8 Then Return "августа"
If $Month = 9 Then Return "сентября"
If $Month = 10 Then Return "октября"
If $Month = 11 Then Return "ноября"
If $Month = 12 Then Return "декабря"
EndFunc ;==>_DigitToMonth
Func _MonthToDigit($Month)
if $Month = "января" Then Return "01"
if $Month = "февраля" Then Return "02"
if $Month = "марта" Then Return "03"
if $Month = "апреля" Then Return "04"
if $Month = "мая" Then Return "05"
if $Month = "июня" Then Return "06"
if $Month = "июля" Then Return "07"
if $Month = "августа" Then Return "08"
if $Month = "сентября" Then Return "09"
if $Month = "октября" Then Return "10"
if $Month = "ноября" Then Return "11"
if $Month = "декабря" Then Return "12"
EndFunc ;==>_MonthToDigit
Func SaveAs()
local $TextToSave, $SaveAs, $SaveAsNSR, $hFile
$TextToSave = _StringANSI2OEM(GuiCtrlRead($Edit2))
if StringLen($TextToSave) < 1 Then
MsgBox(64, "", "Сохранять пока нечего")
Else
$SaveAs = FileSaveDialog("Сохранить как", @DesktopCommonDir, "(*.nsr)", 2)
if @error =0 Then
$SaveAsNSR = $SaveAs & ".nsr"
$hFile = FileOpen($SaveAsNSR, 2)
FileWriteLine($hFile, $TextToSave)
FileClose($hFile)
if @error<>0 Then MsgBox(1, "", "Ошибка сохранения")
EndIf
EndIf
EndFunc
Func _StringANSI2OEM($strText)
Local $sBuffer = DllStructCreate("char[" & StringLen($strText) + 1 & "]")
Local $aRet = DllCall("User32.dll", "int", "CharToOem", "str", $strText, "ptr", DllStructGetPtr($sBuffer))
If Not IsArray($aRet) Then Return SetError(1, 0, '') ; ошибка DLL
If $aRet[0] = 0 Then Return SetError(2, $aRet[0], '') ; ошибка функции
Return DllStructGetData($sBuffer, 1)
EndFunc ;==>_StringANSI2OEM
Func SelectAll()
If ControlGetFocus($GuiName) <> "ComboBox1" Then
Send("^{HOME}")
Send("^+{END}")
EndIf
EndFunc
Func CopyDate()
Send ("^c")
_GUICtrlEdit_AppendText($Edit1, @CRLF & ClipGet() & " ")
EndFunc
Func CopyNum()
Send ("^c")
_GUICtrlEdit_AppendText($Edit1, ClipGet() & " ")
EndFunc
Func CopyName()
Send ("^c")
_GUICtrlEdit_AppendText($Edit1, ClipGet() & @CRLF)
EndFunc
Func CopyText()
EndFunc
Func CopyLeftSign()
EndFunc
Func CopyRightSign()
EndFunc
Func SaveDefault()
EndFunc
Добавлено:
Сообщение автоматически объединено:
АААА, все, разобрался!
Нужно было писать не HotKeySet("!1", CopyDate()), а HotKeySet("!1", "CopyDate()")
Т.е. внутри HotHeySet необходимо писать названия функций в кавычках.
уже который раз делаю эту ошибку
жалко, что при запуске скрипта AutoIt не распознает, в чем именно ошибка.