Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также саму программу AutoHotkey и проблемы её использования)

Проект перевода документации AutoHotkey: перечень переведённых статей и статей в работе.

Оригинал статьи в AutoHotkey.chm: "ListView [v1.0.36+]", в содержании - "GUI, MsgBox, InputBox & Other Dialogs" - "GUI ListView Control".

Ник переводчика: Gourmet.

Настоящее имя переводчика: Валентина Гаврикова, г.Москва.

ListView [v1.0.36+]

Содержание

Введение и несложные примеры

Элемент управления ListView является одним из наиболее сложных элементов управления, предоставляемых операционной системой. В своей самой узнаваемой форме ListView отображает строки и столбцы в виде таблицы. Наиболее распространенным примером является список файлов и папок Проводника (таблица).

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

Gui, Add, ListView, Options, ColumnTitle1|ColumnTitle2|...

Далее представлен скрипт, который создает и отображает элемент управления ListView, содержащий список файлов из пользовательской папки "Мои документы":

; Создаем элемент управления ListView, состоящий из двух столбцов - имя и размер:
Gui, Add, ListView, r20 w700 gMyListView, Name|Size (KB)

; Получаем список имен файлов из папки и помещаем их в ListView:
Loop, %A_MyDocuments%\*.*
    LV_Add("", A_LoopFileName, A_LoopFileSizeKB)

LV_ModifyCol() ; Автоматически подгоняем размер столбцов под их содержимое.
; В целях сортировки объявляем тип данных, отображаемых во втором столбце, целым числом.
LV_ModifyCol(2, "Integer")

; Отображаем окно и завершаем работу. Скрипт получит сообщение о каждом двойном щелчке по строке.
Gui, Show
return

MyListView:
if A_GuiEvent = DoubleClick
{
    LV_GetText(RowText, A_EventInfo) ; Получаем текст строки из первого столбца.
    MsgBox Вы сделали двойной щелчок по строке номер %A_EventInfo%. Текст: "%RowText%"
}
return

GuiClose: ; Указываем, что при закрытии окна скрипт должен автоматически закончить работу.
ExitApp

Опции и стили для команды "Gui, Add, ListView,Options"

AltSubmit: уведомляет скрипт о большем количестве событий ListView, чем обычно. Другими словами, чаще запускается метка перехода. Для получения дополнительных сведений см. "Уведомления о метках перехода" ниже.

Background: задайте слово Background и сразу за ним название цвета (см. таблицу цветов или значение RGB в статье "Progress / SplashImage" в оригинале справки; префикс 0x - опциональный). Например: BackgroundSilver, BackgroundFFDD99. Если эта опция не задана, то по умолчанию цвет фона первоначально будет установлен в соответствии с последним параметром команды Gui Color (если такой параметр не задан, устанавливается цвет фона системы по умолчанию). Если же задана опция BackgroundDefault, будет использован цвет фона системы по умолчанию (обычно белый). Например, с помощью команды GuiControl, +BackgroundDefault, MyListView в ListView можно восстановить исходный цвет по умолчанию.

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

Checked: слева от каждой строки отображает флажок. Добавляя строку, задайте в опциях флажка слово Check, чтобы первоначально в окошечке флажка стояла галочка. Выбрать или отменить выбор строки можно либо щелчком по флажку, либо нажатием клавиши пробела.

Count: задайте слово Count и сразу за ним общее количество строк, которые в конечном счёте войдут в элемент управления ListView. Это количество не является пределом: строки можно добавлять и далее. Данная же опция позволяет выделять всю необходимую память сразу, а не делать это при добавлении каждой строки, что значительно увеличивает производительность при добавлении строк (а также, возможно, и при сортировке). Для дальнейшего увеличения производительности перед добавлением большого количества строк используйте команду GuiControl, -Redraw, MyListView. Чтобы снова разрешить обновление отображения, используйте после этого команду GuiControl, +Redraw, MyListView (которая к тому же обновит сам элемент управления).

Grid: отображает горизонтальные и вертикальные линии, визуально отмечающие границы между строками и столбцами.

Hdr: задайте -Hdr (минус Hdr) для того, чтобы убрать верхнюю строку, специально предназначенную для заголовков столбцов. Чтобы потом отобразить её снова, используйте команду GuiControl, +Hdr, MyListView.

LV: задайте строку "LV" и сразу за ней номер расширенного стиля элемента управления ListView (см. раздел "ListView styles" в статье "Styles Usable by the Gui and GuiControl Commands" в оригинале справки). Такие стили полностью независимы от основных расширенных стилей. Например, опция -E0x200 удалит основной расширенный стиль WS_EX_CLIENTEDGE и сотрёт используемые по умолчанию границы элемента управления. И напротив, опция -LV0x20 удалит стиль LVS_EX_FULLROWSELECT.

LV0x10: задайте опцию -LV0x10, для того чтобы запретить пользователю перетаскивать заголовки столбцов вправо или влево, меняя порядок их расположения. Однако обычно в этой опции нет необходимости, поскольку физическое изменение порядка столбцов не влияет на то, в каком порядке их "видит" скрипт. Например, для скрипта первый столбец всегда будет столбцом №1, даже если пользователь передвинул его и поставил справа от остальных столбцов.

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

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

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

NoSort: выключает автоматическую сортировку, происходящую при нажатии на заголовок столбца. Однако визуально заголовок продолжит вести себя как кнопка (если не задана опция NoSortHdr). Кроме того, метка перехода продолжит получать уведомление ColClick, на которое она может реагировать, производя сортировку или какое-нибудь другое действие.

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

R: высота, задаваемая в количестве строк (при создании элемента управления). Задайте букву R и сразу за ней количество строк, которые поместятся в пределах элемента управления. Например, если задать опцию R10, высота элемента управления составит 10 строк. Если в элементе управления ListView режим просмотра не report view, размер элемента управления подгоняется не под строки текста, а под иконки. Примечание: добавление иконок к строкам элемента управления ListView увеличивает высоту каждой строки, что делает данную опцию некорректной.

Sort: элемент управления сортируется в алфавитном порядке по содержимому первого столбца.

