Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » События OnMouseOver / OnMouseClick + вопрос во созданию установщика

Ответить
Настройки темы
События OnMouseOver / OnMouseClick + вопрос во созданию установщика

Аватара для 0xDEADBEEF

Новый участник


Сообщения: 9
Благодарности: 1

Профиль | Отправить PM | Цитировать


Здравствуйте.
Решил сделать инсталлер для игрушки, есть несколько вопросов:
1. Не могу понять как отловить события onMouseOver и onMouseClick - хочу сделать смену картинок при наведении/отведении мыши и при клике. В справке не нашел.
2. Создаю бэкграунд инсталлера:
Код: Выделить весь код
$Pic1 = GUICtrlCreatePic("С:\installer\files\installer_background.jpg", 0, 0, 640, 480)
Затем, добавляю кнопку "Установить" (картинка):
Код: Выделить весь код
$Pic2 = GUICtrlCreatePic("G:\installer\files\install_button.jpg", 144, 168, 358, 59)
Затем, отлов нажатий на кнопку и кнопку выхода:
Код: Выделить весь код
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		
		Case $Pic2
			Run("install.exe")
	EndSwitch
WEnd
Проблема в том, что с картинкой бэкграунда событие почему-то не происходит - кликаю, кликаю, результата нет. Убираю бэкграунд, Case отрабатывает. Как эту неприятность можно обойти?

3. Не хватает идей для создания формы установщика. Точнее, как её отобразить - ну как в обычных инсталляторах - "Выберите путь" -> "Далее" -> (уже новая страница) "Создавать ярлыки" и т.п. Можете направить в правильную сторону?

4. AutoIt умеет работать с архивами (интересует распаковка)?

Буду рад, если поможете советами хотя бы на один вопрос

Отправлено: 22:26, 06-08-2009

 

Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


4.

Код: Выделить весь код
#include <Process.au3>

$NameArx = "Data.rar" ; Aрхив
$NameOut = @ProgramsDir & "\" ; Путь для распаковки

