Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: Pravokonst
Дата сообщения: 15.09.2008 11:42
Народ подскажите как задать HomeDir или WorkDir для autoit или приложения которое он запускает?, просто это приложение создаёт мне документы, которые вообще-то не нужны, но лучше скидывать их в папку с этим приложением, перемещение это туповато )
Автор: Maza Faka
Дата сообщения: 15.09.2008 12:45
Pravokonst
Смотри описание макросов в справке, в разделе Directory macros
Автор: Pravokonst
Дата сообщения: 15.09.2008 13:03
[q][/q]
там нельзя задавать, только получать значение
Автор: alex832008
Дата сообщения: 15.09.2008 14:07

Цитата:
Код:#include <Array.au3>

$sIniFile = "BASELIST.ini"

;Читаем имена всех секции в файле
$aSectNames = IniReadSectionNames($sIniFile)

If Not @error Then
;Читаем в массив каждую секцию в файле BASELIST.ini
For $i = 1 To UBound($aSectNames)-1
Assign("aSection_" & $i, IniReadSection($sIniFile, $aSectNames[$i]), 2)

$aTmpArr = Eval("aSection_" & $i)

;Отображаем только что созданный массив содержащий записи текущей секции - для проверки
_ArrayDisplay($aTmpArr, "Section: [" & $aSectNames[$i] & "]")
Next

;Выводим на экран ключ и значение первого элемента в первой секции
MsgBox(64, "", $aSection_1[1][0] & "=" & $aSection_1[1][1])

;Выводим на экран ключ и значение первого элемента во второй секции
MsgBox(64, "", $aSection_2[1][0] & "=" & $aSection_2[1][1])

;Теперь каждая переменная $aSection_N содержит массив с секциями, этих переменных столько, сколько секции в ини файле
;Их колчество можно определить по $aSectNames[0]
ConsoleWrite($aSectNames[0])
EndIf



ViSiToR
Спасибо за помощь !
Автор: ViSiToR
Дата сообщения: 15.09.2008 14:16
Pravokonst 12:42 15-09-2008
Цитата:
как задать HomeDir или WorkDir для autoit или приложения которое он запускает?

Для самого скрипта используется FileChangeDir(@HomeDrive).
Для запускаемого приложение используется второй параметр в команде Run:


Код:
FileChangeDir(@HomeDrive)
Run("SomProgram.exe", @WorkingDir) ;Тут @WorkingDir это @HomeDrive, т.к мы его задали функцией выше
Автор: Pravokonst
Дата сообщения: 15.09.2008 14:29
ViSiToR , спасибо, ты похоже один реально рубишь здесь, или я нифига не понимаю ).
Автор: XpycTMD
Дата сообщения: 15.09.2008 14:31
Подскажите пожалуста как можно сделать такое:

Необходимо при нажатии на кнопку "Печать" вывести диологовое окно выбора принтера, а потом на выбраном принтере распечатать зарание указанный фаил.

Зарание благодарен за помощь.
Автор: ViSiToR
Дата сообщения: 15.09.2008 15:16
XpycTMD 15:31 15-09-2008
Цитата:
Необходимо при нажатии на кнопку "Печать" вывести диологовое окно выбора принтера



Код: #include <GuiConstantsEx.au3>
#include <ButtonConstants.au3>

$sFile = "C:\test.txt"

$GUI = GUICreate("Print Test", 300, 100)

GUICtrlCreateLabel("File Path:", 20, 22)
$Input = GUICtrlCreateInput($sFile, 80, 20, 200, 20)

$Print_Button = GUICtrlCreateButton("Print", 20, 50, 260, 32, $BS_ICON)
GUICtrlSetImage(-1, "shell32.dll", -17)

GUISetState(@SW_SHOW, $GUI)

While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case
$Print_Button
$sFile
= GUICtrlRead($Input)
Run('Rundll32.exe "' & @SystemDir & '\mshtml.dll",PrintHTML "' & $sFile & '"', @SystemDir)
EndSwitch
WEnd
Автор: alex832008
Дата сообщения: 15.09.2008 15:31
Вопрос #2
А как легче получать название последней папки в указанном пути FileOpenDialog ?
т.е. надо название конечной папки вернуть в строку.
Автор: ViSiToR
Дата сообщения: 15.09.2008 16:02
alex832008 16:31 15-09-2008
Цитата:
как легче получать название последней папки в указанном пути FileOpenDialog ?

Эта функция устанавливает рабочую папку (папка в который были выбраны файлы), поэтому @WorkingDir это и есть последняя папка


