Яндекс.Метрика

GUI -Autohotkey

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

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

GUI, sub-command [, Param2, Param3, Param4]

Содержание

Add, ControlType [, Options, Text]

Добавляет в родительское окно элемент управления (при необходимости первоначально создав родительское окно).

ControlType может быть следующим: Text, Edit, UpDown, Picture, Button, Checkbox, Radio, DropDownList, ComboBox, ListBox, ListView, Hotkey, DateTime, MonthCal, Slider, Progress, GroupBox, Tab.

Пример:

Gui, Add, Text,, Пожалуйста, введите ваше имя: Gui, Add, Edit, vName Gui, Show

Show [, Options, Title]

Если в Options не определено иначе, данная команда делает окно видимым, отменяет его минимизацию (при необходимости), активирует его и задает заголовок. Если опущен параметр Title, сохраняется предыдущий заголовок окна (если заголовка не было, используется имя файла скрипта).

Чтобы сохранить предыдущий размер и позицию окна, опустите опции X, Y, W и H (см. ниже). Если предыдущей позиции нет, окно будет выровнено по центру по одной или обеим координатам, если опции X и/или Y, о которых говорится ниже, отсутствуют. Если нет предыдущего размера, окно будет выровнено по центру в соответствии с размером и позициями содержащихся в окне элементов управления.

Параметр Options может содержать ни одной или несколько строк из приведенных ниже:

  • Wn: определяет ширину n рабочей области окна, исключая строку заголовка, строку меню и границы окна.
  • Hn: определяет высоту n рабочей области окна.

Примечание: при изменении размера окна, которое возможно до этого было минимизировано или увеличено до максимального размера, включите в число опций Restore или NoActivate, чтобы обеспечить правильное поведение команды. Например:

Gui, Show, Restore w300 h200
  • Xn: определяет X-позицию (n) окна на экране.
  • Yn: определяет Y-позицию (n) окна на экране.
  • Center: выравнивает окно по центру экрана по горизонтали и вертикали.
  • xCenter: выравнивает окно по центру экрана по горизонтали. Например:
    Gui, Show, xCenter y0
  • yCenter: выравнивает окно по центру экрана по вертикали.
  • AutoSize: изменяет размер окна в соответствии с видимыми в данный момент элементами управления. Полезно изменять размер окна после добавления новых элементов управления или после того, как был изменен размер уже существующих элементов, они были скрыты или скрытые элементы были показаны. Например:
    Gui, Show, AutoSize Center

В версиях от 1.0.25.13 и выше может также присутствовать один из следующих параметров:

  • Minimize: минимизирует окно и активирует находящееся под ним другое окно.
  • Maximize: увеличивает до максимального размера и активирует окно.
  • Restore: при необходимости отменяет минимизацию окна или его увеличение до максимального размера. Также при необходимости делает окно видимым и активирует его.
  • NoActivate: при необходимости отменяет минимизацию окна или его увеличение до максимального размера. Также делает окно видимым, при этом не активируя его.
  • NA: делает окно видимым, не активируя его. Если окно минимизировано, оно останется в том же виде, но, возможно, поднимется выше по порядку в Z-последовательности, что можно будет увидеть в alt-tab меню (alt-tab selector). Если окно было ранее скрыто, оно, возможно, появится поверх активного окна, которое при этом останется активным.
  • Hide: скрывает окно и активирует окно, находящееся под ним. Функционально этот параметр аналогичен Gui Cancel, отличаясь только тем, что позволяет перемещать, изменять размер и переименовывать скрытое окно, не делая его видимым. Например:
    Gui, Show, Hide x55 y66 w300 h200, Новый заголовок

Submit [, NoHide]

Сохраняет содержимое каждого элемента управления в ассоциированную переменную (если таковая существует) и, если не присутствует слово NoHide, скрывает окно. Для элементов управления, которые создают множественные поля вывода, такие, как multi-select ListBox, выходные данные используют текущий символ разделителя. Если окно не существует – т.к. оно, возможно, было удалено с помощью команды Gui Destroy – данная команда не работает.

Cancel

Скрывает окно, не сохраняя содержимое элементов управления в ассоциированные переменные. Если окно не существует - т.к. оно, возможно, было удалено с помощью команды Gui Destroy – данная команда не работает.

Destroy

Удаляет окно (если оно существует) и все его элементы управления, освобождая память и системные ресурсы. Если данная команда не используется, то после того, как скрипт завершает работу, все окна GUI удаляются автоматически.

Font [, Options, FontName]

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

Чтобы снова установить такой же тип, размер и цвет шрифта, как в системном шрифте GUI, принятом по умолчанию, опустите оба параметра.

Параметром FontName может быть имя любого шрифта из таблицы шрифтов, приведенной здесь в оригинале статьи. Если параметр FontName опущен или указанный шрифт не существует в системе, будет использован предыдущий тип шрифта (в отсутствии такового, будет использован системный тип шрифта GUI по умолчанию). Это полезно для того, чтобы у окна GUI был одинаковый шрифт в разных системах, даже если в некоторых из них нет предпочтительного шрифта. Например, при использовании команд, приведенных ниже по порядку, шрифту Verdana будет отдано предпочтение перед Arial, которому, в свою очередь будет отдано предпочтение перед шрифтом MS sans serif:

gui, font,, MS sans serif gui, font,, Arial gui, font,, Verdana ; Предпочтительный шрифт.

Если параметр Options пуст, будут использоваться предыдущие атрибуты шрифта. Иначе, определите в качестве замены одну или несколько опций, приведенных выше:

  • C: название цвета (см. таблицу цветов здесь в оригинале статьи), значение RGB (красный-зеленый-синий) или слово Default, чтобы вернуть системный цвет по умолчанию (в большинстве систем - черный). Примеры значений: cRed, cFFFFAA, cDefault. Примечание: цвета кнопок (Buttons) не подлежат настройке. Также, добавив опцию C, можно создать единичный элемент управления, цвет которого отличается от текущего. Например:
    Gui, Add, Text, cRed, Мой текст
  • S: размер (в точках). Например: s10.
  • W: насыщенность (жирность). Может быть от 1 до 1000 (400 – нормальный шрифт, 700 -полужирный). Например: w600.

Также поддерживаются следующие слова: bold, italic, strike, underline и norm. Norm возвращает шрифт нормальной насыщенности/жирности и выключает курсив (italic), зачеркивание (strike) и подчеркивание (underline), однако сохраняет существующие цвет и размер. Можно использовать norm, чтобы выключить все атрибуты, и затем выборочно включить другие. Например, если задать norm italic, будет установлен сначала нормальный шрифт, а затем курсив.