SortDesc: работает аналогично предыдущей опции, но сортировка производится в порядке убывания.

WantF2 [в версиях 1.0.44 и выше]: задайте -WantF2 (минус WantF2), чтобы запретить редактирование выделенной строки с помощью нажатия клавиши F2. Данная настройка игнорируется, если одновременно не действует опция -ReadOnly. Вне зависимости от данной настройки, метка перехода продолжает получать F2-уведомления.

(Числовые стили без названия): стили, не входящие в состав вышеперечисленных, используются редко и поэтому не имеют названий. Чтобы просмотреть их список, см. раздел "ListView styles" в статье "Styles Usable by the Gui and GuiControl Commands" в оригинале справки.

Режимы просмотра

Элемент управления ListView имеет пять режимов просмотра, из которых чаще всего используется report view (являющийся к тому же режимом по умолчанию). Для того чтобы использовать один из остальных режимов, задайте его имя в опциях. Режим просмотра можно изменить уже после создания элемента управления. Пример: GuiControl, +IconSmall, MyListView

Icon: отображает большие иконки. И в этом, и во всех остальных режимах просмотра, исключая режим Report, отображается только текст, содержащийся в первом столбце. Для отображения иконок в этом режиме, для ListView должен быть назначен каталог больших иконок ImageList (подробнее - см. ниже).

Tile [в версиях 1.0.36.03 и выше]: также отображает большие иконки, однако этот режим имеет отличия в плане эргономики. Например, текст в каждом элементе отображается не снизу, а справа от него. Флажки в данном режиме не функционируют. Кроме того, данный режим не действует в более старых операционных системах, чем Windows XP.

IconSmall: отображает маленькие иконки.

List: отображает маленькие иконки в виде списка, распределяя их по столбцам. Количество столбцов зависит от ширины элемента управления ListView, а также от ширины элемента списка, который содержит наибольший по объему текст.

Report: снова включает режим просмотра report, являющимся режимом по умолчанию. Пример: GuiControl, +Report, MyListView

Встроенные функции для элементов управления ListView

Все функции элемента управления ListView выполняются в текущем потоке окна Gui по умолчанию. (Окно Gui по умолчанию можно изменить с помощью команды Gui, 2:Default.) Если окно по умолчанию не существует или не имеет элементов управления ListView, то чтобы обозначить проблему, все функции возвращают значение 0.

Если окно имеет несколько элементов управления ListView, то по умолчанию действие функций распространяется только на последний добавленный элемент управления. Для того, чтобы изменить это свойство, задайте команду Gui, ListView, ListViewName, где параметром ListViewName является имя переменной, ассоциированной с элементом управления ListView, или ClassNN (название класса и номер экземпляра) этого элемента управления, показываемое утилитой Window Spy. После этого все существующие и будущие потоки будут использовать для последующих операций указанный таким образом элемент управления.

Выражение "номер строки", которое будет использоваться далее, означает текущую позицию строки в элементе управления ListView. Номер верхней строки - 1, второй строки - 2 и т.д. После добавления номер строки как правило меняется в результате сортировки, удаления или добавления других строк. Поэтому лучшим способом нахождения определенной строки (строк) по ее содержимому является использование функции LV_GetText() в цикле.

Функции для строк

LV_Add([Options, Field1, Field2, ...]): добавляет новую строку в конец списка. Параметры, начиная с Field1 и далее, представляют собой столбцы новой строки, которые могут содержать как текст, так и число (включая результаты числовых выражений). Для того чтобы оставить какое-нибудь поле пустым, задайте две двойные кавычки "" или их эквивалент. Если количество полей (Field) недостаточно для всех столбцов, последние столбцы остаются пустыми.

При неудаче функция LV_Add() возвращает 0. При успехе она возвращает новый номер строки. Эта строка не обязательно будет последней строкой, поскольку в элементе управления ListView могут быть заданы стили Sort или SortDesc.

Опции строк: параметр Options представляет собой строку, содержащую слова, приведенные ниже. Количество слов варьируется от 0 до нескольких. (Нечувствительно к регистру.) Слова отделяются друг от друга с помощью символов пробела или табуляции. Для того, чтобы исключить опцию, поставьте перед ней знак минус. Для добавления опции можно поставить знак плюс, однако это не обязательно.

Check: отображает в строке галочку (в том случае, если в элементе управления есть флажки). Для того, чтобы затем эту галочку снять, используйте функцию LV_Modify(RowNumber, "-Check").

Col: задайте слово Col и сразу за ним номер столбца, начиная с которого начнут действовать параметры. Данная опция чаще всего используется с функцией LV_Modify(), с тем чтобы внести изменения в отдельные поля, не затрагивая при этом другие поля, лежащие левее.

Focus: устанавливает фокус ввода с клавиатуры на определенную строку (часто используется вместе с опцией Select). Чтобы затем убрать фокус с этой строки, используйте функцию LV_Modify(RowNumber, "-Focus").

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

Select: выделяет строку. Для того, чтобы затем снять выделение, используйте функцию LV_Modify(RowNumber, "-Select"). Как правило, при выделении строк лучше, чтобы по крайней мере одна строка находилась в фокусе, так как это позволяет клавише Apps отображать контекстное меню (если оно есть) вблизи строки, находящейся в фокусе. По желанию можно задать начальное состояние строки, поместив за словом Select цифру 0 или 1. Другими словами, "Select" и "Select".VarContainingOne означают одно и то же (используемая здесь точка является оператором конкатенации). Данный метод работает также с описанными выше опциями Focus и Check.

Vis [в версиях 1.0.44 и выше]: обеспечивает полную видимость указанной строки, при необходимости, путем прокручивания элемента управления ListView. Данная опция действует только для функции LV_Modify(), например: LV_Modify(RowNumber "Vis")

LV_Insert(RowNumber [, Options, Col1, Col2, ...]): эта функция ведет себя аналогично функции LV_Add() за исключением первого параметра, с помощью которого задается номер для последней добавленной строки. Строки, номера которых меньше RowNumber, сдвигаются вниз для того, чтобы освободить место для новой строки. Если RowNumber больше, чем все количество строк в списке (вплоть до 2147483647), новая строка добавляется в конец списка.