Цитата:
надо название конечной папки вернуть в строку

Только имя папки?


Код:
$sFile = FileOpenDialog("Title", "", "All (*.*)")

$sDirName = StringRegExpReplace(@WorkingDir, "^.*\\", "")
MsgBox(64, "Results", StringFormat("Выбранный файл: %s\nРабочая папка: %s\nИмя папки: %s", $sFile, @WorkingDir, $sDirName))
Автор: Maza Faka
Дата сообщения: 15.09.2008 16:27
alex832008

Цитата:
получать название последней папки в указанном пути FileOpenDialog

Вариант 1

Код: $sFile = FileOpenDialog("Select File...", "", "All (*.*)")
If @error Then Exit

$sFolder = StringRegExpReplace($sFile, "^.*\\(.*)\\.*$", "\1")
If @extended = 0 Then $sFolder = StringRegExpReplace($sFile, "(^.*\\).*", "\1")

MsgBox(0, "", $sFolder)
Автор: SysLam
Дата сообщения: 16.09.2008 05:10
ViSiToR

Цитата:
Вот

немного унифицировал твой вариант:

Код: #include <GuiConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$Main_GUI = GUICreate("Wizard Demo!", 400, 300)
$Img_Path = @SystemDir & "\oobe\images\wpakey.jpg" ;@SystemDir & "\Setup.bmp"
$iStep = 1

Global $Main_Ctrls[10][4] = [ _
[
_GUICtrlCreateSeperator(0, 2, 265, 3, 396), 0, 0, 0], _
[
GUICtrlCreateButton("<<Back", 170, 270, 60), $GUI_DISABLE, $GUI_ENABLE, $GUI_ENABLE], _
[
GUICtrlCreateButton("Next>>", 240, 270, 60), $GUI_ENABLE, $GUI_ENABLE, $GUI_DISABLE], _
[
GUICtrlCreateButton("Exit", 325, 270, 60), 0, 0, 0], _
[
GUICtrlCreatePic($Img_Path, 2, 2, 160, 263, $SS_SUNKEN, $WS_EX_STATICEDGE+$WS_EX_CLIENTEDGE), $GUI_SHOW, $GUI_HIDE, $GUI_HIDE], _
[
GUICtrlCreateLabel("Wellcome!", 240, 20, 150), $GUI_SHOW, $GUI_HIDE, $GUI_HIDE], _
[
GUICtrlCreateInput("Some input", 10, 20, 180, 20), $GUI_HIDE, $GUI_SHOW, $GUI_HIDE], _
[
GUICtrlCreateCheckbox("Some checkbox", 10, 50), $GUI_HIDE, $GUI_SHOW, $GUI_HIDE], _
[
GUICtrlCreateEdit("Some Edit", 10, 20, 180, 220), $GUI_HIDE, $GUI_HIDE, $GUI_SHOW], _
[
GUICtrlCreateLabel("Some Label", 220, 20), $GUI_HIDE, $GUI_HIDE, $GUI_SHOW] _
]


GUICtrlSetFont($Main_Ctrls[5][0], 12, 800)
GUISetState(@SW_SHOW, $Main_GUI)
_Elements_SetState($iStep)

While 1
$Msg = GUIGetMsg()

Switch $Msg
Case $Main_Ctrls[3][0], $GUI_EVENT_CLOSE
$Ask
= MsgBox(256+52, "Attention", "Are you sure you want to exit the Wizard now?", 0, $Main_GUI)
If $Ask <> 6 Then ContinueLoop
Exit
Case
$Main_Ctrls[2][0]
$iStep += 1
_Elements_SetState($iStep)
Case $Main_Ctrls[1][0]
$iStep -= 1
_Elements_SetState($iStep)
EndSwitch
WEnd

Func
_GUICtrlCreateSeperator($Direction, $Left, $Top, $Width=3, $Lenght=25)
If $Direction Then Return GUICtrlCreateLabel("", $Left, $Top, $Width, $Lenght, $SS_SUNKEN)
Return GUICtrlCreateLabel("", $Left, $Top, $Lenght, $Width, $SS_SUNKEN)
EndFunc

Func
_Elements_SetState($iStep)
For $i=1 To UBound($Main_Ctrls,1)-1
GUICtrlSetState($Main_Ctrls[$i][0], $Main_Ctrls[$i][$iStep])
Next
EndFunc
Автор: ViSiToR
Дата сообщения: 16.09.2008 07:58
SysLam 06:10 16-09-2008
Цитата:
немного унифицировал твой вариант