Чтобы определить несколько опций, поставьте между каждой опцией пробел. Например: cBlue s12 bold.

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

Color [, WindowColor, ControlColor]

Задает цвет фона окна и его элементов управления. Параметр WindowColor используется в качестве фона родительского окна. Параметр ControlColor применяется ко всем существующим и созданным позже элементам управления окна (за исключением нескольких типов, не поддерживающих настройку цвета). Хотя элементы ListView первоначально подчиняются параметру ControlColor, последующие изменения параметра ControlColor их не затрагивают. Чтобы напрямую изменить цвет ListView, используйте

GuiControl +BackgroundFF9977, MyListView

Чтобы сохранить текущий цвет, оставьте нужный параметр пустым. Иначе, задайте один из 16 основных названий цветов HTML или шестизначное значение цвета RGB (префикс 0x - опциональный), или задайте слово Default, чтобы указать в нужном параметре цвет по умолчанию. Примеры значений: Silver, FFFFAA, 0xFFFFAA, Default.

По умолчанию, цветом фона окна является системный цвет лицевой поверхности кнопок, а цветом фона элементов управления – системный цвет окна по умолчанию (обычно белый).

Цвет строки меню и подменю можно изменить, как показано в примере:

Menu, MyMenuBar, Color, White

Чтобы в Windows 2000/XP и выше сделать фон прозрачным, используйте WinSet TransColor. Однако, если вы перед этим не настроите окно с помощью "Gui, Color", кнопки также станут прозрачными. Чтобы избежать этого, сначала задайте собственный цвет, а уже затем сделайте его прозрачным. Например:

Gui, Color, EEAA99 Gui, +Lastfound ; Делаем окно GUI "последним найденным" окном. WinSet, TransColor, EEAA99

Чтобы дополнительно удалить из окна с прозрачным фоном границу и строку заголовка, после того, как вы сделали окно прозрачным, используйте следующее:

Gui, -Caption ; или "Gui, 2:-Caption", если это второе окно и т.д.

В конце данной статьи приведен пример отображения выполняемых функций на экране (on-screen display), иллюстрирующий все вышесказанное.

Margin [, X, Y] [v1.0.33.01+]

Параметры X и Y задают интервал (в пикселях), который будет оставлен у левой/правой и верхней/нижней границы окна при автоматическом размещении любого элемента управления, не имеющего явных X или Y координат. То есть, поля используются для того, чтобы определить вертикальное и горизонтальное расстояние, разделяющее автоматически располагаемые элементы управления друг от друга. И наконец, поля принимаются во внимание при первом использовании команды Gui Show для расчета размера окна (если размер не был прямо определен).

Если данная команда не используется при добавлении в окно первого элемента управления, у всех границ окна устанавливается поле по умолчанию, пропорциональное размеру текущего шрифта (0.75 высоты шрифта для верха и низа, и 1.25 высоты шрифта для левой и правой стороны).

Хотя поле можно изменить в процессе добавления элементов управления, изменение затронет только те элементы управления, которые будут добавлены, а не уже существующие. И, наконец, можно оставить какой-нибудь из параметров (X или Y) пустым, чтобы соответствующее поле осталось без изменений.

+/-Option1 +/-Option2 ...

Сразу же после команды GUI можно задать одну или несколько опций. Из соображений производительности, лучше задавать опции перед созданием окна, т.е. перед использованием других подкоманд, таких, как "Gui Add".

Действие этой команды накопительное, т.е. она изменяет только явно определенные настройки, оставляя все другие неизменными.

Задайте знак плюс, чтобы добавить опцию и минус, чтобы ее удалить. Например:

Gui, -resize +owner ; Изменяет текущее/по умолчанию окно GUI. Gui, 2:-resize +owner ; Изменяет второе окно GUI.

AlwaysOnTop [v1.0.25.13+]: ставит окно поверх всех других окон (аналогично команде "WinSet AlwaysOnTop").

Border: предусматривает вокруг окна границу в виде тонкой линии. Используется редко.

Caption: предусматривает строку заголовка и границу/край в виде толстой линии (по умолчанию). Удаляйте заголовок окна, которое будет использовать команду WinSet TransColor, только после того, как задали TransColor.