LV_Modify(RowNumber, Options [, NewCol1, NewCol2, ...]): изменяет свойства и/или текст строки, возвращая 1 при успехе и 0 при неудаче. Если RowNumber равен 0, все строки в элементе управления изменяются (в этом случае функция возвращает 1 при полном успехе и 0, если хотя бы одна часть процесса закончилась неудачей). Если в функции заданы только первые два параметра, изменяются только свойства строки, в то время как текст остается неизменным. Подобным образом, если количество параметров меньше количества всех столбцов, то столбцы в конце остаются без изменений. Обновить только один определенный столбец, не затрагивая остальные, можно с помощью опции ColN (см. выше).

LV_Delete([RowNumber]): если параметр в этой функции опущен, все строки элемента управления ListView удаляются. В противном случае удаляется только строка с заданным номером. Функция возвращает 1 при успехе и 0 при неудаче.

Функции для столбцов

LV_ModifyCol([ColumnNumber, Options, ColumnTitle]): изменяет свойства и/или текст заданного столбца и его заголовка. Номер первого столбца - 1 (не 0). Если в функции опущены все параметры, ширина каждого столбца подгоняется под его содержимое. Если задан только первый параметр, автоматически подбирается ширина только заданного столбца. Автоматическая регулировка столбцов действует только при режиме просмотра Report (Details). Данная функция возвращает 1 при успехе и 0 при неудаче.

Опции столбцов: параметр Options представляет собой строку, содержащую слова, приведенные ниже. Количество слов варьируется от 0 до нескольких. (Нечувствительно к регистру.) Слова отделяются друг от друга с помощью символов пробела или табуляции. Для того чтобы исключить опцию, поставьте перед ней знак минуса. Для добавления опции можно поставить знак плюс, однако это не обязательно.

Опции столбцов: Общие

N: в качестве опции N задается ширина столбца в пикселях. Если это единственная заданная опция, кавычки можно не ставить. Например, оба приведенных ниже примера правильны. LV_ModifyCol(1, 50) ... LV_ModifyCol(1, "50 Integer").

Auto: подбирает ширину столбца под его содержимое. Действует только при режиме просмотра Report (Details).

AutoHdr: подбирает ширину столбца под его содержимое или под его заголовок, в зависимости от того, что шире. Если данную опцию применить к последнему столбцу, он займет в ширину все оставшееся место в элементе управления ListView. Как правило, лучше использовать эту настройку только после добавления всех строк, так как это позволяет при подборе ширины последнего столбца принимать во внимание любую позднее добавленную полосу вертикальной прокрутки. Действует только при режиме просмотра Report (Details).

Icon: для того чтобы отобразить иконку рядом с текстом заголовка столбца, задайте слово Icon и сразу за ним номер иконки из каталога изображений ImageList. Чтобы удалить существующую иконку, задайте -Icon (минус Icon). Для того чтобы операционные системы Windows 95/NT4 поддерживали иконки в столбцах, в них должны быть установлены версии DLL не более старые, чем те, которые поставляются с Internet Explorer 3.0.

IconRight: помещает иконку в правой стороне столбца.

Опции столбцов: Типы данных

Integer: в целях сортировки указывает, что данный столбец содержит целые числа. Для того чтобы сортировка была проведена должным образом, каждое целое число должно быть представлено в 32-битном формате, то есть, в диапазоне от -2147483648 до 2147483647. Если какие-либо из значений не являются целыми числами, при сортировке они будет расценены как нули (если только в начале этих значений не стоят числа, которые в этом случае и будут использованы при сортировке). Числа могут быть представлены как в десятичном, так в шестнадцатеричном формате (напр.: 0xF9E0).

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

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

Опции столбцов: Выравнивание

Center: выравнивает текст в столбце по центру. Для того, чтобы выровнять по центру столбцы, содержащие целые числа или числа с плавающей запятой, задайте слово Center после слов Integer или Float.

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

Right: выравнивает текст в столбце по правой стороне. Это свойство не задается для целых чисел и чисел с плавающей запятой, так как они выравниваются по правой стороне по умолчанию. Такое поведение можно обойти, задав, например, такие опции: "Integer Left" или "Float Center".

Опции столбцов: Сортировка

Case: сортировка столбцов - чувствительна к регистру (применяется только к столбцам, содержащим текст). Если опции Case и CaseLocale опущены, при сортировке буквы верхнего регистра A-Z расцениваются аналогично их "коллегам" из нижнего регистра.

CaseLocale [в версиях 1.0.43.03 и выше]: нечувствительность к регистру при сортировке в данном случае зависит от специфики региона пользователя. Например, в большинстве регионов, в которых говорят на английском и европейских языках, буквы A-Z и такие буквы, как A-умляут и U-умляут, трактуются аналогично буквам нижнего регистра. Кроме того, при данном методе дефисы и апострофы расцениваются так, что например, слова "coop" и "co-op" помещаются вместе. В зависимости от содержимого элементов, предназначенных для сортировки, скорость сортировки здесь может быть от 1 до 8 раз меньше, чем при методе, нечувствительном к регистру.

Desc: сортировка в нисходящем порядке, в порядке убывания.

NoSort: запрещает автоматическую сортировку при щелчке мышью по указанному столбцу. Для того, чтобы запретить сортировку для всех столбцов, а не только для подмножества, задайте опцию NoSort в опциях элемента управления ListView. Если в ListView задана метка перехода, то при щелчке по столбцу с отключенной сортировкой она по-прежнему будет получать уведомление ColClick.

Sort: сразу же сортирует столбцы в порядке возрастания (даже если задана опция Desc).

SortDesc: сразу же сортирует столбцы в порядке убывания.

Uni: однонаправленная сортировка. Предотвращает изменение направления сортировки при втором щелчке по одному и тому же столбцу.

