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

» AutoIT

Автор: NIKZZZZ
Дата сообщения: 10.07.2007 21:55
RwR

Цитата:
Куча вопросов

Посмотри в описании GUICtrlCreateProgress, там есть похожий пример.

Автор: RwR
Дата сообщения: 10.07.2007 22:04
Да я смотрел, но этот пример мягко говоря не очень подходит.

Добавлено:

Цитата:
3. Как добавить строки к полосе прогресса как при исп-ии ProgressOn, используя GUICtrlCreateProgress? При использовании ProgressOn они наз-ся "title" и "maintext".

Ответьте пожалуйста вот на этот вопрос.
Автор: NIKZZZZ
Дата сообщения: 11.07.2007 00:05
RwR

Цитата:
3. Как добавить строки к полосе прогресса как при исп-ии ProgressOn, используя GUICtrlCreateProgress? При использовании ProgressOn они наз-ся "title" и "maintext".



Код: #include <GUIConstants.au3>

$AForm1 = GUICreate("Title", 323, 133, 367, 291)
$Label1 = GUICtrlCreateLabel("Text1", 16, 8, 43, 23)
GUICtrlSetFont(-1, 12, 800, 0, "Times New Roman")
$Label2 = GUICtrlCreateLabel("Text2", 128, 16, 31, 17)
$Label3 = GUICtrlCreateLabel("Text3", 200, 8, 51, 27)
GUICtrlSetFont(-1, 16, 400, 2, "Times New Roman")
$Label4 = GUICtrlCreateLabel("Text4", 96, 88, 62, 30)
GUICtrlSetFont(-1, 18, 800, 0, "Times New Roman")
$Progress1 = GUICtrlCreateProgress(8, 40, 294, 41)
GUICtrlSetData(-1, 25)
GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd
Автор: ViSiToR
Дата сообщения: 11.07.2007 00:07
Maza Faka

Цитата:
теперь кнопка "Yes" окна "$Window" не возвращает событие? В чём ошибка?

Ошибка в том что переменной $ok присваивается ID от последней кнопки, созданной во втором ГУИ, т.е к $Winow не имеющей отношения...


Код: #include <GUIConstants.au3>

$Window = GUICreate("Main", 300, 200)
$ok_1 = GUICtrlCreateButton("Yes", 20, 10, 60)

$dummy = GuiCreate("Dummy", 200, 150)
$ok_2 = GUICtrlCreateButton("Yes", 20, 10, 60)

GUISetState(@SW_SHOW, $Window)

While 1
$msg = GUIGetMsg(1)
Select
Case $msg[0] = $ok_1 And $msg[1] = $Window
MsgBox(64, "Main", "You pressed Yes in main window")
Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $Window
MsgBox(64, "Main", "You closed main window")
GuisetState(@SW_HIDE, $Window)
GUISetState(@SW_SHOW, $dummy)
Case $msg[0] = $ok_2 And $msg[1] = $dummy
MsgBox(64, "Dummy", "You pressed Yes in dummy window")
Case $msg[0] = $Gui_Event_Close And $msg[1] = $dummy
MsgBox(64, "Dummy", "You closed dummy window")
ExitLoop
EndSelect
WEnd
Автор: RwR
Дата сообщения: 11.07.2007 07:21
Thanx.
Автор: Maza Faka
Дата сообщения: 11.07.2007 08:00
ViSiToR
Можешь привести пример скрипта с полосой прогресса? Скажем копирование файла размером в 327 MB.
Автор: ViSiToR
Дата сообщения: 11.07.2007 08:28
Maza Faka

Цитата:
привести пример скрипта с полосой прогресса, скажем копирование файла размером в 327 MB?

Это немного затруднительно.... для копирования одного большого файла, нужно засикать данные, а для этого нужно знать сколько готово, и к тому же комманда для копирования останавливает скрипт пока копирование не окончено... но в принципе, можно через ко.м строку, и потом постоянно в цикле проверять сколько весит файл в папке назначения, и соответственно строить уровень прогресса...


[Код не проверен на практике]


Код:
ProgressOn("Прогресс", "Копирование большого файла", "", -1, -1, 16)

$SourcePath = "C:\Downloads\SomeBigFile.avi"
$DestPath = "C:"

$FileName = StringRegExpReplace($SourcePath, "^.*\\", "")