FileInstall("Rar.exe", @TempDir & "\Rar.exe", 1) ; Файл Rar.exe в должен быть в паке со скриптом (украдёш из WinRar`a)
$RunDos = _RunDOS(@TempDir & '\' & 'Rar.exe x -Y ' & @ScriptDir & "\" & StringLeft($NameArx, StringLen($NameArx) - 4) & ' *.* ' & $NameOut)

If $RunDos > 0 Then
    MsgBox(16, "Сообщение WinRar", "Распаковка архива" & $NameArx & @CRLF & _ReturnErrorWinRar($RunDos))
    Exit
EndIf

Func _ReturnErrorWinRar($Error = "x") ; Функция для возврата кодов ошибок.

    Switch $Error
        Case 0
            Return "Операция успешно завершена."
        Case 1
            Return "Предупреждение. Произошли некритические ошибки."
        Case 2
            Return "Произошла критическая ошибка."
        Case 3
            Return "При распаковке обнаружена ошибка CRC."
        Case 4
            Return "Предпринята попытка изменить заблокированный архив."
        Case 5
            Return "Произошла ошибка записи на диск."
        Case 6
            Return "Произошла ошибка открытия файла."
        Case 7
            Return "Ошибка при указании параметра в командной строке."
        Case 8
            Return "Недостаточно памяти для выполнения операции."
        Case 9
            Return "Ошибка при создании файла."
        Case 255
            Return "Операция была прервана пользователем."
    EndSwitch

EndFunc   ;==>_ReturnErrorWinRar
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:06, 07-08-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Medic84

$AutoITer


Автор проектов


Сообщения: 446
Благодарности: 44

Профиль | Отправить PM | Цитировать


Вот тебе в помощь Wizard написанный Creator'ом (Извини раскрашенный не вмещается)

Код: Выделить весь код
#include <GuiConstantsEx.au3> 
#include <WindowsConstants.au3> 
#include <StaticConstants.au3> 
#include <EditConstants.au3> 
 
; Устанавливаем иконки 
;Используются системные 
;FileInstall("Resources\Ok.ico", "Ok.ico") 
;FileInstall("Resources\NotOk.ico", "NotOk.ico") 
 
;Рисуем главное окно 
$Main_GUI = GUICreate("Мастер создания настроек", 500, 360, (@DesktopWidth - 500) / 2, (@DesktopHeight - 300) / 2) 
_GUICtrlCreateSeperator(0, 2, 320, 3, 496) 
; Рисуем кнопки 
$Back_Button = GUICtrlCreateButton("< Назад", 240, 327, 80) 
GUICtrlSetState(-1, $GUI_DISABLE) 
$Next_Button = GUICtrlCreateButton("Далее >", 320, 327, 80) 
$Exit_Button = GUICtrlCreateButton("Выход", 410, 327, 80) 
 
;Рисуем первый диалог мастера 
$ChildGui_1 = GUICreate("", 493, 300, 1, 1, $WS_POPUP) 
DllCall("user32.dll", "int", "SetParent", "hwnd", $ChildGui_1, "hwnd", $Main_GUI) ; помещаем диалог в главное окно 
$Label1_1_1 = GUICtrlCreateLabel("Этот мастер создания настроек последовательно проведет Вас через все шаги создания нового Интернет-чемпионата по деловой игре ""Никсдорф-Дельта"".", 30, 50, 450, 34) 
$Label1_1_2 = GUICtrlCreateLabel("Вы всегда можете вызвать справку в любом диалоге, нажав F1", 30, 84, 450, 17) 
 
;Рисуем второй диалог мастера 
$ChildGui_2 = GUICreate("", 493, 300, 1, 1, $WS_POPUP) 
DllCall("user32.dll", "int", "SetParent", "hwnd", $ChildGui_2, "hwnd", $Main_GUI) ; помещаем диалог в главное окно 
$Label2_1_1 = GUICtrlCreateLabel("Шаг 1/10: Общие настройки", 24, 8, 147, 17) 
$Group2_2_1 = GUICtrlCreateGroup("Приветствие", 32, 32, 455, 41) 
$Checkbox2_2_1 = GUICtrlCreateCheckbox("Выводить приветствие AutoSend&&Get при запуске", 48, 48, 273, 17, $WS_TABSTOP) 
GUICtrlCreateGroup("", -99, -99, 1, 1) 
$Group2_3_1 = GUICtrlCreateGroup("Название чемпионата", 32, 80, 455, 41) 
$Label2_3_1 = GUICtrlCreateLabel("Введите название чемпионата:", 48, 100, 163, 17) 
$Input2_3_1 = GUICtrlCreateInput("Грейт-4", 210, 96, 113, 21, $WS_TABSTOP) 
$Icon_2_3_1 = GUICtrlCreateIcon("inetcpl.cpl", -23, 435, 98, 15, 15) 
$Icon_2_3_2 = GUICtrlCreateIcon("inetcpl.cpl", -22, 450, 90, 25, 25) 
GUICtrlCreateGroup("", -99, -99, 1, 1) 
$Group2_4_1 = GUICtrlCreateGroup("E-mail", 32, 128, 455, 68) 
$Label2_4_1 = GUICtrlCreateLabel("Введите адрес основного ящика, через который Вы будете общаться с участниками. Внимание! Именно ящик для живого общения, а не для рассылки архивов.", 48, 140, 436, 27) 
$Input2_4_1 = GUICtrlCreateInput("delta-greit@yandex.ru", 280, 170, 150, 21, $WS_TABSTOP) 
$Icon_2_4_1 = GUICtrlCreateIcon("inetcpl.cpl", -23, 435, 173, 15, 15) 
$Icon_2_4_2 = GUICtrlCreateIcon("inetcpl.cpl", -22, 450, 165, 25, 25) 
GUICtrlCreateGroup("", -99, -99, 1, 1) 
$Group2_5_1 = GUICtrlCreateGroup("Форум", 32, 200, 455, 53) 
$Label2_5_1 = GUICtrlCreateLabel("Введите номер топика Вашего турнира на форуме:", 48, 215, 260, 17) 
$Label2_5_2 = GUICtrlCreateLabel("http://deltaon.ucoz.ru/forum/2-", 49, 230, 149, 17) 
$Input2_5_1 = GUICtrlCreateInput("20", 200, 227, 25, 21, $WS_TABSTOP) 
$Icon_2_5_1 = GUICtrlCreateIcon("inetcpl.cpl", -23, 435, 228, 15, 15) 
$Icon_2_5_2 = GUICtrlCreateIcon("inetcpl.cpl", -22, 450, 220, 25, 25) 
GUICtrlCreateGroup("", -99, -99, 1, 1) 
$Group2_6_1 = GUICtrlCreateGroup("Периоды", 32, 257, 455, 41) 
$Label2_6_1 = GUICtrlCreateLabel("Введите количество периодов (от 1 до 20):", 48, 275, 220, 17) 
$InputGui_2_6_1 = GUICtrlCreateInput("12", 265, 273, 34, 17) 
$UpDownGui_2_6_1 = GUICtrlCreateUpdown($InputGui_2_6_1) 
GUICtrlSetLimit(-1, 20, 1) 
$Icon_2_6_1 = GUICtrlCreateIcon("inetcpl.cpl", -23, 435, 275, 15, 15) 
$Icon_2_6_2 = GUICtrlCreateIcon("inetcpl.cpl", -22, 450, 267, 25, 25) 
GUICtrlCreateGroup("", -99, -99, 1, 1) 
 
;Рисуем третий диалог мастера 
$ChildGui_3 = GUICreate("", 493, 300, 1, 1, $WS_POPUP) 
DllCall("user32.dll", "int", "SetParent", "hwnd", $ChildGui_3, "hwnd", $Main_GUI) ; помещаем диалог в главное окно 
$Label3_1_1 = GUICtrlCreateLabel("Шаг 2/10: Настройка исходящих писем", 24, 8, 200, 17) 
 
$Group3_2_1 = GUICtrlCreateGroup("Создание текстов писем", 32, 32, 455, 120) 
$Checkbox3_2_1 = GUICtrlCreateCheckbox("Использовать шаблоны", 48, 50, 140, 17) 
GUICtrlSetState(-1, $GUI_CHECKED) 
$Button3_2_1 = GUICtrlCreateButton("Пример", 320, 48, 60, 20) 
$Checkbox3_2_2 = GUICtrlCreateCheckbox("Использовать обычный шаблон", 62, 75, 180, 17) 
GUICtrlSetState(-1, $GUI_CHECKED) 
$Button3_2_2 = GUICtrlCreateButton("Указать", 320, 73, 60, 20) 
;GUICtrlSetState (-1, $GUI_DISABLE) 
$Button3_2_5 = GUICtrlCreateButton("Редактировать", 390, 73, 90, 20) 
$Checkbox3_2_3 = GUICtrlCreateCheckbox("Использовать шаблон выходного дня", 62, 100, 210, 17) 
GUICtrlSetState(-1, $GUI_CHECKED) 
$Button3_2_3 = GUICtrlCreateButton("Указать", 320, 98, 60, 20) 
$Button3_2_6 = GUICtrlCreateButton("Редактировать", 390, 98, 90, 20) 
$Checkbox3_2_4 = GUICtrlCreateCheckbox("Использовать шаблон последнего периода", 62, 125, 240, 17) 
GUICtrlSetState(-1, $GUI_CHECKED) 
$Button3_2_4 = GUICtrlCreateButton("Указать", 320, 123, 60, 20) 
$Button3_2_7 = GUICtrlCreateButton("Редактировать", 390, 123, 90, 20) 
GUICtrlCreateGroup("", -99, -99, 1, 1) 
 
$Group3_3_1 = GUICtrlCreateGroup("Тексты писем и архивы", 32, 217, 455, 78) 
$Checkbox3_3_1 = GUICtrlCreateCheckbox("Сохранять отправленные", 48, 233, 145, 17) 
GUICtrlSetState(-1, $GUI_CHECKED) 
$Button3_3_1 = GUICtrlCreateButton("Выбрать папку", 200, 230, 85, 25, 0) 
$Label3_3_1 = GUICtrlCreateLabel("Текущая папка: ", 48, 250, 90, 17) 
If Not IsDeclared("save_path") Then $save_path = @ScriptDir & "\to_send" 
$Label3_3_2 = GUICtrlCreateLabel($save_path, 48, 265, 435, 25) 
GUICtrlSetColor(-1, 0x335EA8) 
GUICtrlCreateGroup("", -99, -99, 1, 1) 
 
_CheckInputsProc() 
 
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") 
 
;Выводим окна на экран 
GUISetState(@SW_SHOW, $Main_GUI) 
GUISetState(@SW_SHOW, $ChildGui_1) 
GUISetState(@SW_HIDE, $ChildGui_2) 
GUISetState(@SW_HIDE, $ChildGui_3) 
 
While 1 
    $Msg = GUIGetMsg(1) 
 
    Switch $Msg[0] 
        Case $GUI_EVENT_CLOSE, $Exit_Button 
            If Not _WinIsVisible($ChildGui_1) Then 
                $Ask = MsgBox(4096+36, "Attention", "Are you sure you want to exit the Wizard now?", 0, $Msg[1]) 
                If $Ask <> 6 Then ContinueLoop 
            EndIf 
 
            If $Msg[1] = $Main_GUI Then Exit 
        Case $Next_Button 
            GUICtrlSetState($Back_Button, $GUI_ENABLE) 
 
            Local $CurrentHandle = 0 
            Local $NextHandle = 0 
 
            Select 
                Case _WinIsVisible($ChildGui_1) 
                    $CurrentHandle = $ChildGui_1 
                    $NextHandle = $ChildGui_2 
                    _CheckInputsProc(1) 
                Case _WinIsVisible($ChildGui_2) 
                    $CurrentHandle = $ChildGui_2 
                    $NextHandle = $ChildGui_3 
                    GUICtrlSetState($Next_Button, $GUI_DISABLE) 
            EndSelect 
 
            If $CurrentHandle <> 0 Then 
                GUISetState(@SW_HIDE, $CurrentHandle) 
                GUISetState(@SW_SHOW, $NextHandle) 
            EndIf 
 
            WinActivate($Main_GUI) 
        Case $Back_Button 
            GUICtrlSetState($Next_Button, $GUI_ENABLE) 
 
            Local $CurrentHandle = 0 
            Local $BackHandle = 0 
 
            Select 
                Case _WinIsVisible($ChildGui_3) 
                    $CurrentHandle = $ChildGui_3 
                    $BackHandle = $ChildGui_2 
                Case _WinIsVisible($ChildGui_2) 
                    $CurrentHandle = $ChildGui_2 
                    $BackHandle = $ChildGui_1 
                    GUICtrlSetState($Back_Button, $GUI_DISABLE) 
            EndSelect 
 
            If $CurrentHandle <> 0 Then 
                GUISetState(@SW_HIDE, $CurrentHandle) 
                GUISetState(@SW_SHOW, $BackHandle) 
            EndIf 
 
            WinActivate($Main_GUI) 
    EndSwitch 
WEnd 
 
Func _GUICtrlCreateSeperator($Direction, $Left, $Top, $Width = 3, $Lenght = 25) 
    Switch $Direction 
        Case 0 
            GUICtrlCreateLabel("", $Left, $Top, $Lenght, $Width, $SS_SUNKEN) 
        Case 1 
            GUICtrlCreateLabel("", $Left, $Top, $Width, $Lenght, $SS_SUNKEN) 
    EndSwitch 
EndFunc   ;==>_GUICtrlCreateSeperator 
 
Func _WinIsVisible($hWnd) 
    Return BitAND(WinGetState($hWnd), 2) 
EndFunc   ;==>_WinIsVisible 
 
Func _CheckInputsProc($iCheckNextButton=0) 
    Local $iNextButtonState = $GUI_ENABLE 
 
    If GUICtrlRead($Input2_3_1) = "" Then 
        _GUICtrlSetState($Icon_2_3_1, $GUI_SHOW) 
        _GUICtrlSetState($Icon_2_3_2, $GUI_HIDE) 
 
        $iNextButtonState = $GUI_DISABLE 
    Else 
        _GUICtrlSetState($Icon_2_3_1, $GUI_HIDE) 
        _GUICtrlSetState($Icon_2_3_2, $GUI_SHOW) 
    EndIf 
 
    If GUICtrlRead($Input2_4_1) = "" Then 
        _GUICtrlSetState($Icon_2_4_1, $GUI_SHOW) 
        _GUICtrlSetState($Icon_2_4_2, $GUI_HIDE) 
 
        $iNextButtonState = $GUI_DISABLE 
    Else 
        _GUICtrlSetState($Icon_2_4_1, $GUI_HIDE) 
        _GUICtrlSetState($Icon_2_4_2, $GUI_SHOW) 
    EndIf 
 
    If GUICtrlRead($Input2_5_1) = "" Then 
        _GUICtrlSetState($Icon_2_5_1, $GUI_SHOW) 
        _GUICtrlSetState($Icon_2_5_2, $GUI_HIDE) 
 
        $iNextButtonState = $GUI_DISABLE 
    Else 
        _GUICtrlSetState($Icon_2_5_1, $GUI_HIDE) 
        _GUICtrlSetState($Icon_2_5_2, $GUI_SHOW) 
    EndIf 
 
    If GUICtrlRead($InputGui_2_6_1) <> 12 Then 
        _GUICtrlSetState($Icon_2_6_1, $GUI_SHOW) 
        _GUICtrlSetState($Icon_2_6_2, $GUI_HIDE) 
 
        $iNextButtonState = $GUI_DISABLE 
    Else 
        _GUICtrlSetState($Icon_2_6_1, $GUI_HIDE) 
        _GUICtrlSetState($Icon_2_6_2, $GUI_SHOW) 
    EndIf 
 
    If $iCheckNextButton Then _GUICtrlSetState($Next_Button, $iNextButtonState) 
EndFunc   ;==>_CheckInputsProc 
 
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 
            _CheckInputsProc(1) 
    EndSwitch 
 
    Return $GUI_RUNDEFMSG 
EndFunc   ;==>WM_COMMAND 
 
Func _GUICtrlSetState($nCtrl, $iState) 
    If BitAND(GUICtrlGetState($nCtrl), $iState) <> $iState Then GUICtrlSetState($nCtrl, $iState) 
EndFunc
Вот ссылка откуда взято(там далее есть наработки еще)

-------

AutoIT Русское сообщество| Моя лаборатория

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:18, 07-08-2009 | #3


Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


А если сделать Inno Setup , то всё гораздо проще, там даже есть мастер создания инсталяторов ...

Отправлено: 15:34, 07-08-2009 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » События OnMouseOver / OnMouseClick + вопрос во созданию установщика

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
EventID - Уведомление Ист. события: HHCTRL Категория события: Отсутствует. Код события: 1903 cleric1985_n Устранение критических ошибок Windows 7 27-11-2015 16:14
Вопрос по созданию 7z SFX архива aka Nemesis Автоматическая установка приложений 6 04-01-2012 16:43
вопрос по созданию леса ? Alexir Microsoft Windows NT/2000/2003 0 04-10-2007 15:27
Вопрос по созданию форм [mzd] Программирование и базы данных 2 11-02-2004 13:51
У меня вопрос по созданию профиля. SergeyP Microsoft Windows 95/98/Me (архив) 1 04-10-2002 14:00




 
Переход