LV_InsertCol(ColumnNumber [, Options, ColumnTitle]): создает новый столбец под заданным ColumnNumber, пододвигая остальные столбцы вправо, чтобы освободить для него место. Номер первого столбца - 1 (не 0). Если ColumnNumber больше, чем все количество столбцов, имеющихся на этот момент в элементе управления, то новый столбец добавляется в конец списка. Если новый столбец не вставляется на место первого столбца, то первоначально он не содержит данных. В противном случае он наследует все содержимое предыдущего первого столбца, который при этом становится пустым. Если свойства нового столбца (например, используется ли сортировка по целым числам и т.д.) не заданы в Options иначе, они всегда устанавливаются по умолчанию. Данная функция возвращает номер позиции нового столбца (или 0 при неудаче). Максимальное количество столбцов в элементе управления ListView - 200.

LV_DeleteCol(ColumnNumber): удаляет указанный столбец и все его содержимое. При успехе функция возвращает 1 при неудаче - 0. При удалении столбца номера столбцов, находящихся правее, уменьшаются на 1. Следовательно, двойной вызов функции LV_DeleteCol(2) удалит второй и третий столбец. В более старых, чем Windows XP, операционных системах попытка удалить исходный первый столбец может окончиться неудачей. При этом будет возвращен 0.

Извлечение данных из ListView

LV_GetCount(["Selected | Column"]): возвращает полное количество строк, содержащихся в элементе управления. Однако если задан параметр "S" или "Selected", возвращаются только выделенные строки. В версии 1.0.36.03 и выше, если заданы параметры "Col" или "Column", извлекается количество столбцов. Данная функция всегда исполняется мгновенно, так как элемент управления отслеживает количество строк и столбцов.

Функция часто используется в верхней строке цикла. При этом она вызывается только один раз (до первой итерации). Пример:

Loop % LV_GetCount()
{
    LV_GetText(RetrievedText, A_Index)
    if InStr(RetrievedText, "some filter text")
        LV_Modify(A_Index, "Select") ; Выделяем все строки, первое поле которых содержит искомый текст.
}

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

Gui +LastFound
Loop % LV_GetCount("Column")
{
    SendMessage, 4125, A_Index - 1, 0, SysListView321 ; 4125 - это LVM_GETCOLUMNWIDTH.
    MsgBox Ширина столбца %A_Index%-й составляет %ErrorLevel%.
}

LV_GetNext([StartingRowNumber, "Checked | Focused"]): возвращает номер следующей выделенной, отмеченной флажком или находящейся в фокусе строки. Если не найдено ни одной из перечисленных выше строк, возвращается ноль. Если параметр StartingRowNumber опущен или меньше 1, поиск начинается с начала списка. Иначе, поиск начинается со строки, находящейся после StartingRowNumber (строки, которая задана в качестве отправной точки). Если опущен второй параметр, функция ищет следующую выделенную строку. В противном случае, задайте "C" или "Checked" для нахождения следующей отмеченной флажком строки, или "F" или "Focused", чтобы найти строку, находящуюся в фокусе (во всем списке бывает только одна строка в фокусе, а в некоторых случаях - ни одной). В следующем примере сообщается о всех выделенных в ListView строках:

RowNumber = 0 ; Первая итерация цикла начинает поиск с начала списка.
Loop
{
    ; Возобновляем поиск со следующей после найденной в результате предыдущей итерации строки.
	RowNumber := LV_GetNext(RowNumber)
    if not RowNumber ; Возвращен ноль, следовательно выделенных строк больше нет.
        break
    LV_GetText(Text, RowNumber)
    MsgBox Номер следующей выделенной строки #%RowNumber%, ее первое поле содержит следующий текст: "%Text%".
}

Далее приведен альтернативный способ установить, отмечена ли строка с конкретным номером флажком:

Gui +LastFound
; 4140 - это LVM_GETITEMSTATE. 0xF000 - это LVIS_STATEIMAGEMASK.
SendMessage, 4140, RowNumber - 1, 0xF000, SysListView321
; Если RowNumber отмечен флажком, IsChecked присваивается истинно, в противном случае - ложь.
IsChecked := (ErrorLevel >> 12) - 1

LV_GetText(OutputVar, RowNumber [, ColumnNumber]): извлекает текст из заданных RowNumber и ColumnNumber, и сохраняет его в переменной OutputVar. Если параметр ColumnNumber опущен, то по умолчанию он становится равным 1 (текст в первом столбце). Если параметр RowNumber равен 0, извлекается заголовок столбца. Если текст длиннее 8191 символов, извлекаются только 8191 символа этого текста. Данная функция при успехе возвращает 1, при неудаче - 0 . При неудаче переменная OutputVar также принимает пустое значение.

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

Уведомления меток перехода (первичные)

В опциях элемента управления можно задать метку перехода например, gMySubroutine. Это приведет к тому, что метка MySubroutine будет автоматически запускаться каждый раз при выполнении в элементе управления каких-либо действий. Подпрограмма может обращаться ко встроенным переменным A_Gui и A_GuiControl. Более того, она может обращаться ко встроенной переменной A_GuiEvent, содержащей одну из приведенных далее строк или букв (чтобы обеспечить совместимость скрипта с будущими версиями AutoHotkey, не следует исходить из того, что эти значения являются единственно возможными).

DoubleClick: пользователь сделал двойной щелчок мышью по строке. Переменная A_EventInfo содержит номер строки.

R: пользователь сделал двойной щелчок правой кнопкой мыши в пределах элемента управления. В версиях 1.0.36.03 и выше переменная A_EventInfo содержит номер строки, находящейся в фокусе.

ColClick: пользователь щелкнул по заголовку столбца. Переменная A_EventInfo содержит номер столбца, присвоенный ему при создании, то есть в переменной не отражаются изменения в порядке столбцов, сделанные в результате их перетаскивания. Единственной возможной реакцией на щелчок по столбцу является сортировка по скрытому столбцу (нулевая ширина), содержащему данные в удобном для сортировки формате (например, целочисленные данные в формате YYYYMMDD). Подобный скрытый столбец может дублировать другой столбец, отображающий те же данные, но в более удобном для просмотра формате (например, MM/DD/YY). Например, скрипт при помощи функции LV_ModifyCol(3, 0) может скрыть третий столбец, затем с помощью функции LV_ModifyCol(2, "NoSort") отключить автоматическую сортировку в видимом втором столбце. Затем, в ответ на уведомление о щелчке по заголовку второго столбца (ColClick), скрипт с помощью функции LV_ModifyCol(3, "Sort") отсортирует элемент управления ListView по скрытому столбцу.