Delimiter [v1.0.36+]: определяет использование окном разделителя поля, а не символа конвейера (|), в тех случаях, когда содержимое элемента управления добавляется с помощью команды Gui Add, изменяется с помощью команды GuiControl или извлекается с помощью команд Gui Submit или GuiControlGet. Задайте один символ сразу же после слова Delimiter. Например, Gui +Delimiter`n использует символ перевода строки, что может особенно подойти в секциях продолжения (continuation sections). Подобным образом, Gui +Delimiter| возвращает к разделителю по умолчанию. Чтобы использовать пробел или табуляцию, задайте Gui +DelimiterSpace или Gui +DelimiterTab. Как только разделитель изменен, он воздействует на все существующие и последующие потоки, работающие с данным окном.

Disabled [v1.0.25.13+]: блокирует окно, тем самым не давая пользователю взаимодействовать с элементами управления окна. Часто используется с окном, которое владеет другими окнами (см. Owner).

LastFound [v1.0.25.13+]: Делает окно последним найденным окном (last found window), позволяя таким командам, как WinSet работать с ним, даже если окно скрыто (т.е. команда DetectHiddenWindows не нужна). Опция особенно полезна для того, чтобы изменить свойства окна перед тем, как его показать. Например:

Gui, +LastFound WinSet, TransColor, %CustomColor% 150 Gui, Show

MaximizeBox: разрешает кнопку максимизации в строке заголовка. Также используется как часть опции Resize (см. ниже).

MinimizeBox: разрешает кнопку минимизации в строке заголовка (по умолчанию).

OwnDialogs [v1.0.35.01+]: команда Gui +OwnDialogs должна быть задана в каждом потоке (таком, как например, подпрограмма кнопки OK), в котором последовательно отображаемые диалоги MsgBox, InputBox, FileSelectFile и FileSelectFolder должны принадлежать окну. Такие диалоги становятся модальными, что означает, что пользователь не может взаимодействовать с окном GUI до закрытия диалога. И напротив, окна ToolTip, Progress и SplashImage не будут модальными, даже если они станут зависимыми (owned), они просто будут всегда оставаться поверх своего окна-владельца. В любом случае, каждый зависимый диалог или окно автоматически закрывается при закрытии своего окна GUI.

Обычно нет необходимости выключать потом данную настройку, т.к. она не воздействует на другие потоки. Однако если потоку необходимо отобразить как зависимый, так и независимый диалог, он может выключить эту настройку с помощью команды Gui -OwnDialogs.

Если не задан префикс номера окна – например, используется команда Gui +OwnDialogs, а не Gui 2:+OwnDialogs – владельцем диалогов будет окно потока по умолчанию.

Owner: используйте +owner, чтобы сделать окно зависимым от другого окна (однако, как только это окно создано, опция -owner не работает). По умолчанию зависимое окно не имеет кнопки на панели задач и, будучи видимым, оно всегда находится поверх своего владельца. Зависимое окно автоматически закрывается при закрытии своего владельца. Опция +owner используется после того, как создано окно-владелец, но перед созданием зависимого окна (т.е. перед такими командами, как "Gui Add"). Есть два способа использования +owner. Они показаны в примерах, приведенных ниже:

gui, 2:+owner1 ; делает окно №2 зависимым от окна №1. gui, 2:+owner ; делает окно №2 зависимым от главного окна скрипта.

Чтобы не дать пользователю взаимодействовать с окном-владельцем, пока открыто зависимое окно, заблокируйте окно-владельца с помощью команды Gui +Disabled. Позднее, когда придет время отменить или закрыть зависимое окно, отмените запрет на взаимодействие с окном-владельцем с помощью команды Gui -Disabled. Сделайте это до закрытия/удаления зависимого окна, чтобы окно-владелец снова стало активным автоматически.

Resize: позволяет изменять размер окна и разрешает кнопку максимизации в строке заголовка. Чтобы избежать разрешения кнопки максимизации, задайте +Resize -MaximizeButton.

SysMenu: задайте -SysMenu, чтобы убрать системное меню и иконку из верхнего левого угла окна. Также данная опция убирает со строки заголовка кнопки свертывания, развертывания и закрытия окна.

Theme: При заданной опции -Theme, все создаваемые далее элементы управления окна в Windows XP и выше будут иметь вид Classic Theme (классическая тема). Чтобы элементы управления, созданные дополнительно после того, как была задана эта опция, подчинялись текущей теме, включите ее снова с помощью опции +Theme. Примечание: данная опция не работает на операционных системах старше Windows XP, не работает она и на самой XP, если действует классическая тема (Classic Theme). Настройку можно изменить для элемента управления индивидуально. Для этого в опциях этого элемента нужно задать опцию +Theme или -Theme.

ToolWindow: предусматривает более узкую строку заголовка, при этом окно не будет иметь кнопки на панели задач.

(Unnamed Style): задайте знак полюса или минуса, за которым сразу следует номер стиля в десятичном или шестнадцатеричном виде. Перечень доступных стилей - см. здесь по ссылке в оригинале статьи.

(Unnamed ExStyle): задайте знак плюса или минуса, за которым сразу следует буква E и номер расширенного стиля в десятичном или шестнадцатеричном виде. Например, +E0x40000 добавит стиль WS_EX_APPWINDOW, предусматривающий в окне кнопку на панели задач, которой бы иначе не было. Хотя другие расширенные стили здесь не задокументированы (по причине редкого использования), их можно найти, задав на сайте www.microsoft.com в поиске WS_EX_APPWINDOW.

Menu [, MenuName]

Присоединяет к окну строку меню. Используйте команду Menu, чтобы создать простое меню. Например:

Menu, FileMenu, Add, &Open, MenuHandler Menu, FileMenu, Add, E&xit, MenuHandler Menu, HelpMenu, Add, &About, MenuHandler Menu, MyMenuBar, Add, &File, :FileMenu ; Присоединяем два подменю, созданные выше. Menu, MyMenuBar, Add, &Help, :HelpMenu Gui, Menu, MyMenuBar Gui, Show, w300 h200 return MenuHandler: MsgBox !!! return

Чтобы удалить текущую строку меню окна, используйте команду "Gui Menu" (т.е. опустите MenuName).

Если меню используется в качестве строки меню, оно не может больше быть всплывающим меню или подменю, поскольку строки меню требуют другого формата (примечание: данное ограничение относится только к самой строке меню, а не к ее подменю). Если вы хотите обойти это ограничение, создайте одно меню, которое будет использоваться в качестве строки меню, и другое – как всплывающее меню или подменю.

Применение определенных стирающих подкоманд команды Menu, таких, как Delete и DeleteAll, к меню, используемому как строка меню (а в некоторых случаях к ее подменю), не поддерживается и вызовет сообщение об ошибке (за исключением случаев, когда действует настройка UseErrorLevel). Чтобы внести подобные изменения, выполните следующие действия:

  1. отсоедините строку меню с помощью команды "Gui Menu";
  2. внесите необходимые изменения;
  3. снова присоедините строку меню с помощью команды "Gui, Menu, MyMenuBar".

Hide / Minimize / Maximize / Restore [v1.0.25.14+]

Команда "Gui Hide" является эквивалентом команде Gui Cancel. Остальные три команды показывают скрытые окна (при необходимости) и затем выполняют с ними заданные операции. Если окно не существует (возможно, благодаря тому, что оно было удалено командой Gui Destroy), эти команды работать не будут.

Flash [, Off]

Мигает кнопкой окна на панели задач. Это достигается путем изменения цвета строки заголовков окна и/или кнопки панели задач (если таковая существует). Опциональное слово OFF возвращает строку заголовка и кнопку панели задач к их исходным цветам (однако реальное поведение может различаться в зависимости от версии операционной системы). В примере, приведенном ниже, окно мигнет три раза, так как каждая пара вспышек сначала изменит, а затем восстановит свой вид:

Loop 6 { Gui Flash Sleep 500 ; Это довольно важное значение; его изменение может привести к непредсказуемому поведению. }

Default

Изменяет номер окна GUI текущего потока по умолчанию. Используется в случаях, когда для команд GuiControl, GuiControlGet и самой команды Gui не определен номер окна. В следующем примере номер окна по умолчанию изменяется на двойку:

Gui, 2:Default

Размещение и разметка с помощью SmartGUI Creator

Хотя опции, описанные в следующем параграфе, подходят для создания простой разметки, возможно, вы найдете SmartGUI Creator от Rajat'а более легким в использовании, так как работа с ним полностью наглядна, т.е. "вы видите то, что делаете". SmartGUI Creator можно бесплатно скачать здесь: http://www.autohotkey.com/docs/SmartGUI/.

Размещение и задание размеров элементов управления

Если в опциях опустить некоторые размеры и/или координаты, элемент управления будет размещен относительно предыдущего элемента управления и/или его размер будет установлен автоматически в соответствии с типом и содержимым элемента.

Поддерживаются следующие опции:

R: строки текста (может содержать число с плавающей запятой, например: R2.5). Опция R часто предпочтительнее опции H (Height). Если присутствуют обе опции (R и H), приоритет опции R будет выше. Для рамки группы (GroupBox) данная настройка означает количество элементов управления, для которых внутри окна нужно оставить место. Для выпадающих списков (DropDownLists), комбинированных списков (ComboBoxes) и списков (ListBoxes) она означает количество элементов, видимых одновременно в части списка элемента управления. Однако в Windows XP для выпадающего списка (DropDownList) и комбинированного списка (ComboBox) зачастую желательно опустить обе опции (R и H), что дает возможность выпадающему списку автоматически использовать всю высоту рабочего стола пользователя. Для других типов элементов управления опция R означает количество строк текста, умещающиеся в элементе управления.

W: ширина в пикселях. Если данная опция опущена, ширина некоторых типов элементов управления рассчитывается автоматически на основании их содержимого. Остальные элементы управления по умолчанию имеют следующую ширину:

  • Элементы управления табуляции: размер текущего шрифта * 30 + X-поле * 3.
  • Вертикальные индикаторы прогресса: размер текущего шрифта * 2.
  • Горизонтальные индикаторы прогресса, горизонтальные бегунки (Sliders), выпадающие списки (DropDownLists), комбинированные списки (ComboBoxes), списки (ListBoxes), рамки группы (GroupBoxes), поля редактирования (Edits) и горячие клавиши (Hotkeys): размер текущего шрифта * 15 (кроме рамок группы, которые, чтобы оставить внутри пространство для полей, умножают на 18).

H: Высота в пикселях. Если обе опции (H и R) опущены, то в DropDownLists, ComboBoxes, ListBoxes и пустых многострочных полях редактирования по умолчанию задаются 3 строки; в GroupBoxes - 2 строки; в вертикальных бегунках и индикаторах прогресса - 5 строк; высота горизонтальных бегунков по умолчанию - 30 пикселей (если не задана толщина); высота горизонтальных индикаторов прогресса по умолчанию равна размеру текущего шрифта умноженному на 2; в элементах управления горячих клавиш (Hotkey controls) задаётся 1 строка; а в элементах управления табуляции (Tab controls) - 10 строк. Для остальных типов элементов управления высота рассчитывается автоматически на основании их содержимого. Обратите внимание, что в DropDownLists и ComboBoxes высота (H) - это комбинация части элемента управления, видимой всегда, и его "списочной" части (однако, даже если высота задана слишком маленькая, по крайней мере один элемент списка будет виден всегда). Кроме того, для всех типов элементов управления предпочтительнее задавать количество строк с помощью опции R, чем использовать для этого опцию H, поскольку в последнем случае элемент управления не может отображать частичные/неполные строки текста.

wp+n, hp+n, wp-n, hp-n (где n – любое число) могут использоваться для того, чтобы задавать ширину и/или высоту элемента управления, используя ширину или высоту добавленного ранее элемента управления. Ширину и высоту опционально можно регулировать с помощью плюса или минуса. Например, если задать опцию wp, ширина элемента управления будет равна ширине предыдущего элемента управления, а при опции wp-50 ширина будет на 50 пикселей меньше ширины предыдущего элемента управления.

X: X-координата. Например, если задать "x0 y0", элемент управления будет помещен в левый верхний угол клиентской области окна, т.е. области, находящейся ниже строки заголовка и строки меню (если таковые существуют). Если из двух координат (X и Y) координата X опущена, элемент управления будет расположен справа от всех ранее добавленных элементов управления, что будет рассматриваться как начало новой "колонки".

Y: Y-координата. Если из двух координат (X и Y) координата Y опущена, элемент управления будет помещен ниже всех ранее добавленных элементов управления, что будет рассматриваться как начало новой "строки".

Целесообразно опустить одну из (или обе) опций (X, Y) для того, чтобы разметка окна GUI автоматически корректировалась при любых изменениях элементов управления или шрифта в будущем. В отличие от этого, при заданном абсолютном расположении каждого элемента управления, вам придется вручную передвигать все элементы управления, находящиеся ниже и/или справа от элемента управления, размер которого был увеличен или уменьшен.

Если опущены обе опции (X и Y), элемент управления будет расположен ниже предыдущего элемента управления на стандартном расстоянии от него.

В опции X и Y можно по желанию включить знак плюса, чтобы расположить элемент управления относительно нижней части или правой границы (соответственно) ранее добавленного элемента управления. Например, если задать Y+10, элемент управления будет помещен на 10 пикселей ниже нижней границы предыдущего элемента управления, а не на стандартном расстоянии. Подобным образом, если задать X+10, элемент управления будет помещен на расстоянии 10 пикселей от правой границы предыдущего элемента управления. Поскольку отрицательные числа (напр.: X-10) предназначаются для абсолютного расположения, чтобы использовать отрицательное смещение, поставьте спереди плюс. Например: X+-10

xp+n, yp+n, xp-n, yp-n (где n – любое число) могут использоваться для того, чтобы поместить элемент управления относительно верхнего левого угла предыдущего элемента управления, что может быть полезно при заключении элементов управления в рамку группы (GroupBox).

xm и ym могут использоваться для того, чтобы поместить элемент управления у крайнего слева и самого верхнего полей окна соответственно (за данными опциями могут идти знак плюса/минуса и число). Если задать ym без x-координаты, элемент управления будет помещен у верхнего поля, но справа от всех ранее добавленных элементов управления, что может рассматриваться как начало новой "колонки". Обратное также верно.

xs и ys: данные опции аналогичны опциям xm и ym, отличаясь только тем, что они относятся к координатам, которые были сохранены ранее путем добавления элемента управления со словом Section в его опциях (первый элемент управления окна всегда начинает новый раздел, даже если в его опциях не задано слово Section). Если задать опцию ys без x-координаты, элемент управления будет помещен у ранее сохраненной y-координаты, но справа от всех элементов управления добавленных со времени последнего использования слова Section, что будет рассматриваться как начало новой колонки внутри раздела. Например:

; Добавляем довольно широкое поле редактирования в верхней части окна. gui, add, edit, w600 ; Сохраняем расположение данного элемента управления и начинаем новый раздел. gui, add, text, section, First Name: gui, add, text,, Last Name: gui, add, edit, ys ; Начинаем в разделе новую колонку. gui, add, edit gui, show

Обратное тому, о чем говорилось выше (определение xs без y-координаты), также верно.

За опциями xs и ys могут опционально идти знаки плюс/минус и число. А также возможно в опциях элемента управления задать вместе слово Section и опции xs/ys. При этом предыдущая секция используется сама по себе, а для последующих элементов управления начинается новый раздел.

Опции, задающие элементам управления действия и переменные

V: переменная. Ассоциирует переменную с элементом управления. Сразу же после буквы V задайте имя глобальной переменной (или локальную переменную ByRef, указывающую на глобальную переменную). Например: vMyEdit. Каждый раз при использовании команды Gui Submit данной переменной будет присвоено содержимое ее элемента управления. Если элемент управления не предназначен для ввода данных, например, элемент управления текст (Text) или рамка группы (GroupBox), ассоциация переменной с этим элементом управления все же может оказаться полезной, поскольку имя этой переменной будет служить в качестве уникального идентификатора элемента управления при работе с командами GuiControl и GuiControlGet. Примечание: команда Gui Submit не изменяет содержимое переменной, ассоциированной с элементом управления, тип которого не предназначен для ввода данных, таким, как текст (Text) или рамка группы (GroupBox).

G: Gosub (метка перехода GUI). Автоматически загружает подпрограмму, когда пользователь щелкает по элементу управления или изменяет его. Сразу же после буквы G задайте имя метки для выполнения. Можно задать опцию gCancel, чтобы выполнить встроенную команду Gui Cancel (однако если в скрипте существует метка с именем "Cancel", то вместо команды Gui Cancel будет выполнена эта метка).

Элементы управления: часто используемые стили и другие опции

Примечание: в отсутствие стоящих впереди знаков предполагается знак плюс. Например, Wrap - это то же самое, что и +Wrap. В отличие от этого, -Wrap отключает свойство переноса слова (без разбивки) на новую строку.

AltSubmit: использует альтернативный метод получения данных. Если задана данная опция, то для выпадающего списка(DropDownList), комбинированного списка (ComboBox) и списка (ListBox) команда Gui Submit хранит расположение выбранного элемента, а не находящегося там текста. Если никакой элемент не выбран, комбинированный список (ComboBox) по-прежнему будет хранить текст в своем поле редактирования, а выходная переменная выпадающего списка (DropDownList) или списка (ListBox) по-прежнему не будет иметь значения. Примечание: кроме того, переменная AltSubmit воздействует на поведение команды GuiControlGet, когда эта команда работает с элементом управления, имеющим это свойство.

C: цвет текста (не действует на кнопки). Задайте опцию C, за которой сразу же идет название цвета (см. таблицу цветов здесь по ссылке в оригинале статьи) или значение RGB (префикс 0x является опциональным). Например: cRed, cFF2211, c0xFF2211, cDefault.

Disabled: блокирует предназначенный для ввода данных элемент управления, не давая пользователю его активировать или модифицировать. Чтобы разблокировать элемент управления, используйте команду "GuiControl Enable". Примечание: чтобы сделать поле редактирования доступным только для чтения, задайте вместо данной опции строку ReadOnly. Кроме того, в версиях 1.0.26 и выше после слова Disabled можно опционально поставить 0 или 1 для того, чтобы указать начальную позицию (0 – разблокировано, 1 - заблокировано). Другими словами, Disabled и Disabled%VarContainingOne% - это одно и то же.

Hidden: элемент управления первоначально невидим. Чтобы показать скрытый элемент, используйте команду "GuiControl Show". В версиях 1.0.26 и выше после слова Hidden можно опционально поставить 0 или 1 для того, чтобы указать начальную позицию (0 – видимый, 1 - невидимый). Другими словами, Hidden и Hidden%VarContainingOne% - это одно и то же.

Left: выравнивает текст по левому краю элемента управления.

Right: выравнивает текст по правому краю элемента управления. Кроме того, для флажков (checkboxes) и переключателей (radio buttons) помещает сам флажок или переключатель справа от элемента управления (а не слева).

Center: выравнивает текст в элементе управления по центру.

Section: начинает новый раздел и сохраняет эту позицию элемента управления для дальнейшего использования с опциями позиционирования xs и ys, описанными выше.

TabStop: используйте -Tabstop (т.е. минус TabStop), чтобы при нажатии пользователем клавиши TAB для навигации элемент управления, предназначенный для ввода данных, был пропущен.

Wrap: делает возможным в содержимом элемента управления перенос слова (без разбивки) на новую строку. Поскольку почти во всех типах элементов управления первоначально перенос разрешен, поставьте перед словом Wrap знак минуса, чтобы заблокировать данную настройку.

VScroll: предусматривает вертикальную полосу прокрутки, если это возможно для данного типа элемента управления.

HScroll: предусматривает горизонтальную полосу прокрутки, если это возможно для данного типа элемента управления. Оставшаяся часть данного абзаца посвящена только списку (ListBox). Ширина горизонтальной прокрутки по умолчанию равна ширине списка (ListBox)*3. Чтобы задать другую ширину прокрутки, поставьте сразу после слова HScroll число. Например, при HScroll500 прокрутка внутри списка (ListBox) будет равна 500 пикселям. Однако, если заданная ширина прокрутки меньше ширины списка (ListBox), полоса прокрутки не будет отображена (это дает возможность добавить горизонтальную полосу прокрутки позднее с помощью команды "GuiControl, +HScroll500, MyScrollBar", что иначе было бы невозможно).

Элементы управления: реже используемые стили и опции

BackgroundTrans: использует прозрачный фон, позволяющий любому элементу управления, находящемуся под элементами управления текст (Text), рисунок (Picture) или рамка группы (GroupBox), просвечивать сквозь них. Например, если элемент управления текст отображен поверх элемента управления рисунок, то кажется, что текст является частью картинки. Используйте команду "GuiControl +background", чтобы удалить данную опцию. Чтобы получить больше информации о прозрачных изображениях, см. опцию AltSubmit элемента управления рисунок.

-Background (т.е. минус Background): использует вместо цвета фона, заданного командой "Gui Color", стандартный цвет фона. Чаще всего эта опция используется для того, чтобы элемент управления табуляция (Tab) имел свой стандартный цвет, отличающийся от цвета окна. Используйте команду "GuiControl +background", чтобы удалить данную опцию.

Border: предусматривает вокруг элемента управления границу в виде тонкой линии. Большинство элементов управления в этом не нуждаются, поскольку вокруг них уже есть граница, характерная для их типа элементов управления. При добавлении границы к существующему элементу управления, возможно, появится необходимость увеличить на 1 пиксель ширину и высоту элемента управления.

Theme [v1.0.32]: данную опцию можно использовать для того, чтобы заместить текущую тему окна, заданную на основе элемента управления. См. Gui +/-Theme.

(Unnamed Style): задайте знак плюса или минуса, за которым сразу следует номер стиля в десятичном или шестнадцатеричном виде. Если знак не задан, предполагается, что стоит знак плюс. Перечень доступных стилей см. по ссылке здесь в оригинале статьи.

(Unnamed ExStyle): задайте знак плюса или минуса, за которым сразу следует буква E и номер расширенного стиля в десятичном или шестнадцатеричном виде. Если знак не задан, предполагается, что стоит знак плюс. Например, если задана опция E0x200, будет добавлен стиль WS_EX_CLIENTEDGE, предусматривающий утопленную границу, подходящую для рисунков и других элементов управления. Хотя другие расширенные стили здесь не задокументированы (по причине редкого использования), их можно найти, задав на сайте www.microsoft.com в поиске WS_EX_CLIENTEDGE.

Примечания

Приведенные ниже метки, если существуют в скрипте, автоматически ассоциируются с окном GUI:

GuiEscape: запускается, когда пользователь нажимает клавишу Escape. Если данная метка отсутствует, нажатие клавиши Escape не имеет эффекта. Известные ограничения: если первый элемент окна заблокирован (возможно, в зависимости от типа элемента управления), метка GuiEscape не будет запущена. Могут быть другие обстоятельства, приводящие к такому же результату.

GuiClose: запускается, если окно закрывают следующими способами: нажатием на строке заголовка кнопки с крестиком, путем выбора пункта "Close" в системном меню окна или с помощью команды WinClose. Если данная метка отсутствует, закрытие окна действует так же, как команда Gui Cancel, т.е. скрывает окно.

GuiSize: запускается при изменении размера, минимизации, увеличения до максимального размера или восстановления исходного вида окна. Переменные A_GuiWidth и A_GuiHeight содержат новые значения ширины и высоты клиентской области окна (т.е. площади окна за исключением строки заголовка, строки меню и границ). Кроме того, переменная ErrorLevel будет содержать одно из значений, приведенных ниже (в версиях 1.0.36 и выше, вместо переменной ErrorLevel можно использовать переменную A_EventInfo):

  • 0: Окно восстановлено или размер окна изменен обычным способом, напр. перетаскиванием его границ.
  • 1: Окно минимизировано.
  • 2: Окно увеличено до максимального размера.

GuiContextMenu [v1.0.36+]: запускается, если пользователь щелкнул правой клавишей мыши в любом месте окна, кроме строки заголовка и строки меню, а также в ответ на нажатие Apps key или Shift-F10. В отличие от большинства других меток GUI, опция GuiContextMenu может иметь несколько одновременных потоков. Процедура может проверять следующие переменные:

  1. A_GuiControl, содержащую текст или имя переменной элемента управления, получившего событие (если события получено не было, значения нет);
  2. A_EventInfo, которая содержит номер строки, имеющей фокус (0, если строк в фокусе нет) в списке (ListBox или ListView), если элемент управления этого типа является источником данного события;
  3. A_GuiX и A_GuiY, содержащие координаты X и Y того места в окне, где скрипт должен отобразить меню, например:
    Menu, MyContext, Show, %A_GuiX%, %A_GuiY%
  4. A_GuiEvent, которая содержит слово RightClick, если пользователь щелкнул правой клавишей мыши, и Normal, если меню было запущено с помощью Apps key или Shift-F10.

Примечание: поскольку у поля редактирования (Edit) и элемента управления MonthCal есть свои собственные контекстные меню, сделанный по ним правый щелчок мыши не запустит данную метку.

GuiDropFiles: запускается в случае, если файлы/папки были перемещены в окно в результате операции drag-and-drop (однако, если метка уже запущена, событие перетаскивания игнорируется). Процедура может проверять следующие переменные:

  1. A_GuiControl, содержащую текст или имя переменной элемента управления, над которым был отпущен файл (если файл отпущен не был, у переменной нет значения);
  2. ErrorLevel, которая в версиях 1.0.25 и выше содержит количество перемещенных файлов (в версиях от 1.0.36 и выше, переменную A_EventInfo можно использовать вместо переменной ErrorLevel);
  3. A_GuiX и A_GuiY, которые в версиях 1.0.36 и выше содержат координаты X и Y тех мест, где были отпущены файлы;
  4. A_GuiControlEvent, содержащая имена перемещенных файлов, где каждое имя файла, за исключением последнего, завершено переводом строки (`n).