Неплохо! правда для разбора будет немного неудобно, но идея хорошая.
Автор: Tipulatoid
Дата сообщения: 16.09.2008 10:24
Как получить в переменной имя последнего по дате создания файла *.txt в папке где есть куча других? FileFindNextFile вроде по имени сортирует.
Автор: alex832008
Дата сообщения: 16.09.2008 11:15

Цитата:
Цитата:как легче получать название последней папки в указанном пути FileOpenDialog ?

Эта функция устанавливает рабочую папку (папка в который были выбраны файлы), поэтому @WorkingDir это и есть последняя папка


Цитата:надо название конечной папки вернуть в строку

Только имя папки?


Код:
$sFile = FileOpenDialog("Title", "", "All (*.*)")

$sDirName = StringRegExpReplace(@WorkingDir, "^.*\\", "")
MsgBox(64, "Results", StringFormat("Выбранный файл: %s\nРабочая папка: %s\nИмя папки: %s", $sFile, @WorkingDir, $sDirName))


А если это будет FileSelectFolder
И насколько я понял, FileSelectFolder @WorkingDir уже не устанавливает ?

Автор: Maza Faka
Дата сообщения: 16.09.2008 11:30
Tipulatoid
Попробуй так:

Код: #include <File.au3>

$sPath = "c:\test"

$aFiles = _FileListToArray($sPath, "*.txt", 1)
If @error Then Exit

$sample = $sPath & "\" & $aFiles[1]

