Войти

Показать полную графическую версию : [Архив - Часть 1.3] AutoIt скрипты


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [26]

Creat0R
09-06-2007, 09:37
amel27
зачем там RegExp?
Я тоже в начале не хотел это использовать, но дело в том, что в отличие от приведённого мной примера, иногда есть необходимость для каждой замены задавать Patern (кстати, как оно по русский? :) ), чтобы по нему делать замену.

Вобщем спасибо, идея с созданием массива вне функции мне понравилась, это позволяет более удобно задавать Patern и соответственно замену.
А также...

- нет проблем с форматными символами (речь о "|");
:)

Вот немного переделал, добавил проверку ошибочности и возврат общего числа сделанных замен (@Extended):


$String = 'file://localhost/%22c:/my%20test/test.zip%22'
Dim $Pattern[4] = ['/', '%20', '%22', 'file:\\localhost\']
Dim $Replace[4] = ['\', ' ', '"', '']

$String = _StringMultiReplace($String, $Pattern, $Replace)

MsgBox (64, "Results", $String & @LF & "Число замен: " & @extended)
;На выходе имеем это:
;"c:\my test\test.zip"
;Число замен: 9

Func _StringMultiReplace($String, $Pattern, $Replace)
If Not IsArray($Pattern) Or Not IsArray($Replace) Then Return SetError(1, 0, $String)
Local $Extended = 0
ReDim $Replace[UBound($Pattern)]
For $i = 0 To UBound($Pattern)-1
$String = StringReplace($String, $Pattern[$i], $Replace[$i])
$Extended += @extended
Next
Return SetError(0, $Extended, $String)
EndFunc


gregaz
При закрытии дочернего окна GUI у меня обычно закрывается и родительсое окно.
Это зависит от того как оно закрывается...

Чем это достигнуто ?
Функция GuiDelete() имеет один опциональный параметр, это должен быть уникальный идентификатор, который возвращается функцией GuiCreate().

Соответственно, если имеем 2 ГУИ:

$Gui_1 = GuiCreate("Первый ГУИ")

$Gui_2 = GuiCreate("Второй ГУИ")

То для закрытия второго (предполагается что они оба уже видны), задаём как первый параметр команды GuiDelete() его идентификатор:

GuiDelete($Gui_2)

Также можно и спрятать окно:

GuiSetState(@SW_HIDE, $Gui_2)

Для показа обратно:

GuiSetState(@SW_SHOW, $Gui_2)

gregaz
09-06-2007, 10:01
gregaz
Цитата:При закрытии дочернего окна GUI у меня обычно закрывается и родительсое окно.

Creat0R
Это зависит от того как оно закрывается...

Спасибо это тоже полезно,ноя имел ввиду закрытие системным крестиком (в правом верхнем углу ).

amel27
09-06-2007, 10:33
Creat0R
По поводу _FileOpenDialog() - замени по тексту в определении структур "byte" на "char"... Так вроде работает, но логику изменений в работе структурных функций AutoIT-а пока не просек... нелогично это, когда бинарные данные (не текст!) по умолчанию преобразуются в юникод... на выходе получается чёрти-чё...

Creat0R
09-06-2007, 11:27
gregaz
я имел ввиду закрытие системным крестиком
Но если в главном цикле не задать действие для этого крестика, а именно это:

If GuiGetMsg = -3 Then
GuiDelete($Gui_2)
EndIf

то ничего происходить не будет.

Поэтому я и написал, что это зависит от ситуации и метода закрытия.

amel27
замени по тексту в определении структур "byte" на "char"
Ок, спасибо, но у меня пока этой проблемы нет, я ещё не ставил новую версию AutoIt (юзаю 3.2.2.0), но когда поставлю, полагаю мне это пригодится :)




© OSzone.net 2001-2012