Чтобы извлечь отдельные файлы, используйте синтаксический анализ (parsing loop), как показано ниже:

Loop, parse, A_GuiControlEvent, `n { MsgBox, 4,, File number %A_Index% is:`n%A_LoopField%.`n`nContinue? IfMsgBox, No, Break } ; Чтобы извлечь только первый файл, сделайте так, как показано в примере: Loop, parse, A_GuiControlEvent, `n { FirstFile = %A_LoopField% Break } ; Чтобы обработать файлы в алфавитном порядке, сделайте так, как показано в примере: FileList = %A_GuiControlEvent% Sort, FileList Loop, parse, FileList, `n ... etc.

Чтобы временно заблокировать для окна операцию drag-and-drop, удалите стиль WS_EX_ACCEPTFILES с помощью Gui -E0x10. Чтобы восстановить его, используйте Gui +E0x10.


Множественные окна GUI


Для всех окон, кроме первого, номер окна используется в качестве префикса для специальных меток, о которых рассказано выше. Например, 2GuiEscape и 2GuiClose – метки второго окна.

В каждом скрипте может быть одновременно до 99 окон GUI. Чтобы произвести операцию над окном с номером, отличным от номера по умолчанию, перед подкомандой поставьте номер, за которым следует двоеточие, как показано в следующих примерах:

Gui, 2:Add, Text,, Text for about box. Gui, 2:Show

В окнах с меньшим номером быстродействие может быть немного лучше, чем в окнах с большим номером.


События GUI


Поток GUI определяется как любой поток, запущенный в результате действия GUI. К действиям GUI относятся: выбор пункта меню в строке меню окна GUI или запуск одной из меток GUI (например, нажатием кнопки).

Номер окна по умолчанию для потока GUI является номер окна, запустившего поток. Потоки, не являющиеся GUI, по умолчанию используют 1.

Каждый раз, когда поток GUI запущен, последним найденным окном этого потока считается само окно GUI, что позволяет командам для окон и элементов управления (таким, как WinMove, WinHide, WinSet, WinSetTitle и ControlGetFocus), оперируя окном GUI, опускать WinTitle и WinText.

Если щелкнуть мышью по элементу управления в то время, когда метка GUI этого элемента уже запущена предыдущим щелчком, это не будет иметь эффекта и событие будет отменено. Чтобы этого избежать, используйте в качестве первой строки подпрограммы команду Critical (однако, в этом случае другие потоки, такие, как нажатие горячей клавиши будут также буферизованы/отложены).

Встроенные переменные A_Gui и A_GuiControl содержат номер окна и идентификатор элемента управления, запустившие текущий поток. Чтобы получить больше информации, см. описание этих переменных.