D: пользователь сделал попытку перетащить строку или иконку (в настоящее время встроенной поддержки перетаскивания строк или иконок нет). В версиях 1.0.36.03 и выше переменная A_EventInfo содержит номер строки, находящейся в фокусе. В версиях 1.0.44 и выше данное уведомление осуществляется даже без опции AltSubmit.

d (D в нижнем регистре): работает аналогично предыдущему уведомлению, но перетаскивание производится не левой, а правой клавишей мыши.

e (E в нижнем регистре): пользователь закончил редактирование первого поля строки (редактирование возможно только в том случае, если в опциях ListView задано -ReadOnly). В версиях 1.0.36.03 и выше переменная A_EventInfo содержит номер строки.

Уведомления меток перехода (вторичные)

Если в опциях элемента управления ListView задано слово AltSubmit, его метка перехода запускается чаще, а переменная A_GuiEvent может принимать следующие значения:

Normal: пользователь щелкнул по строке левой кнопкой мыши. В версиях 1.0.36.03 и выше переменная A_EventInfo содержит номер строки, находящейся в фокусе.

RightClick: пользователь щелкнул по строке правой кнопкой мыши. В версиях 1.0.36.03 и выше переменная A_EventInfo содержит номер строки, находящейся в фокусе. Как правило, в данном случае при щелчке по строке правой кнопкой мыши отображение меню лучше запретить. Вместо этого, используйте метку GuiContextMenu, так как она распознает также нажатие клавиши Apps. Пример:

GuiContextMenu: ; Запускается в ответ на щелчок правой клавишей мыши или на нажатие клавиши Apps.
; Эта проверка производится по желанию и отображает меню
; только в результате щелчка в пределах элемента управления  ListView.
if A_GuiControl <> MyListView  
    return
; Отображает меню согласно заданным координатам, A_GuiX и A_GuiY.
; Необходимость использования этих переменных объясняется тем,
; что меню появится в заданном месте даже при нажатии клавиши Apps:
Menu, MyContextMenu, Show, %A_GuiX%, %A_GuiY%
return

A: строка была выделена. По умолчанию это происходит в том случае, если по ней сделан двойной щелчок. В версиях 1.0.36.03 и выше переменная A_EventInfo содержит номер строки.

C: элемент управления ListView освободил мышь.

E: пользователь начал редактирование первого поля строки (редактирование возможно только в том случае, если в опциях ListView задано -ReadOnly). В версиях 1.0.36.03 и выше переменная A_EventInfo содержит номер строки.

F: фокус ввода с клавиатуры установлен на элемент управления ListView.

f (F в нижнем регистре): элемент управления ListView потерял фокус ввода.

I: элемент изменился. Строка изменилась в результате ее выделения / снятия выделения, установления рядом флажка / снятия флажка и т.д. При выделении новой строки, посылается по меньшей мере два уведомления: одно - после снятия выделения с предыдущей строки, другое - после выделения новой. В версиях 1.0.44 и выше переменная A_EventInfo содержит номер строки.

K: пользователь нажал клавишу, когда элемент управления находился в фокусе. Переменная A_EventInfo содержит виртуальный код клавиши, который представляет собой число от 1 до 255. Если клавиша буквенная, то на большинстве клавиатурных раскладок ее можно преобразовать в соответствующий символ с помощью функции Chr(A_EventInfo). Нажатия клавиши F2 скрипт получает всегда, вне зависимости от опции WantF2. Однако нажатие клавиши Enter он не получает. Для того чтобы получить нажатие клавиши Enter, используйте кнопку по умолчанию так, как описано ниже.

M: выделение прямоугольником. Пользователь начал выделять группу строк или иконок.

S: пользователь начал прокрутку элемента управления ListView.

s (S в нижнем регистре): пользователь закончил прокрутку элемента управления ListView.

ImageLists (средство, с помощью которого в ListView добавляются иконки)

Каталог изображений ImageList представляет собой набор иконок одинакового размера, хранящихся в памяти. Первоначально ImageList создается пустым. Затем скрипт добавляет иконки в каталог, неоднократно вызывая для этого функцию IL_Add(). Каждой иконке присваивается порядковый номер, начиная с 1. Именно к этому номеру обращается скрипт, когда ему нужно отобразить какую-либо определенную иконку в строке или в заголовке столбца. Далее приведен пример, демонстрирующий как поместить иконку в одну из строк ListView:

Gui, Add, ListView, h200 w180, Icon & Number|Description ; Создаем элемент управления ListView.
ImageListID := IL_Create(10) ; Создаем ImageList для десяти маленьких иконок.
LV_SetImageList(ImageListID) ; Присваиваем созданный ImageList текущему элементу управления ListView.
Loop 10 ; Загружаем из DLL в ImageList группу иконок.
    IL_Add(ImageListID, "shell32.dll", A_Index) ; Опускаем путь к DLL, чтобы скрипт работал и на Windows 9x.
Loop 10 ; Добавляем в ListView строки (одну строку для каждой иконки, только в целях демонстрации).
    LV_Add("Icon" . A_Index, A_Index, "n/a")
LV_ModifyCol("Hdr") ; Автоматически подбираем ширину столбцов.
Gui Show
return

GuiClose: ; Заканчиваем работу скрипта при закрытии окна GUI элемента управления ListView.
ExitApp

IL_Create([InitialCount, GrowCount, LargeIcons?]): создает новый ImageList, первоначально пустой, и возвращает его уникальный ID номер (или 0 при неудаче). Параметр InitialCount - это количество иконок, которые должны быть сразу же добавлены в каталог (если InitialCount опущен, то по умолчанию он принимает значение 2). Параметр GrowCount - количество иконок, которые добавляются в каталог каждый раз при превышении текущей вместимости списка (если GrowCount опущен, то по умолчанию он принимает значение 5). Параметр LargeIcons должен представлять собой числовое значение: если он не равен 0, то иконки, входящие в ImageList, будут большими; если он равен 0, то иконки, входящие в ImageList, будут маленькими. Размеры добавленных в каталог иконок автоматически приводятся в соответствие с размерами маленьких и больших иконок системы.