For $i = 2 To $aFiles[0]
If FileGetTime($sPath & "\" & $aFiles[$i], 1, 1) > FileGetTime($sample, 1, 1) Then $sample = $sPath & "\" & $aFiles[$i]
Next

MsgBox(0, "Last file", $sample)
Автор: alex832008
Дата сообщения: 16.09.2008 11:53

Цитата:
Цитата:А если это будет FileSelectFolder

ViSiToR ведь показал тебе пример, нужно его немного изменить:

Код:$sFolder = FileSelectFolder("Select Folder...", "")
If @error Then Exit

$sLastDir = StringRegExpReplace($sFolder, "^.*\\", "")

MsgBox(0, "", StringFormat("Выбранная папка: %s\nИмя папки: %s", $sFolder, $sLastDir))


Пасиб
Автор: SysLam
Дата сообщения: 16.09.2008 12:25
ViSiToR

Цитата:
для разбора будет немного неудобно

добавить переменную для индивидуальной работы с контролом всегда можно

кстати, обнаружил что WinList() находит почему-то не все окна
Автор: ViSiToR
Дата сообщения: 16.09.2008 13:26
SysLam 13:25 16-09-2008
Цитата:
WinList() находит почему-то не все окна

Например?
Автор: Tipulatoid
Дата сообщения: 16.09.2008 16:21
Maza Faka
Thnx
Автор: XpycTMD
Дата сообщения: 16.09.2008 16:49
ViSiToR
Спасибо за помощь
Автор: NORIO
Дата сообщения: 17.09.2008 06:05
Можно ли как то досрочно перейти к новому витку цикла пропустив при определённых обстоятельствах часть кода и при этом не используя многострочные условия с вложенным в них кодом.

Я хочу это потому что многострочные условные конструкции вытянутые на несколько страниц, а тем более с ещё несколькими такими же, вложенными друг в друга визуально усложняют код, становится всё трудней понять где чьё окончание (endif) находится.

Хотелось бы минимизировать в разумных пределах при возможности.

вот например так:

For $var in $arr

код
код
код

If true then
сразу отсюда начать следующий цикл что то типа goto или jump к строке for или next
endif

код
код
код

Next

Добавлено:
Я тут вспомнил про ContinueLoop
Вот только то ли это что нужно, сохранится ли прогресс перечисления?
Автор: Maza Faka
Дата сообщения: 17.09.2008 07:12
NORIO

Цитата:
Я тут вспомнил про ContinueLoop. сохранится ли прогресс перечисления?

Переходим
Цитата:
к новому витку цикла пропустив
цифру 5

Код: For $i = 1 To 10
If $i = 5 Then ContinueLoop
ConsoleWrite($i & @LF)
Next
Автор: SysLam
Дата сообщения: 17.09.2008 10:48
ViSiToR

Цитата:
Например?

уфф, извиняюсь - сегодня окно нашлось, может вчера глюк какой был?
пробывал твою UDF поиска окна по процессу
Автор: Tipulatoid
Дата сообщения: 17.09.2008 12:28
Поправьте плиз. Нужно:
1. Чтобы в $Input4_1_1 НЕЛЬЗЯ было с клавиатуры забить любые нецифры и любое число больше 36. Иначе можно вбить 1000000 и будет скрипт пытаться столько вкладок нарисовать.
2. Чтобы при изменении содержимого $Input4_1_2 имена вкладок менялись "на лету" а не как сейчас при клике на другом элементе GUI

Untitled3.au3 [строка 1] : [more]
Код: #include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>
#include <GUIConstants.au3>
#include <file.au3>
#include <guitab.au3>
#include <string.au3>
#include <Array.au3>

; Определяем ini-файл куда будут писаться или откуда будут читаться настройки
$inifile = "champ2.ini"

; Рисуем четвертый диалог мастера
$ChildGui_4 = GUICreate("", 493, 325, 1, 1, $WS_POPUP)
$Label4_1_1 =
GUICtrlCreateLabel("Шаг 3/10: Ввод сведений о командах", 24, 8, 200, 17)

$Checkbox4_1_1 =
GUICtrlCreateCheckbox("Многогрупповая игра", 32, 29, 125, 17)
If IniRead($inifile, "General", "MultiGame", "0") = 0 Then
GUICtrlSetState($Checkbox4_1_1, $GUI_UNCHECKED)
$MultiGame = 0
Else
GUICtrlSetState($Checkbox4_1_1, $GUI_CHECKED)
$MultiGame = 1
EndIf

$Button4_1_1 =
GUICtrlCreateButton("Указать папку", 160, 30, 90, 17)
$Icon4_1_1 =
GUICtrlCreateIcon("inetcpl.cpl", -23, 255, 30, 15, 15)
$Icon4_1_2 =
GUICtrlCreateIcon("inetcpl.cpl", -22, 260, 30, 15, 15)

If Not IniRead($inifile, "General", "MultiGamePath", "") = "" Then
$multi_group_path = IniRead($inifile, "General", "MultiGamePath", "")
Else
$multi_group_path = ""
EndIf


If not
$multi_group_path = "" Then
$Label4_1_2 =
GUICtrlCreateLabel($multi_group_path, 34, 47, 225, 33)
Else
$Label4_1_2 =
GUICtrlCreateLabel("", 34, 47, 225, 33)
EndIf
GUICtrlSetColor(-1, 0x335EA8)

If
GUICtrlRead($Checkbox4_1_1) = $GUI_UNCHECKED Then
GUICtrlSetState($Button4_1_1, $GUI_DISABLE)
GUICtrlSetState($Icon4_1_1, $GUI_HIDE)
GUICtrlSetState($Icon4_1_2, $GUI_HIDE)
GUICtrlSetState($Label4_1_2, $GUI_HIDE)
Else
GUICtrlSetState($Button4_1_1, $GUI_ENABLE)
If not $multi_group_path = "" Then
GUICtrlSetState($Icon4_1_1, $GUI_HIDE)
GUICtrlSetState($Icon4_1_2, $GUI_SHOW)
GUICtrlSetState($Label4_1_2, $GUI_SHOW)
Else
GUICtrlSetState($Icon4_1_1, $GUI_SHOW)
GUICtrlSetState($Icon4_1_2, $GUI_HIDE)
EndIf

EndIf




$Label4_1_3 =
GUICtrlCreateLabel ("Кол-во групп (1-6/36):", 290, 31, 130, 17)
$Input4_1_1 =
GUICtrlCreateInput (IniRead ($inifile, "General", "GroupQuan", "6"), 405, 30, 40,17)
$UpDown4_1_1 =
GUICtrlCreateUpdown($Input4_1_1, $UDS_ARROWKEYS)
If $MultiGame = 0 Then
GUICtrlSetLimit(-1, 36, 1)
Else
GUICtrlSetLimit(-1, 6, 1)
EndIf

$Icon4_2_1 =
GUICtrlCreateIcon("inetcpl.cpl", -23, 457, 30, 15, 15)
$Icon4_2_2 =
GUICtrlCreateIcon("inetcpl.cpl", -22, 463, 30, 15, 15)



$Label4_1_4 =
GUICtrlCreateLabel ("Название группы:", 290, 57, 95, 17)
$Input4_1_2 =
GUICtrlCreateInput (IniRead ($inifile, "General", "GroupName", "Сетка"), 386, 56, 60,17)
$Icon4_3_1 =
GUICtrlCreateIcon("inetcpl.cpl", -23, 457, 56, 15, 15)
$Icon4_3_2 =
GUICtrlCreateIcon("inetcpl.cpl", -22, 463, 56, 15, 15)


$Tab4_2_1 =
GUICtrlCreateTab (30, 80, 450, 247)
_DrawTabChildGui4 ()

; Вызываем функцию проверки элементов Input
_CheckInputsProc()
GUISetState(@SW_SHOW, $ChildGui_4)

While 1
$Msg =
GUIGetMsg(1)

Switch $Msg[0]

Case $Checkbox4_1_1
If
GUICtrlRead ($Checkbox4_1_1) = $GUI_UNCHECKED Then
$MultiGame = 0
_CheckInputsProc(1)
GUICtrlSetState ($Button4_1_1, $GUI_DISABLE)
GuiCtrlSetState ($Label4_1_2, $GUI_HIDE)
GUICtrlSetState ($Icon4_1_1, $GUI_HIDE)
GUICtrlSetState ($Icon4_1_2, $GUI_HIDE)
GuiCtrlSetLimit ($UpDown4_1_1, 36, 1)
Else
$MultiGame = 1
_CheckInputsProc(1)
GUICtrlSetState ($Button4_1_1, $GUI_ENABLE)
GUICtrlSetState ($Label4_1_2, IniRead ($inifile, "General", "MultiGamePath", ""))
GuiCtrlSetLimit ($UpDown4_1_1, 6, 1)
If
GUICtrlRead ($Input4_1_1) > 6 Then GUICtrlSetData ($Input4_1_1, "6")
If Not $multi_group_path = "" Then
GuiCtrlSetState ($Label4_1_2, $GUI_SHOW)
GUICtrlSetState ($Icon4_1_1, $GUI_HIDE)
GUICtrlSetState ($Icon4_1_2, $GUI_SHOW)
Else
GuiCtrlSetState ($Label4_1_2, $GUI_HIDE)
GUICtrlSetState ($Icon4_1_1, $GUI_SHOW)
GUICtrlSetState ($Icon4_1_2, $GUI_HIDE)
EndIf
EndIf

Case
$Button4_1_1
_CheckInputsProc(1)
$probably_multi_group_path =FileSelectFolder ("Выберите папку c многогрупповой игрой", "", 1, @ScriptDir & "\games")

If Not FileExists ($probably_multi_group_path & "\params2.dal" ) Then
MsgBox (0,"Ошибка", "В указанной папке многогрупповая игра не обнаружена!")
$multi_group_path = ""
_CheckInputsProc(1)
GUICtrlSetData($Label4_1_2, $multi_group_path)
GUICtrlSetState ($Label4_1_2, $GUI_HIDE)
GUICtrlSetState ($Icon4_1_1, $GUI_SHOW)
GUICtrlSetState ($Icon4_1_2, $GUI_HIDE)
Else
$multi_group_path = $probably_multi_group_path
_CheckInputsProc(1)
GUICtrlSetData($Label4_1_2, $multi_group_path)
GUICtrlSetState ($Label4_1_2, $GUI_SHOW)
GUICtrlSetState ($Icon4_1_1, $GUI_HIDE)
GUICtrlSetState ($Icon4_1_2, $GUI_SHOW)
EndIf


Case
$Input4_1_2
_DrawTabChildGui4()

Case $Input4_1_1
_DrawTabChildGui4()
EndSwitch
WEnd

Func
_CheckInputsProc($iCheckNextButton=0)

If $MultiGame = 0 Then
If
StringIsInt (
GUICtrlRead($Input4_1_1)) = 0 Or GUICtrlRead($Input4_1_1) < 1 Or GUICtrlRead($Input4_1_1) > 36 Then
GUICtrlSetState($Icon4_2_1, $GUI_SHOW)
GUICtrlSetState($Icon4_2_2, $GUI_HIDE)
Else
GUICtrlSetState($Icon4_2_1, $GUI_HIDE)
GUICtrlSetState($Icon4_2_2, $GUI_SHOW)
EndIf
Else
If
StringIsInt (
GUICtrlRead($Input4_1_1)) = 0 Or GUICtrlRead($Input4_1_1) < 1 Or GUICtrlRead($Input4_1_1) > 6 Then
GUICtrlSetState($Icon4_2_1, $GUI_SHOW)
GUICtrlSetState($Icon4_2_2, $GUI_HIDE)
Else
GUICtrlSetState($Icon4_2_1, $GUI_HIDE)
GUICtrlSetState($Icon4_2_2, $GUI_SHOW)
EndIf
EndIf

If
GUICtrlRead($Input4_1_2) = "" Then
_GUICtrlSetState($Icon4_3_1, $GUI_SHOW)
_GUICtrlSetState($Icon4_3_2, $GUI_HIDE)
Else
_GUICtrlSetState($Icon4_3_1, $GUI_HIDE)
_GUICtrlSetState($Icon4_3_2, $GUI_SHOW)
EndIf


EndFunc
;==>_CheckInputsProc

; Рисуем Tabitems на шаге 3 ($ChildGui_4)
Func _DrawTabChildGui4 ()
;надо прочеcть перед удалением всё что будет в tabitems в массивы
_GUICtrlTab_DeleteAllItems ($Tab4_2_1)
For $g=1 to
GUICtrlRead ($Input4_1_1)
$TabItem4_2_1_0 =
GUICtrlCreateTabItem(GUICtrlRead ($Input4_1_2) & " " & $g)
Next

EndFunc

Func
_GUICtrlSetState($nCtrl, $iState)
If BitAND(
GUICtrlGetState($nCtrl), $iState) <> $iState Then GUICtrlSetState($nCtrl, $iState)
EndFunc
Автор: ta lalihin
Дата сообщения: 17.09.2008 14:31
Товарищи, помогите разобраться.
Второй день копаюсь в autoit и никак не могу понять почему не работает простейший скрипт

$Title = "Test"

MsgBox(64, $Title, "")
WinWait($Title, "")
If Not WinActive($Title, "") Then WinActivate($Title, "")
WinActivate($Title, "")
Send("{ENTER}")

окошко появляется, а не закрывается =( понимаю, что что-то простое, но как заело... не могу никак понять чего

спасибо
Автор: ViSiToR
Дата сообщения: 17.09.2008 14:52
Tipulatoid 13:28 17-09-2008
Цитата:
Чтобы в $Input4_1_1 НЕЛЬЗЯ было с клавиатуры забить любые нецифры и любое число больше 36


Для $Input4_1_1 можно задать стиль:

Код: $Input4_1_1 = GUICtrlCreateInput (IniRead ($inifile, "General", "GroupQuan", "6"), 405, 30, 40,17, BitOR($ES_LEFT, $ES_AUTOHSCROLL, $ES_READONLY))
Автор: Tipulatoid
Дата сообщения: 17.09.2008 16:08
ViSiToR
традиционное спасибо. Однако с этими изменениями стало тормозить не подетски и даже зависать. Видно, слишком уж это ресурсоемкая вещь - перерисовка GUI "на лету". Придется наверное ввести кнопку "нарисовать вкладки" после того, как все изменения в инпуты внесены. В связи с этим вопрос - как поместить иконку на кнопку?
Автор: ViSiToR
Дата сообщения: 17.09.2008 16:19
Tipulatoid 17:08 17-09-2008
Цитата:
с этими изменениями стало тормозить не подетски

У меня [more=нормально]
Код: #include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>
#include <UpDownConstants.au3>
#include <file.au3>
#include <guitab.au3>
#include <string.au3>
#include <Array.au3>

; Определяем ini-файл куда будут писаться или откуда будут читаться настройки
$inifile = "champ2.ini"

; Рисуем четвертый диалог мастера
$ChildGui_4 = GUICreate("", 493, 325, 1, 1, $WS_POPUP)
$Label4_1_1 = GUICtrlCreateLabel("Шаг 3/10: Ввод сведений о командах", 24, 8, 200, 17)

$Checkbox4_1_1 = GUICtrlCreateCheckbox("Многогрупповая игра", 32, 29, 125, 17)
If IniRead($inifile, "General", "MultiGame", "0") = 0 Then
GUICtrlSetState($Checkbox4_1_1, $GUI_UNCHECKED)
$MultiGame = 0
Else
GUICtrlSetState($Checkbox4_1_1, $GUI_CHECKED)
$MultiGame = 1
EndIf

$Button4_1_1 = GUICtrlCreateButton("Указать папку", 160, 30, 90, 17)
$Icon4_1_1 = GUICtrlCreateIcon("inetcpl.cpl", -23, 255, 30, 15, 15)
$Icon4_1_2 = GUICtrlCreateIcon("inetcpl.cpl", -22, 260, 30, 15, 15)

If Not IniRead($inifile, "General", "MultiGamePath", "") = "" Then
$multi_group_path = IniRead($inifile, "General", "MultiGamePath", "")
Else
$multi_group_path = ""
EndIf

If Not
$multi_group_path = "" Then
$Label4_1_2 = GUICtrlCreateLabel($multi_group_path, 34, 47, 225, 33)
Else
$Label4_1_2 = GUICtrlCreateLabel("", 34, 47, 225, 33)
EndIf

GUICtrlSetColor(-1, 0x335EA8)

If GUICtrlRead($Checkbox4_1_1) = $GUI_UNCHECKED Then
GUICtrlSetState($Button4_1_1, $GUI_DISABLE)
GUICtrlSetState($Icon4_1_1, $GUI_HIDE)
GUICtrlSetState($Icon4_1_2, $GUI_HIDE)
GUICtrlSetState($Label4_1_2, $GUI_HIDE)
Else
GUICtrlSetState($Button4_1_1, $GUI_ENABLE)
If Not $multi_group_path = "" Then
GUICtrlSetState($Icon4_1_1, $GUI_HIDE)
GUICtrlSetState($Icon4_1_2, $GUI_SHOW)
GUICtrlSetState($Label4_1_2, $GUI_SHOW)
Else
GUICtrlSetState($Icon4_1_1, $GUI_SHOW)
GUICtrlSetState($Icon4_1_2, $GUI_HIDE)
EndIf
EndIf


$Label4_1_3 = GUICtrlCreateLabel("Кол-во групп (1-6/36):", 290, 31, 130, 17)
$Input4_1_1 = GUICtrlCreateInput(IniRead($inifile, "General", "GroupQuan", "6"), 405, 30, 40, 17, _
BitOR($ES_LEFT, $ES_AUTOHSCROLL, $ES_READONLY))

$UpDown4_1_1 = GUICtrlCreateUpdown($Input4_1_1, $UDS_ARROWKEYS)
GUICtrlSetLimit(-1, 36, 1)

If $MultiGame = 0 Then
GUICtrlSetLimit(-1, 36, 1)
Else
GUICtrlSetLimit(-1, 6, 1)
EndIf

$Icon4_2_1 = GUICtrlCreateIcon("inetcpl.cpl", -23, 457, 30, 15, 15)
$Icon4_2_2 = GUICtrlCreateIcon("inetcpl.cpl", -22, 463, 30, 15, 15)

$Label4_1_4 = GUICtrlCreateLabel("Название группы:", 290, 57, 95, 17)
$Input4_1_2 = GUICtrlCreateInput(IniRead($inifile, "General", "GroupName", "Сетка"), 386, 56, 60, 17)
$Icon4_3_1 = GUICtrlCreateIcon("inetcpl.cpl", -23, 457, 56, 15, 15)
$Icon4_3_2 = GUICtrlCreateIcon("inetcpl.cpl", -22, 463, 56, 15, 15)

$Tab4_2_1 = GUICtrlCreateTab(30, 80, 450, 247)
_DrawTabChildGui4()

; Вызываем функцию проверки элементов Input
_CheckInputsProc()
GUISetState(@SW_SHOW, $ChildGui_4)

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

While 1
$Msg = GUIGetMsg(1)

Switch $Msg[0]

Case $Checkbox4_1_1
If GUICtrlRead($Checkbox4_1_1) = $GUI_UNCHECKED Then
$MultiGame = 0
_CheckInputsProc(1)
GUICtrlSetState($Button4_1_1, $GUI_DISABLE)
GUICtrlSetState($Label4_1_2, $GUI_HIDE)
GUICtrlSetState($Icon4_1_1, $GUI_HIDE)
GUICtrlSetState($Icon4_1_2, $GUI_HIDE)
GUICtrlSetLimit($UpDown4_1_1, 36, 1)
Else
$MultiGame = 1
_CheckInputsProc(1)
GUICtrlSetState($Button4_1_1, $GUI_ENABLE)
GUICtrlSetState($Label4_1_2, IniRead($inifile, "General", "MultiGamePath", ""))
GUICtrlSetLimit($UpDown4_1_1, 6, 1)
If GUICtrlRead($Input4_1_1) > 6 Then GUICtrlSetData($Input4_1_1, "6")
If Not $multi_group_path = "" Then
GUICtrlSetState($Label4_1_2, $GUI_SHOW)
GUICtrlSetState($Icon4_1_1, $GUI_HIDE)
GUICtrlSetState($Icon4_1_2, $GUI_SHOW)
Else
GUICtrlSetState($Label4_1_2, $GUI_HIDE)
GUICtrlSetState($Icon4_1_1, $GUI_SHOW)
GUICtrlSetState($Icon4_1_2, $GUI_HIDE)
EndIf
EndIf

Case $Button4_1_1
_CheckInputsProc(1)
$probably_multi_group_path = FileSelectFolder("Выберите папку c многогрупповой игрой", "", 1, @ScriptDir & "\games")

If Not FileExists($probably_multi_group_path & "\params2.dal") Then
MsgBox(0, "Ошибка", "В указанной папке многогрупповая игра не обнаружена!")
$multi_group_path = ""
_CheckInputsProc(1)
GUICtrlSetData($Label4_1_2, $multi_group_path)
GUICtrlSetState($Label4_1_2, $GUI_HIDE)
GUICtrlSetState($Icon4_1_1, $GUI_SHOW)
GUICtrlSetState($Icon4_1_2, $GUI_HIDE)
Else
$multi_group_path = $probably_multi_group_path
_CheckInputsProc(1)
GUICtrlSetData($Label4_1_2, $multi_group_path)
GUICtrlSetState($Label4_1_2, $GUI_SHOW)
GUICtrlSetState($Icon4_1_1, $GUI_HIDE)
GUICtrlSetState($Icon4_1_2, $GUI_SHOW)
EndIf
EndSwitch
WEnd

Func _CheckInputsProc($iCheckNextButton = 0)

If $MultiGame = 0 Then
If StringIsInt(GUICtrlRead($Input4_1_1)) = 0 Or GUICtrlRead($Input4_1_1) < 1 Or GUICtrlRead($Input4_1_1) > 36 Then
GUICtrlSetState($Icon4_2_1, $GUI_SHOW)
GUICtrlSetState($Icon4_2_2, $GUI_HIDE)
Else
GUICtrlSetState($Icon4_2_1, $GUI_HIDE)
GUICtrlSetState($Icon4_2_2, $GUI_SHOW)
EndIf
Else
If StringIsInt(GUICtrlRead($Input4_1_1)) = 0 Or GUICtrlRead($Input4_1_1) < 1 Or GUICtrlRead($Input4_1_1) > 6 Then
GUICtrlSetState($Icon4_2_1, $GUI_SHOW)
GUICtrlSetState($Icon4_2_2, $GUI_HIDE)
Else
GUICtrlSetState($Icon4_2_1, $GUI_HIDE)
GUICtrlSetState($Icon4_2_2, $GUI_SHOW)
EndIf
EndIf

If GUICtrlRead($Input4_1_2) = "" Then
_GUICtrlSetState($Icon4_3_1, $GUI_SHOW)
_GUICtrlSetState($Icon4_3_2, $GUI_HIDE)
Else
_GUICtrlSetState($Icon4_3_1, $GUI_HIDE)
_GUICtrlSetState($Icon4_3_2, $GUI_SHOW)
EndIf

EndFunc ;==>_CheckInputsProc

; Рисуем Tabitems на шаге 3 ($ChildGui_4)
Func _DrawTabChildGui4()
;надо прочеcть перед удалением всё что будет в tabitems в массивы
_GUICtrlTab_DeleteAllItems($Tab4_2_1)
For $g = 1 To GUICtrlRead($Input4_1_1)
$TabItem4_2_1_0 = GUICtrlCreateTabItem(GUICtrlRead($Input4_1_2) & " " & $g)
Next

EndFunc ;==>_DrawTabChildGui4

Func _GUICtrlSetState($nCtrl, $iState)
If BitAND(GUICtrlGetState($nCtrl), $iState) <> $iState Then GUICtrlSetState($nCtrl, $iState)
EndFunc ;==>_GUICtrlSetState

Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0xFFFF)
Local $hCtrl = $lParam

Switch $nNotifyCode
Case $EN_CHANGE, $EN_UPDATE
Switch $nID
Case $Input4_1_1, $Input4_1_2
_DrawTabChildGui4()
EndSwitch
EndSwitch

Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Автор: Tipulatoid
Дата сообщения: 17.09.2008 16:58

Цитата:
У меня нормально

Точно нормально. Только как понимаешь, я этот диалог выдрал из общего своего Мастера; так вот, когда вношу изменения в общий код, тогда и глюки. Причину срастить не могу. Нуб, одним словом
Добавлено
На всякий случай http://www.delta-greit.narod.ru/wizard.rar

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

Предыдущая тема: Quintura Search


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.