Все потоки GUI начинают свою работу со значений по умолчанию для таких настроек, как SetKeyDelay. Эти значения по умолчанию можно изменить в секции авто-выполнения.

Чтобы несколько разных событий исполняли одну и ту же подпрограмму, задайте над подпрограммой последовательно их метки. Например:

GuiEscape: GuiClose: ButtonCancel: Gui, Cancel ; Все метки, заданные выше, выполнят данную подпрограмму. return

Навигация с помощью клавиатуры


В пределах окна GUI навигация может осуществляться с помощью клавиши TAB, которая передает фокус ввода с помощью клавиатуры следующему элементу управления, предназначенному для ввода данных (элементы управления, в которых не задан стиль TabStop, пропускаются). Порядок навигации определяется порядком, в котором первоначально были добавлены элементы управления. Когда окно будет отображено в первый раз, фокус будет находиться на первом предназначенном для ввода данных элементе управления, в котором задан стиль TabStop (который во многих элементах управления задан по умолчанию).

В некоторых элементах управления может содержаться амперсанд (&), предназначенный для того, чтобы создать быструю клавишу, которая отображается в тексте элемента управления как подчеркнутый символ. Чтобы активировать быструю клавишу, пользователь, удерживая клавишу ALT, должен нажать соответствующий символ. Для кнопок, флажков и переключателей нажатие быстрой клавиши приводит к тому же результату, что и щелчок мышью по элементу управления. Для рамок группы и текста при нажатии быстрой клавиши фокус ввода перепрыгивает на созданный следующим и предназначенный для ввода данных элемент управления, в котором задан стиль tabstop. Однако если у нескольких элементов управления одна и та же быстрая клавиша, при ее нажатии фокус ввода будет переходить по очереди между всеми элементами управления, имеющими одинаковую быструю клавишу.

