Aleksandr Prilutskiy
Знающий
- Сообщения
- 29
- Репутация
- 9
Приветствую всех! (это моя первая тема на этом форуме, поэтому заранее извиняюсь, если по каким либо причинам я не впишусь в ваше сообщество)
Я занимаюсь AutuIt-ом 4 года. И обнаружил, что при создании любой новой задачи приходится сначала тратить время на создание оболочки программы.
Процесс этот рутинный, и хуже всего то, что часто пока делаешь окошки может потеряться основная идея приложения.
Для решения этой задачи я неоднократно пробовал создавать "шаблоны" программ, на основе которых можно быстро создать новое приложение с привычным интерфейсом и базовыми возможностями.
У меня возникла идея поделиться тем, что у меня получилось. Хотел бы услышать замечания, предложения и пожелания.
Было бы идеально, если бы мы совместно сделали максимально удобный такого рода шаблон для программ.
Вот собственно текст программы:
Краткое описание:
- Программа создает окно со строкой меню (сверху) и строкой состояния (снизу).
- Все пространства окна занимает поле. в которое можно выводить текстовую информацию.
- Через меню можно вызвать окно настроек (тоже в качестве шаблона оно пустое).
- Главное окно и окно настроек после закрытия сохраняют свои положения и при следующем открытии открываются на месте, где были закрыты.
- Добавлена обработка клавиш Esc и Enter для быстрого обращения с окнами.
- Текст программы содержит удобное для меня форматирование и комментарии, на основе которых можно добавлять новые функции.
На основе этого шаблона я быстро создаю новые приложения.
Надеюсь мой опыт может кому нибудь пригодиться.
Я занимаюсь AutuIt-ом 4 года. И обнаружил, что при создании любой новой задачи приходится сначала тратить время на создание оболочки программы.
Процесс этот рутинный, и хуже всего то, что часто пока делаешь окошки может потеряться основная идея приложения.
Для решения этой задачи я неоднократно пробовал создавать "шаблоны" программ, на основе которых можно быстро создать новое приложение с привычным интерфейсом и базовыми возможностями.
У меня возникла идея поделиться тем, что у меня получилось. Хотел бы услышать замечания, предложения и пожелания.
Было бы идеально, если бы мы совместно сделали максимально удобный такого рода шаблон для программ.
Вот собственно текст программы:
Код:
#Region Header
#cs
Title: *
Filename: *.au3
Description: Шаблон для windows-приложения
Author: *
Version: 0.0.1
Date: 11.06.2014
Uses:
#ce
#EndRegion Header
#Region AutoIt3Wrapper directives section
#AutoIt3Wrapper_Icon=Icon.ico
#AutoIt3Wrapper_OutFile=NewApp.exe
#AutoIt3Wrapper_OutFile_Type=exe
#AutoIt3Wrapper_Res_LegalCopyright=*
#AutoIt3Wrapper_Res_Description=*
#AutoIt3Wrapper_Res_Fileversion=0.0.1
#AutoIt3Wrapper_Res_Language=1033
#AutoIt3Wrapper_UseUpx=Y
#AutoIt3Wrapper_UseX64=N
#AutoIt3Wrapper_Version=P
#AutoIt3Wrapper_Compile_both=N
#EndRegion AutoIt3Wrapper directives section
#Region Initialization
#include <Constants.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIEdit.au3>
#include <String.au3>
#include <Array.au3>
Opt("GUIOnEventMode", 1)
Opt("TrayIconHide", 1)
Global $WindowWidth = 600 ; ширина окна программы
Global $WindowHeight = 500 ; высота окна программы
Global $WindowName = "NewApp" ; заголовок окна программы
Global $sIniFileName = @ScriptDir & "\NewApp.ini" ; имя файла конфигурации программы
Global $GUI_WindowMain ; главное окно программы
Global $GUI_EditLog ; журнал событий
Global $GUI_StatusBar ; строка состояния программы
Global $WindowSetupName = "Настройки программы" ; заголовок окна настроек программы
Global $WindowSetupWidth = 450 ; ширина окна настроек программы
Global $WindowSetupHeight = 350 ; высота окна настроек программы
Global $GUI_WindowSetup ; окно настроек программы
CreateGUI()
LoadConfigFile()
Do
Sleep(100)
Until False
#EndRegion Initialization
#Region GUI
;----------------------------------------- НАСТРОЙКА ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА -------------------------------
; #FUNCTION# ====================================================================================================
; Name...........: CreateGUI
; Description....: Создание главного окна программы
; Syntax.........: CreateGUI()
; ===============================================================================================================
Func CreateGUI()
$GUI_WindowMain = GUICreate($WindowName, $WindowWidth, $WindowHeight)
GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")
Local $GUI_MenuItem = GUICtrlCreateMenu("Файл")
GUICtrlSetOnEvent(GUICtrlCreateMenuItem("Настройки", $GUI_MenuItem), "OnSetup")
GUICtrlSetOnEvent(GUICtrlCreateMenuItem("Выход", $GUI_MenuItem), "OnExit")
$GUI_EditLog = GUICtrlCreateEdit("", 5, 5, $WindowWidth - 10, $WindowHeight - 50, Dec("00200000"))
_GUICtrlEdit_SetReadOnly($GUI_EditLog, True)
GUICtrlSetCursor($GUI_EditLog, 2)
; место для добавления новых элементов интерфейса главного окна программы
$GUI_StatusBar = _GUICtrlStatusBar_Create($GUI_WindowMain)
GUISetState()
HotKeySet("{F5}", "Test1")
HotKeySet("{ESC}", "OnExit")
EndFunc ;==>CreateGUI
; #FUNCTION# ====================================================================================================
; Name...........: SaveConfigFile
; Description....: Сохранение настроек программы в файл конфигурации
; Syntax.........: SaveConfigFile()
; ===============================================================================================================
Func SaveConfigFile()
Local $s = WinGetPos($GUI_WindowMain)
If $s[0] > 0 Then IniWrite($sIniFileName, "Window", "Pos_X", $s[0])
If $s[1] > 0 Then IniWrite($sIniFileName, "Window", "Pos_Y", $s[1])
EndFunc ;==>SaveConfigFile
; #FUNCTION# ====================================================================================================
; Name...........: LoadConfigFile
; Description....: Загрузка настроек программы из файла конфигурации
; Syntax.........: LoadConfigFile()
; ===============================================================================================================
Func LoadConfigFile()
Local $x = IniRead($sIniFileName, "Window", "Pos_X", 0)
Local $y = IniRead($sIniFileName, "Window", "Pos_Y", 0)
If $x > 0 And $y > 0 Then WinMove("[TITLE:" & $WindowName & "]", "", $x, $y)
EndFunc ;==>LoadConfigFile
; #FUNCTION# ====================================================================================================
; Name...........: OnExit
; Description....: Выход из программы или прерывание загрузки файла
; Syntax.........: OnExit()
; ===============================================================================================================
Func OnExit()
SaveConfigFile()
GUIDelete()
Exit
EndFunc ;==>OnExit
; #FUNCTION# ====================================================================================================
; Name...........: _LogWrire
; Description....: Добавление строки в журнал событий
; Syntax.........: _LogWrire($Text)
; Parameters.....: $Text - Строка, для добавления в журнал событий
; ===============================================================================================================
Func _LogWrire($Text)
_GUICtrlEdit_AppendText($GUI_EditLog, $Text)
EndFunc ;==>_LogWrire
; #FUNCTION# ====================================================================================================
; Name...........: _LogWrireLn
; Description....: Добавление строки в журнал событий с переводом строки
; Syntax.........: _LogWrireLn($Text)
; Parameters.....: $Text - Строка, для добавления в журнал событий
; ===============================================================================================================
Func _LogWrireLn($Text)
_LogWrire($Text & @CRLF)
EndFunc ;==>_LogWrireLn
#EndRegion GUI
#Region Setup
;-------------------------------------- ФУНКЦИИ РАБОТЫ С ОКНОМ НАСТРОЙКИ ПРОГРАММЫ ------------------------------
; #FUNCTION# ====================================================================================================
; Name...........: OnSetup
; Description....: Создание окна настроек программы
; Syntax.........: OnSetup()
; ===============================================================================================================
Func OnSetup()
Local $s = "[TITLE:" & $WindowSetupName & "]"
If WinExists($s) Then Return WinActivate($s)
$s = WinGetPos($GUI_WindowMain)
Local $x = IniRead($sIniFileName, "Setup", "Pos_X", $s[0] + ($WindowWidth - $WindowSetupWidth) / 2)
Local $y = IniRead($sIniFileName, "Setup", "Pos_Y", $s[1] + ($WindowHeight - $WindowSetupHeight) / 2)
$GUI_WindowSetup = GUICreate($WindowSetupName, $WindowSetupWidth, $WindowSetupHeight, $x, $y, _
BitOR($WS_BORDER, $WS_CLIPSIBLINGS, $DS_SETFOREGROUND, $WS_CAPTION, $DS_MODALFRAME))
; место для добавления новых элементов интерфейса окна настроек программы
GUICtrlSetOnEvent(GUICtrlCreateButton("Сохранить", $WindowSetupWidth / 2 - 155, _
$WindowSetupHeight - 40, 150, 30), "OnSetupSave")
GUICtrlSetOnEvent(GUICtrlCreateButton("Отменить", $WindowSetupWidth / 2 + 5, _
$WindowSetupHeight - 40, 150, 30), "OnSetupExit")
GUISetState()
HotKeySet("{ENTER}", "OnSetupSave")
HotKeySet("{ESC}", "OnSetupExit")
EndFunc ;==>OnSetup
; #FUNCTION# ====================================================================================================
; Name...........: OnSetupSave
; Description....: Сохранение настроек программы
; Syntax.........: OnSetupSave()
;
; Remarks .......: Обработка нажатия кнопки "Сохранить" в окне настроек программы
; ===============================================================================================================
Func OnSetupSave()
OnSetupExit()
EndFunc ;==>OnSetupSave
; #FUNCTION# ====================================================================================================
; Name...........: OnSetupExit
; Description....: Закрытие окна настроек программы
; Syntax.........: OnSetupExit()
;
; Remarks .......: Обработка нажатия кнопки "Отменить" в окне настроек программы
; ===============================================================================================================
Func OnSetupExit()
Local $s = WinGetPos($GUI_WindowSetup)
If $s[0] > 0 Then IniWrite($sIniFileName, "Setup", "Pos_X", $s[0])
If $s[1] > 0 Then IniWrite($sIniFileName, "Setup", "Pos_Y", $s[1])
GUIDelete($GUI_WindowSetup)
HotKeySet("{ENTER}")
HotKeySet("{ESC}", "OnExit")
EndFunc ;==>OnSetupExit
#EndRegion Setup
; #FUNCTION# ====================================================================================================
; Name...........: .
; Description....: Шаблон новой функции
; Syntax.........: .
; Return values..: Success - .
; Failure - .
; Remarks .......: .
; ===============================================================================================================
Func Test1()
_LogWrireLn("OK")
EndFunc ;==>Test1
Краткое описание:
- Программа создает окно со строкой меню (сверху) и строкой состояния (снизу).
- Все пространства окна занимает поле. в которое можно выводить текстовую информацию.
- Через меню можно вызвать окно настроек (тоже в качестве шаблона оно пустое).
- Главное окно и окно настроек после закрытия сохраняют свои положения и при следующем открытии открываются на месте, где были закрыты.
- Добавлена обработка клавиш Esc и Enter для быстрого обращения с окнами.
- Текст программы содержит удобное для меня форматирование и комментарии, на основе которых можно добавлять новые функции.
На основе этого шаблона я быстро создаю новые приложения.
Надеюсь мой опыт может кому нибудь пригодиться.