LV_SetImageList(ImageListID [, 0|1|2]): данную функцию обычно вызывают до добавления строк в элемент управления ListView. Иконки, содержащиеся в создаваемом ею ImageList, предназначены для отображения в строках элемента управления ListView (а также опционально в столбцах). Параметр ImageListID представляет собой число, возвращенное в результате предыдущего вызова функции IL_Create(). Если второй параметр опущен, тип иконок в ImageList определяется автоматически (большой или маленький). В противном случае, задайте 0 для больших иконок, 1 для маленьких и 2 для ассоциированных иконок (ассоциированные иконки в настоящее время прямо не поддерживаются, однако их можно использовать с помощью команды SendMessage).

В элементе управления ListView может быть до двух каталогов ImageLists: с маленькими иконками и/или с большими. Это удобно, если скрипт позволяет переключаться с/на отображение больших иконок. Для того чтобы в элементе управления ListView задать второй ImageList, вызовите функцию LV_SetImageList() во второй раз, задав при этом параметр ImageListID для второго каталога. Если элемент управления ListView имеет оба каталога (как с большими иконками, так и с маленькими), необходимо убедиться, что иконки в обоих каталогах располагаются в одном и том же порядке, так как при обращении и к маленькой, и к большой версии какой-либо иконки, используется один и тот же ID номер.

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

Если функция LV_SetImageList() была выполнена успешно, она возвращает ImageListID, который ранее ассоциировался с элементом управления ListView (или 0 в противном случае). Нормой является разрушение (освобождение) любого подобного присоединенного каталога ImageList при помощи функции IL_Destroy(ImageListID).

IL_Add(ImageListID, Filename [, IconNumber, ResizeNonIcon?]): Добавляет иконку или рисунок в заданный ImageListID и возвращает индекс новых иконок (1 - первая иконка, 2 - вторая и т.д.). Параметром Filename является имя файла иконки (.ICO), курсора (.CUR) или анимированного курсора (.ANI) (анимация в анимированных курсорах при отображении их в элементе управления ListView не работает). Другими источниками иконок являются следующие типы файлов: EXE, DLL, CPL, SCR, а также в другие типы файлов, содержащих иконки. Для того, чтобы использовать какую-либо группу иконок, помимо первой, необходимо задать номер этой группы в качестве параметра IconNumber. В примере, приведенном ниже, используется иконка по умолчанию из второй группы: IL_Add(ImageListID, "C:\My Application.exe", 2).

Также могут быть загружены изображения, не являющиеся иконками, с такими расширениями, как BMP, GIF и JPG. Однако в этом случае необходимо задать последние два параметра, чтобы обеспечить корректную работу: параметр IconNumber должен представлять собой номер цвета (для большинства картинок лучшим выбором является белый цвет (0xFFFFFF)); параметр ResizeNonIcon не должен равняться нулю, если необходимо, чтобы картинка была уменьшена до размера одной иконки, или должен быть равен нулю, для того чтобы изображение было поделено на столько иконок, сколько уместятся на этом изображении.

Все операционные системы поддерживают изображения с расширением GIF, JPG, BMP, ICO, CUR и ANI. Кроме уже перечисленных расширений, в Windows XP и других более поздних операционных системах Windows, поддерживаются такие форматы, как PNG, TIF, Exif, WMF и EMF. Чтобы более ранние, чем Windows XP, операционные системы поддерживали эти форматы, нужно скопировать файл GDI+ DLL (предоставляемый компанией Microsoft бесплатно) в папку AutoHotkey.exe (однако если речь идет о скомпилированном скрипте, скопируйте DLL в папку скрипта). Чтобы скачать DLL, на сайте www.microsoft.com в окошке поиска наберите "gdi redistributable".

IL_Destroy(ImageListID): удаляет указанный ImageList. При успешном удалении возвращает 1, при неудаче - 0. Как правило, в разрушении каталогов ImageList необходимости нет, поскольку, будучи прикрепленными к элементу управления ListView, они автоматически уничтожаются вместе с разрушением ListView или его родительского окна. Однако если ListView использует каталоги ImageList совместно с другими ListView (если в опциях задано 0x40), скрипт должен явно разрушить ImageList после разрушения всех ListViews, использующих этот каталог. Подобным образом, если скрипт заменяет один из старых каталогов ImageLists элемента управления ListView новым, он должен уничтожить старый.

Примечания к ListView

Команда Gui Submit в элементе управления ListView не действует. Следовательно, для хранения каких-либо данных в скрипте можно использовать переменную, ассоциированную с элементом управления ListView, при этом не беспокоясь, что она когда-либо будет перезаписана.

После того, как столбец отсортирован - либо после щелчка мышью по заголовку, либо в результате вызова скриптом функции LV_ModifyCol(1, "Sort") - любые строки, добавленные позже, появятся в нижней части списка, не подчиняясь порядку сортировки. Исключением являются стили Sort и SortDesc, которые попытаются передвинуть только что добавленные строки на их надлежащие места.

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

Gui, Add, Button, Hidden Default, OK
...
ButtonOK:
GuiControlGet, FocusedControl, FocusV
if FocusedControl <> MyListView
    return
MsgBox % "Нажата клавиша Enter. Номер строки, находящейся в фокусе - " . LV_GetNext(0, "Focused")
return

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

Несмотря на то, что в каждом поле элемента управления ListView можно сохранить текст какой угодно длины, на экране будут отображены только первые 260 символов.

Хотя максимальное число строк в ListView ограничено только имеющейся в наличии системной памятью, можно значительно увеличить производительность при добавлении строк. О том, как это сделать, говорится в описании опции Count.

Чтобы в элементе управления ListView в качестве фона использовать рисунок, создайте после ListView элемент управления Picture и задайте в опциях рисунка 0x4000000 (стиль WS_CLIPSIBLINGS).