Чтобы отобразить буквальный амперсанд в типах элементов управления, упомянутых выше, задайте друг за другом два амперсанда так, как показано в примере: Save && Exit.


Вид окна


В качестве иконки окно GUI использует иконку трея, которая была действительна в момент создания окна. Таким образом, чтобы изменить иконку, перед созданием окна измените иконку трея. Например:

Menu, Tray, Icon, MyIcon.ico

Из-за ограничений операционной системы флажки (Checkboxes), переключатели (Radio buttons) и рамки группы (GroupBoxes), для которых был задан цвет текста, отличный от цвета по умолчанию, в операционной системе Windows XP и выше приобретут вид Classic Theme.

Также см. задание полей.


Общие замечания


Чтобы оперировать отдельными элементами управления окна GUI, используйте команды GuiControl и GuiControlGet.

В каждом окне GUI может быть до 11 000 элементов управления. Однако, будьте внимательны, если в окне больше 5 000 элементов управления, поскольку в этом случае система может работать нестабильно.

Любой скрипт, в котором используются команды GUI, не завершает свою работу автоматически, даже если команда GUI фактически не была выполнена. Скрипт предотвращает одновременный запуск нескольких своих экземпляров, если для отключения этого не была явно использована директива #SingleInstance.

Примеры

; Пример: достигаем такого же результата, как при запуске SplashTextOn. ; Данный скрипт требует версии 1.0.25.13. Gui, +AlwaysOnTop +Disabled -SysMenu Gui, Add, Text,, Some text to display. Gui, Show, NoActivate, My Window ; NoActivate избегает деактивации текущего активного окна.

; Пример: простое окно для ввода данных. Gui, Add, Text,, First name: Gui, Add, Text,, Last name: Gui, Add, Edit, vFirstName ym ; Опция ym начинает новую колонку элементов управления. Gui, Add, Edit, vLastName Gui, Add, Button, default, OK ; Метка ButtonOK (если она существует) будет запущена при нажатии кнопки. Gui, Show,, Simple Input Example return ; Окончание секции авто-выполнения. Скрипт ожидает каких-нибудь действий пользователя. GuiClose: ButtonOK: Gui, Submit ; Сохраняем входные данные пользователя в ассоциированной переменной каждого элемента управления. MsgBox Вы ввели "%FirstName% %LastName%". ExitApp