$Precent = 0
$Pid = Run(@ComSpec & ' /c copy "' & $SourcePath & '" "' & $DestPath & '\"', '', @SW_HIDE)

While ProcessExists($Pid)
ProgressSet($Precent)

$ReadySize = FileGetSize($DestPath & "\" & $FileName)
$Precent = StringRegExpReplace(100 / Round($ReadySize/1024/1024), "[^\.0-9]", "")

Sleep(1)
WEnd

ProgressOff()
Автор: Maza Faka
Дата сообщения: 11.07.2007 10:55
ViSiToR
Я тоже поначалу думал считать размер конечного файла, но не сработало, наверное из-за особенностей NTFS, помнится под FAT-ом при копировании размер конечного файла постепенно увеличивался, а под NTFS при копировании, размер конечного файла сразу равен размеру исходного файла.
Автор: ViSiToR
Дата сообщения: 11.07.2007 16:58
Maza Faka

Цитата:
помнится под FAT-ом при копировании размер конечного файла постепенно увеличивался

Проверил на Fat 32, при копировании или перемещении файл сразу имеет полный размер ...

Значит просчитать такое видимо не возможно, хотя могу ошибаться (надеюсь что ошибаюсь).
Автор: gmbh2
Дата сообщения: 12.07.2007 20:32
Как записать в текстовый файл расположение ярлыков на рабочем столе, и потом востановить это расположение?
Это вообще можно сделать с помощью autoit?
Автор: RwR
Дата сообщения: 14.07.2007 08:40
Как добавить к окну GUI кнопку свернуть, а закрыть и развернуть сделать неактивными?
Ответьте пожалуйста на мой вопрос.
Автор: NIKZZZZ
Дата сообщения: 14.07.2007 08:48
RwR

Цитата:
Как добавить к окну GUI кнопку свернуть, а закрыть и развернуть сделать неактивными?

Смотри описание - Стили управляющих элементов графического интерфейса пользователя.



Автор: RwR
Дата сообщения: 14.07.2007 09:24
NIKZZZZ, я уже запарился читать... Опиши пожалуйста как чё писать вместе с GUICreate, чтобы только кнопка свернуть была активна.
Автор: NIKZZZZ
Дата сообщения: 14.07.2007 09:46
RwR

Цитата:
чтобы только кнопка свернуть была активна.


Код: #include <GUIConstants.au3>
GUICreate("GUI",-1,-1,-1,-1,$WS_CAPTION+$WS_SYSMENU+$WS_MINIMIZEBOX)
GUISetState (@SW_SHOW)

While 1
$msg = GUIGetMsg()
; If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend
Автор: RwR
Дата сообщения: 14.07.2007 09:58
Кнопка закрыть-то всё равно активна. Не работает конечно, но всё-таки.
Автор: ViSiToR
Дата сообщения: 14.07.2007 10:16
RwR

Цитата:
Кнопка закрыть-то всё равно активна

Нету стиля чтобы её скрыть (сам лично все(?) перепробовал), но можно сделать самодельный заголовок + самодельные кнопки, там то и можно с ними делать что угодно (почти ) - Скрывать, деактивировать, уменьшать/увеличивать, добавлять и т.д...

Но есть один минус(?) - Это не будет смотреться так красиво(?) как это смотрится в оригинале .

Если нужно, могу выложить код для ГУИ с примером подобного “фокуса”.
Автор: RwR
Дата сообщения: 14.07.2007 11:05
Выкладуй.
Автор: NIKZZZZ
Дата сообщения: 14.07.2007 11:50
По стилям - $GUI_WS_EX_PARENTDRAG - Позволяет перемещать окно указателем мыши не с помощью заголовка окна, а используя для этого его надписи или изображения.
Не желает работать. Это мой глюк, или ошибка?
Автор: ViSiToR
Дата сообщения: 14.07.2007 16:16
RwR
NIKZZZZ

Вот пример (даже добавил небольшую демонстрацию анимации окон ), изучайте...


Код:
#include <Guiconstants.au3>
Opt("GUIOnEventMode", 1)
Opt("GUICloseOnEsc", 0)

$Gui = GUICreate("", 400, 300, -1, -1, $WS_BORDER+$WS_POPUP)

GUISetOnEvent($GUI_EVENT_CLOSE, "ExitGui")

$Closed_button = GUICtrlCreateButton("X", 377, 4, 18, 18)
GUICtrlSetFont(-1, 10, 700, 0, "Tahoma")
GUICtrlSetOnEvent(-1, "ExitGui")
GUICtrlSetState(-1, $GUI_DISABLE)

$Mim_button = GUICtrlCreateButton("-", 337, 4, 18, 18)
GUICtrlSetFont(-1, 13, 700, 0, "Arial Black")
GUICtrlSetOnEvent(-1, "MimimizeGui")

$Max_button = GUICtrlCreateButton(CHR(152),357,4,18,18)
GUICtrlSetFont(-1, 9, 700, 0, "Tahoma")
GUICtrlSetState(-1, $GUI_DISABLE)

$TitleLabel = GUICtrlCreateLabel("Drag GUI", 5, 5, 325, 18, $SS_CENTER, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetFont(-1, 12, 700, 0, "Courier New")
GUICtrlSetColor(-1, 0xBEFFBE)
GUICtrlSetBkColor(-1, 0x000000)

$Exit = GUICtrlCreateButton("Exit", 320, 260, 60, 20)
GUICtrlSetOnEvent(-1, "ExitGui")

DllCall("User32.dll","long","AnimateWindow","hwnd",$Gui,"long",300,"long",0x10)
GUISetState()

While 1
Sleep(100)
WEnd

Func MimimizeGui()
GUISetState(@SW_MINIMIZE)
EndFunc

Func ExitGui()
DllCall("User32.dll","long","AnimateWindow","hwnd",$Gui,"long",300,"long",0x10+0x10000)
Exit
EndFunc
Автор: RwR
Дата сообщения: 14.07.2007 18:56
Спасибо. изучаю.
Автор: Maza Faka
Дата сообщения: 15.07.2007 07:38
ViSiToR

Код:
$var = DriveGetDrive("CDROM")
For $i = 0 To UBound($var)-1
MsgBox(64, "", $var[$i])
Next
Автор: ViSiToR
Дата сообщения: 15.07.2007 08:03
Maza Faka

Цитата:
Для чего нужен -1 во второй строчке?

Такое ощущение, что ты ищешь быстрые и короткие решения... это хорошо, но как прпвило, быстрые решения, являются неверными решениями .


Цитата:
В принципе работает и без него, но в конце выдаёт сообщение об ошибке.

Парадокс (в утверждении), не правда ли?

“Доктор, мне помогла мазь от чесотки которую вы мне прописали, но знаете, продолжает чесаться”

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

А вообще про это уже спрашивалось пару страниц назад.
Автор: NORIO
Дата сообщения: 15.07.2007 12:38
Нужно сделать окно с фоновым рисунком и прозрачными областями притом что бы можно было перетаскивать окно залюбую его область кроме заголовка которого не будет.
Как это сделать?
Автор: Maza Faka
Дата сообщения: 15.07.2007 13:30
ViSiToR

Цитата:
“Доктор, мне помогла мазь от чесотки которую вы мне прописали, но знаете, продолжает чесаться”

Автор: ViSiToR
Дата сообщения: 15.07.2007 15:43
NORIO

Цитата:
сделать окно с фоновым рисунком и прозрачными областями притом что бы можно было перетаскивать окно залюбую его область кроме заголовка которого не будет


Вот пример где используется распознавание нажатия левой кнопки мышки, и пока она нажата окно перетаскивается (содержимое окна отображается при этом):


Код:
#include <GuiConstants.au3>

$Gui = GuiCreate("Drag Window Demo", 400, 300, -1, -1, $WS_POPUPWINDOW, $WS_EX_DLGMODALFRAME)

$BackPicID = GUICtrlCreatePic("C:\WINDOWS\Штукатурка.bmp", 0, 0, 400, 300)
GUICtrlSetState(-1, $GUI_DISABLE)

$ExitButton = GUICtrlCreateButton("Exit", 20, 270, 70, 20)

GUISetState()

While 1
$Msg = GUIGetMsg()
Switch $Msg
Case -3
Exit
Case $ExitButton
Exit
Case $GUI_EVENT_PRIMARYDOWN
DragWindow($Gui)
EndSwitch
WEnd

Func DragWindow($hWnd)
Local $MousePos = MouseGetPos()
Local $hWndPos = WinGetPos($hWnd)
Local $WinPos[2], $IsPressed[1], $OpenDll, $GuiCurInfo[5]
$WinPos[0] = $MousePos[0]-$hWndPos[0]
$WinPos[1] = $MousePos[1]-$hWndPos[1]
$OpenDll = DllOpen("user32.dll")
$GuiCurInfo = GUIGetCursorInfo($hWnd)
If $OpenDll <> -1 And ($GuiCurInfo[4] = 0 Or $GuiCurInfo[4] = $BackPicID) Then
Do
$hWndPos = MouseGetPos()
WinMove($hWnd, '', $hWndPos[0]-$WinPos[0], $hWndPos[1]-$WinPos[1])
Sleep(20)
$IsPressed = DllCall($OpenDll, "int", "GetAsyncKeyState", "int", '0x01')
Until @error Or BitAND($IsPressed[0], 0x8000) <> 0x8000
EndIf
DllClose($OpenDll)
EndFunc
Автор: Koppew
Дата сообщения: 17.07.2007 13:14
ViSiToR

Цитата:
BitAND($IsPressed[0], 0x8000) <> 0x8000

разве это не тождественно проверке $IsPressed[0] <> 0x8000 ?

Добавлено:
ViSiToR
а вообще хотел поблагодарить за ликбез тема вообще интересная...
Автор: Maza Faka
Дата сообщения: 17.07.2007 13:30
Visitor
Плз, если не трудно, просмотри код, и сообщи где ошибка, скрипт работает (создаёт плейлисты), но почему-то, обрабатывает только 6 каталогов из 35, после чего завершает работу.

Код:
$path = "d:\music"
$search = FileFindFirstFile("d:\music\*.*")
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop
$full_file = $path & "\" & $file
If StringInStr(FileGetAttrib($full_file), "D") > 0 Then
Find_mp3($full_file, $file)
EndIf
WEnd
FileClose($full_file)

Func Find_mp3($full_file, $file)
    $var = FileFindFirstFile($full_file & "\*.*")
While 1
$value = FileFindNextFile($var)
If @error Then ExitLoop
    $value = $full_file & "\" & $value
    If StringInStr(FileGetAttrib($value), "D") > 0 Then Find_mp3($value, $file)
    If StringInStr(StringRight($value, 3), "mp3") > 0 Then
        $list = FileOpen("C:\PlayList\" & $file & ".m3u", 1)
        FileWriteLine($list, $value)
    EndIf
WEnd
FileClose($value)
EndFunc
Автор: Koppew
Дата сообщения: 17.07.2007 13:46
Maza Faka

Цитата:
$file = FileFindNextFile($search)


Цитата:
FileClose($full_file)

а почему Вы закрываете $full_file, а не $file?

Добавлено:

Цитата:
$search = FileFindFirstFile("d:\music\*.*")

тьфу... сам запутался... почему $search не закрываете?

Добавлено:
вот тут было http://forum.ru-board.com/topic.cgi?forum=5&topic=17705&start=160#19

Добавлено:
а вобщем все просто

Цитата:
$list = FileOpen("C:\PlayList\" & $file & ".m3u", 1)
FileWriteLine($list, $value)

и надо лишь закрыть $list
Автор: ViSiToR
Дата сообщения: 17.07.2007 14:39
Koppew

Цитата:
разве это не тождественно проверке $IsPressed[0] <> 0x8000 ?

Нет, это проверяет вхождение 0x8000 в $IsPressed[0], если проверям напрямую то мы как бы проверяем не является ли $IsPressed[0] значением 0x8000, а нам это не нужно.

Maza Faka

Ну во первых это:

Цитата:
почему Вы закрываете $full_file, а не $file? (т.е $search)




А во-вторых, нужно закрывать и после записи в файл ( $list = FileOpen("C:\PlayList\" & $file & ".m3u", 1) - это осталось не закрытым)... ну а втретьих, не рекоммендуется смешивать открытия файлов, поиск и т.п... нужно в цикле предварительно поместить все нужные файлы в массив, потом периберая массив открывать нужные файлы, писать в них, и закрывать....

P.S
В каком редакторе код набираешь?
Если честно очень не удобно обрабатывать такой код, особенно при проверке ошибок, и тем более код не свой
Автор: Koppew
Дата сообщения: 17.07.2007 14:48
ViSiToR

Цитата:
Нет, это проверяет вхождение 0x8000 в $IsPressed[0], если проверям напрямую то мы как бы проверяем не является ли $IsPressed[0] значением 0x8000.

хех... понял.. спасиб

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

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


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