Не рекомендуется вставлять или удалять столбцы непосредственно с помощью команды SendMessage, так как столбцы потеряют синхронизацию с настройками сортировки, которые программа поддерживает для каждого столбца. Вместо этого, используйте встроенные функции столбцов.

Windows 95 и NT4: Если в системе не установлена версия 4.70 или выше библиотек Comctl32.dll, Shell32.dll и Shlwapi.dll, поставляемых с различными обновлениями и приложениями, как например, Internet Explorer версии 3.0 и выше, функциональность ListView будет ограничена, а некоторые возможности будут работать некорректно.

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

Чтобы извлечь текст из внешних элементов управления ListView (из тех, которые не принадлежат скрипту), используйте команду "ControlGet List".

Примеры

; Выделяем или снимаем выделение со всех строк, задав для этого 0 в качестве номера строки:
LV_Modify(0, "Select") ; Выбираем все.
LV_Modify(0, "-Select") ; Снимаем выделение со всех строк.
LV_Modify(0, "-Check") ; Снимаем галочки со всех флажков.

; Автоматически подбираем размер столбцов под их содержимое.
LV_ModifyCol() ; В данном режиме нет параметров.
; ГЛАВНЫЙ ПРИМЕР
; Приведенный далее пример скрипта сложнее, чем тот, который был рассмотрен ранее.
; Он отображает файлы в выбранной пользователем папке, причем
; для каждого файла задается иконка, ассоциированная с типом файла.
; Чтобы вызвать контекстное меню, можно щелкнуть два раза по файлу или
; щелкнуть правой кнопкой мыши по одному или нескольким файлам.

; Разрешаем пользователю увеличить окно до максимального размера
; или изменить размер окна растаскиванием:
Gui +Resize

; Создаем несколько кнопок:
Gui, Add, Button, Default gButtonLoadFolder, Загрузить папку
Gui, Add, Button, x+20 gButtonClear, Очистить список
Gui, Add, Button, x+20 gButtonSwitchView, Переключить отображение

; Создаем элемент управления ListView и в нем столбцы:
Gui, Add, ListView, xm r20 w700 vMyListView gMyListView, Имя|В папке|Размер (KB)|Тип
; В целях сортировки указываем, что содержимое столбца Размер принадлежит к целым числам.
LV_ModifyCol(3, "Integer")

; Создаем каталог ImageList, чтобы отобразить в элементе управления ListView несколько иконок.
ImageListID1 := IL_Create(10)
; Приводим каталог больших иконок в соответствие со каталогом маленьких иконок.
ImageListID2 := IL_Create(10, 10, true)

; Присоединяем к ListView каталог ImageLists:
LV_SetImageList(ImageListID1)
LV_SetImageList(ImageListID2)

; Создаем всплывающее меню, которое бужет использованио в качестве контекстного меню:
Menu, MyContextMenu, Add, Open, ContextOpenFile
Menu, MyContextMenu, Add, Properties, ContextProperties
Menu, MyContextMenu, Add, Clear from ListView, ContextClearRows
; В контекстном меню выделяем слово "Open" полужирным шрифтом, чтобы показать,
; что двойной щелчок мыши по папке или файлу выполнит именно эту команду.
Menu, MyContextMenu, Default, Open

; Отображаем окно и завершаем работу. ОС уведомит скрипт о каждом
; правомерном действии, совершенном пользователем.
Gui, Show
return

ButtonLoadFolder:
Gui +OwnDialogs ; Вынуждает пользователя закрыть следующий диалог прежде, чем использовать главное окно.
FileSelectFolder, Folder,, 3, Выберите папку для чтения:
if not Folder ; Пользователь закрыл диалог.
    return

; Проверяем, является ли последний символ в имени папки обратным слешем, так же, как в корневых
; каталогах (например, C:\). Если является, удаляем его, чтобы в дальнейшем
; не допустить появление двойного обратного слеша.
StringRight, LastChar, Folder, 1
if LastChar = \
    StringTrimRight, Folder, Folder, 1 ; Удаляем замыкающий обратный слеш.

; Убеждаемся, что переменная способна вместить самый длинный путь к файлу. Это необходимо,
; поскольку функция ExtractAssociatedIconA() должна иметь возможность сохранить в переменной новое имя файла.
VarSetCapacity(Filename, 260)
sfi_size = 352
VarSetCapacity(sfi, sfi_size)

; Извлекаем список имен файлов из выбранной папки и добавляем их в элемент управления ListView:
; Увеличиваем быстродействие путем отключения на время загрузки обновления изображения.
GuiControl, -Redraw, MyListView
Loop %Folder%\*.*
{
    ; Обязательно сохраняем значение встроенной переменной в переменную,
    ; доступную для записи, с тем, чтобы использовать его далее.
    FileName := A_LoopFileFullPath

    ; Создаем уникальный ID расширения, чтобы избежать символов,
	; использование которых в именах переменных запрещено, например, тире.
	; Этот метод уникального ID работает лучше, так как для поиска элемента
	; в массиве не требуется цикл.
	SplitPath, FileName,,, FileExt ; Получаем расширение файла.
	if FileExt in EXE,ICO,ANI,CUR
	{
		ExtID := FileExt ; Особый ID как заполнитель.
		; Помечаем IconNumber как не найденный, для того чтобы каждый тип файла мог иметь уникальную иконку.
		IconNumber = 0
	}
	else ; Рассчитываем уникальный ID для нескольких других расширений/типов файлов.
	{
		ExtID = 0 ; Инициализируем переменную, чтобы оперировать расширениями более короткими, чем другие.
		Loop 7    ; Ограничиваем расширение семью символами, чтобы оно уместилось в 64-битном значении.
		{
			StringMid, ExtChar, FileExt, A_Index, 1
			if not ExtChar  ; Больше никаких символов.
				break
			; Выводим уникальный ID, задавая для каждого символа особый двоичный разряд.
			ExtID := ExtID | (Asc(ExtChar) << (8 * (A_Index - 1)))
		}
		; Проверяем, есть ли у этого расширения файла иконка в ImageLists. Если есть,
		; можно избежать нескольких вызовов, а производительность загрузки существенно увеличится,
		; особенно в папке, содержащей сотни файлов:
		IconNumber := IconArray%ExtID%
	}
	if not IconNumber ; Данное расширение еще не имеет иконки, поэтому загружаем ее.
	{
		; Получаем маленькую иконку высокого качества, ассоциированную с данным расширением файла.
		if not DllCall("Shell32\SHGetFileInfoA", "str", FileName, "uint", 0
		, "str", sfi, "uint", sfi_size, "uint", 0x101)  ; 0x101 is SHGFI_ICON+SHGFI_SMALLICON
			; Задаем переменной значение, выходящее за рамки допустимых значений,
			; чтобы отобразить пустую иконку.
			IconNumber = 9999999
		else ; Загрузка иконки прошла успешно.
		{
			; Извлекаем из структуры элемент hIcon.
			hIcon = 0
			Loop 4
				hIcon += *(&sfi + A_Index-1) << 8*(A_Index-1)
			; Добавляем HICON непосредственно в каталоги маленьких и больших иконок.
			; Используем ниже +1, чтобы преобразовать возвращенный индекс так,
			; чтобы отсчет начинался не с 0, а с 1.
			IconNumber := DllCall("ImageList_ReplaceIcon", "uint", ImageListID1, "int", -1, "uint", hIcon) + 1
			DllCall("ImageList_ReplaceIcon", "uint", ImageListID2, "int", -1, "uint", hIcon)
			; После того, как иконка скопирована в ImageLists, оригинал необходимо уничтожить:
			DllCall("DestroyIcon", "uint", hIcon)
			; Помещаем иконку в кэш, чтобы сэкономить память и улучшить производительность при загрузке.
			IconArray%ExtID% := IconNumber
		}
	}

	; Создаем в элементе управления ListView новую строку и присваиваем ей номер иконки, заданной выше.
	LV_Add("Icon" . IconNumber, A_LoopFileName, A_LoopFileDir, A_LoopFileSizeKB, FileExt)
}
GuiControl, +Redraw, MyListView ; Снова разрешаем обновление изображения (запрещенное выше).
LV_ModifyCol() ; Автоматически подгоняем размер столбцов под их содержимое.
LV_ModifyCol(3, 60) ; Немного расширяем столбец Size, чтобы был виден его заголовок.
return

ButtonClear:
LV_Delete() ; Очищаем ListView, но для простоты не трогаем кэш иконок. 
return

ButtonSwitchView:
if not IconView
	GuiControl, +Icon, MyListView    ; Переключаемся на режим отображения иконок.
else
	GuiControl, +Report, MyListView  ; Переключаемся обратно на просмотр в режиме таблицы.
IconView := not IconView             ; Меняем для следующего раза направление переключения.
return

MyListView:
if A_GuiEvent = DoubleClick  ; Есть много других возможных значений, которые может проверить скрипт.
{
	LV_GetText(FileName, A_EventInfo, 1) ; Получаем текст из первого поля.
	LV_GetText(FileDir, A_EventInfo, 2)  ; Получаем текст из второго поля.
	Run %FileDir%\%FileName%,, UseErrorLevel
	if ErrorLevel
		MsgBox "%FileDir%\%FileName%" невозможно открыть.
}
return

GuiContextMenu: ; Запускается в ответ на щелчок правой клавишей мыши или на нажатие клавиши Apps.
; Отображаем меню только в ответ на щелчки в пределах элемента управления ListView.
if A_GuiControl <> MyListView
	return
; Отображает меню согласно заданным координатам, A_GuiX и A_GuiY.  
; Необходимость использования этих переменных объясняется тем,
; что меню появится в заданном месте даже при нажатии клавиши Apps:
Menu, MyContextMenu, Show, %A_GuiX%, %A_GuiY%
return

ContextOpen: ; Пользователь выбрал в контекстном меню пункт 'Открыть'.
ContextProperties: ; Пользователь выбрал в контекстном меню пункт 'Свойства'.
; Для простоты работаем только со строкой, находящейся в фокусе, а не со всеми выделенными строками.
FocusedRowNumber := LV_GetNext(0, "F") ; Находим строку, находящуюся в фокусе.
if not FocusedRowNumber ; Строк, находящихся в фокусе, нет.
	return
LV_GetText(FileName, FocusedRowNumber, 1) ; Получаем текст из первого поля.
LV_GetText(FileDir, FocusedRowNumber, 2)  ; Получаем текст из второго поля.
IfInString A_ThisMenuItem, Open ; Пользователь выбрал в контекстном меню пункт 'Открыть'.
	Run %FileDir%\%FileName%,, UseErrorLevel
else ; Пользователь выбрал в контекстном меню пункт 'Свойства'.
	Run Properties "%FileDir%\%FileName%",, UseErrorLevel
if ErrorLevel
	MsgBox Невозможно выполнить указанное действие с "%FileDir%\%FileName%".
return

ContextClearRows: ; Пользователь выбрал в контекстном меню пункт 'Очистить'.
RowNumber = 0 ; Первая итерация начинает поиск с начала списка.
Loop
{
	; Так как при удалении строки уменьшается RowNumber всех строк, расположенных ниже,
	; вычитаем 1, чтобы поиск производился по тем же номерам строк, которые были найдены
	; ранее (в случае, если выделяются соседние строки):
	RowNumber := LV_GetNext(RowNumber - 1)
	if not RowNumber ; Возвращен ноль, следовательно выделенных строк больше нет.
		break
	LV_Delete(RowNumber) ; Удаляем строку из элемента управления ListView.
}
return

GuiSize: ; Растягиваем или сжимаем элемент управления ListView в ответ на изменение размера окна.
if A_EventInfo = 1 ; Окно минимизировано.  Никаких действий не требуется.
	return
; В противном случае, размер окна изменен или увеличен до максимума.
; Изменяем размер элемента управления ListView в соответствии с изменением размера окна.
GuiControl, Move, MyListView, % "W" . (A_GuiWidth - 20) . " H" . (A_GuiHeight - 40)
return

GuiClose: ; После закрытия окна автоматически завершаем работу скрипта.
ExitApp

Перейти на главную страничку сайта (список статей, файлы для скачивания)

© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.