; Пример: элемент управления Tab. Gui, Add, Tab,, First Tab|Second Tab|Third Tab Gui, Add, Checkbox, vMyCheckbox, Sample checkbox Gui, Tab, 2 Gui, Add, Radio, vMyRadio, Sample radio1 Gui, Add, Radio,, Sample radio2 Gui, Tab, 3 Gui, Add, Edit, vMyEdit r5 ; r5 означает высоту в 5 строк. Gui, Tab ; т.е. последовательно добавляемые элементы управления не будут принадлежать элементу управления tab. Gui, Add, Button, default xm, OK ; Опция xm помещает кнопку в нижнем левом углу. Gui, Show return ButtonOK: GuiClose: GuiEscape: ; Сохраняем содержимое каждого элемента управления в ассоциированной переменной этого элемента управления. Gui, Submit MsgBox Вы ввели :`n%MyCheckbox%`n%MyRadio%`n%MyEdit% ExitApp

; Пример: список (ListBox), содержащий файлы в каталоге. Gui, Add, Text,, ( Выбираем файл для загрузки из списка приведенного ниже. Чтобы отменить команду, нажимаем ESCAPE или закрываем это окно. ) Gui, Add, ListBox, vMyListBox gMyListBox w640 r10 Gui, Add, Button, Default, OK Loop, C:\*.* ; Измените эту папку и групповой символ в соответствии с вашими предпочтениями. { GuiControl,, MyListBox, %A_LoopFileFullPath% } Gui, Show return MyListBox: if A_GuiControlEvent DoubleClick return ; Иначе, пользователь щелкает двойным щелчком мыши по пункту в списке, ; что воспринимается так же, как нажатие OK. ; Таким образом, передаем управление вниз следующей метке. ButtonOK: GuiControlGet, MyListBox ; Извлекаем текущий выбранный элемент списка (ListBox). MsgBox, 4,, Вы хотите запустить файл или документ ниже?`n`n%MyListBox% IfMsgBox, No return ; Иначе, пытаемся его запустить: Run, %MyListBox%,, UseErrorLevel if ErrorLevel = ERROR MsgBox Нельзя загрузить заданный файл. Возможно, он ни с чем не ассоциирован. return GuiClose: GuiEscape: ExitApp

; Пример: отображение выполняемых функций на экране (on-screen display). ; Данный скрипт требует версию 1.0.25.13 или выше. CustomColor = EEAA99 ; Может быть любого RGB цвета (ниже он будет сделан прозрачным). Gui, +AlwaysOnTop +LastFound +Owner ; Опция +Owner мешает появлению кнопки на панели задач. Gui, Color, %CustomColor% Gui, Font, s24 ; XX & YY служит для того, чтобы автоматически задать размер окна. Gui, Add, Text, vMyText cLime, XXXXX YYYYY ; Делаем все пиксели этого цвета прозрачными, а сам текст - полупрозрачным (150): WinSet, TransColor, %CustomColor% 150 Gui, -Caption ; Удаляем границы и заголовок окна. SetTimer, UpdateOSD, 200 Gosub, UpdateOSD ; Не ожидая таймера, делаем сразу первое обновление. Gui, Show, x0 y400 return UpdateOSD: MouseGetPos, MouseX, MouseY GuiControl,, MyText, X%MouseX%, Y%MouseY% return

; Пример: движущийся индикатор прогресса, наложенный на фоновое изображение. Gui, Color, White Gui, Add, Picture, x0 y0 h350 w450, %A_WinDir%\system32\ntimage.gif Gui, Add, Button, Default xp+20 yp+250, Start the Bar Moving Gui, Add, Progress, vMyProgress w416 Gui, Add, Text, vMyText wp ; wp означает "использовать ширину предыдущего". Gui, Show return ButtonStartTheBarMoving: Loop, %A_WinDir%\*.* { if A_Index > 100 break GuiControl,, MyProgress, %A_Index% GuiControl,, MyText, %A_LoopFileName% Sleep 50 } GuiControl,, MyText, Процесс завершён. return GuiClose: ExitApp

; Пример: простое средство просмотра изображений. ; Данный скрипт требует версию 1.0.25.0. Gui, +Resize Gui, Add, Button, default, &Load New Image Gui, Add, Radio, ym+5 x+10 vRadio checked, Load &actual size Gui, Add, Radio, ym+5 x+10, Load to &fit screen Gui, Add, Pic, xm vPic Gui, Show return ButtonLoadNewImage: FileSelectFile, file,,, Select an image: , Images (*.gif; *.jpg; *.bmp; *.png; *.tif; *.ico; *.cur; *.ani; *.exe; *.dll) if file = return Gui, Submit, NoHide ; Сохраняем значения переключателей (radio buttons). if Radio = 1 ; Отображаем изображение в его фактическом размере. { Width = 0 Height = 0 } else ; Выбран второй переключатель: подгоняем изображение под размер экрана. { Width := A_ScreenWidth - 28 ; Минус 28, чтобы оставить внутри пространство для границ и полей. Height = -1 ; "Сохранить форматное соотношение" представляется лучшим выбором. } GuiControl,, Pic, *w%width% *h%height% %file% ; Загружаем изображение. Gui, Show, xCenter y0 AutoSize, %file% ; Подгоняем размер окна под размер рисунка. return GuiClose: ExitApp

; Пример: простой текстовый редактор со строкой меню. ; Данный скрипт требует версию 1.0.25.0. ; Создаем подменю для строки меню: Menu, FileMenu, Add, &New, FileNew Menu, FileMenu, Add, &Open, FileOpen Menu, FileMenu, Add, &Save, FileSave Menu, FileMenu, Add, Save &As, FileSaveAs Menu, FileMenu, Add ; Разделительная линия. Menu, FileMenu, Add, E&xit, FileExit Menu, HelpMenu, Add, &About, HelpAbout ; Создаем строку меню, присоединяя к ней подменю: Menu, MyMenuBar, Add, &File, :FileMenu Menu, MyMenuBar, Add, &Help, :HelpMenu ; Присоединяем строку меню к окну: Gui, Menu, MyMenuBar ; Создаем главное поле редактирования (Edit) и отображаем окно: Gui, +Resize ; Задаем окну свойство изменять размер. Gui, Add, Edit, vMainEdit WantTab W600 R20 Gui, Show,, Untitled CurrentFileName = ; Показываем отсутствие текущего файла. return FileNew: GuiControl,, MainEdit ; Очищаем поле редактирования (Edit). return FileOpen: FileSelectFile, SelectedFileName, 3, , Открыть файл (Open File), Текстовые документы (*.txt) if SelectedFileName = ; Файл не задан. return Gosub FileRead return FileRead: ; Вызывающий оператор задал для нас переменную SelectedFileName. FileRead, MainEdit, %SelectedFileName% ; Считываем содержимое файла в переменную. if ErrorLevel 0 { MsgBox Нельзя открыть "%SelectedFileName%". return } GuiControl,, MainEdit, %MainEdit% ; Помещаем текст в элемент управления. CurrentFileName = %SelectedFileName% Gui, Show,, %CurrentFileName% ; Показываем в строке заголовка имя файла. return FileSave: if CurrentFileName = ; Имя файла еще не выбрано, поэтому делаем "Сохранить как" (Save-As). Goto FileSaveAs Gosub SaveCurrentFile return FileSaveAs: FileSelectFile, SelectedFileName, S16, , Сохранить файл (Save File), Текстовые документы (*.txt) if SelectedFileName = ; Файл не задан. return CurrentFileName = %SelectedFileName% Gosub SaveCurrentFile return SaveCurrentFile: ; Вызывающий оператор гарантирует, что CurrentFileName имеет значение. IfExist %CurrentFileName% { FileDelete %CurrentFileName% if ErrorLevel 0 { MsgBox Попытка изменить "%CurrentFileName%" потерпела неудачу. return } } GuiControlGet, MainEdit ; Извлекаем содержимое поля редактирования. FileAppend, %MainEdit%, %CurrentFileName% ; Сохраняем содержимое в файле. ; В случае успеха, отображаем имя файла в строке заголовка (в случае вызова FileSaveAs): Gui, Show,, %CurrentFileName% return HelpAbout: MsgBox Очень простой текстовый редактор. return GuiDropFiles: ; Поддерживает операцию drag & drop. Loop, parse, A_GuiControlEvent, `n { SelectedFileName = %A_LoopField% ; Выбираем только первый файл (если файлов несколько). break } Gosub FileRead return GuiSize: if ErrorLevel = 1 ; Окно минимизировано. Ничего делать не нужно. return ; Иначе, был изменен размер окна или окно было увеличено до максимального размера. ; Чтобы поле редактирования соответствовало новому размеру окна, изменяем его размер. NewWidth := A_GuiWidth - 20 NewHeight := A_GuiHeight - 20 GuiControl, Move, MainEdit, W%NewWidth% H%NewHeight% return FileExit: ; Пользователь выбрал в меню Файл пункт "Выход". GuiClose: ; Пользователь закрыл окно. ExitApp
Теги страницы: