wincc.f  Оконная библиотека: общие элементы управления


1. Индикатор
2. Ползунки
3. Спины
4. Анимация
5. Календарь
6. Всплывающие подсказки
7. Общие свойства контейнеров
8. Заголовки
9. Закладки
10. Панели инструментов
11. Деревья
12. Списки иконок
       Колонки



В третьей части оконной библиотеки собраны так называемые общие элементы управления - элементы, введенные в Windows 95 и более поздних версиях. Третью часть можно считать незаконченной, поскольку степень проработки различных элементов сильно различается. Некоторые элементы не реализованы вообще (ipcontrol, rebar, richedit, pager), другие - с разной степенью полноты. Сделано это было из-за большой сложности многих элементов и изобилия их возможностей. Предполагается, что опыт практической работы подскажет, что именно стоит добавить в эту часть библиотеки.

1. Индикатор

progress ( -- ctl )

Создать индикатор и установить ему пределы от 0 до 100.

progress-minmax ( min max ctl -- )

Установить нижний и верхний предел для индикатора.

+pos! ( n ctl -- )

Продвинуть индикатор на n единиц.


2. Ползунки

trackbar ( style -- ctl )

Создать ползунок указанного стиля. По умолчанию устанавливаются пределы от 0 до 100. У ползунка работают стандартные свойства -pos (позиция), -min, -max (нижний и верхний пределы).

Стили ползунков
tbs_horz Горизонтальный ползунок
tbs_vert Вертикальный ползунок
tbs_autoticks Будут автоматически проставлены отметки
tbs_noticks Отметок не будет
tbs_top Отметки сверху (для горизонтальных ползунков)
tbs_bottom Отметки снизу (для вертикальных ползунков)
tbs_left Отметки слева (для горизонтальных ползунков)
tbs_right Отметки справа (для горизонтальных ползунков)
tbs_enableselrange Можно будет выбирать не одну отметку, а целый диапазон
tbs_fixedlength Размер бегунка не будет меняться
tbs_nothumb Бегунок не будет показан вообще

3. Спины

updown ( style -- ctl )

Создать спин указанного стиля с пределами 0..100. У спина работают стандартные свойства -pos (позиция), -min, -max (нижний и верхний пределы).

add-updown ( style ctl -- )

Добавляет спин-симбионт указанного стиля к элементу управления. Размер элемента остается тем же, но рабочая область сокращается за счет спина. Спин посылает элементу уведомляющие сообщения.

Стили спинов
uds_alignleft Спин расположен в окне хозяина слева
uds_alignright Спин расположен в окне хозяина справа
uds_setbuddyint Спин будет сам менять заголовок своего хозяина, указывая свою текущую позицию
uds_nothousands В заголовке хозяина тысячи не будут разделяться.
uds_arrowkeys Спин будет обрабатывать клавиши "стрелка вверх" и "стрелка вниз"
uds_horz Горизонтальный спин
uds_wrap При достижении верхнего предела спин будет перескакивать на нижний и наоборот

4. Анимация

anime ( z/n -- ctl )

Создать элемент-анимацию. Входной аргумент может быть именем файла в формате .AVI, именем или номером ресурса.

start-anime ( ctl -- )

Запустить анимацию.

stop-anime ( ctl -- )

Остановить анимацию.


5. Календарь

calendar ( style -- ctl)

Создать календарь указанного стиля. Помимо стандартных свойств -color, -bgcolor, -font работает также свойство -selected. Свойство -command вызывается при выборе одного из дней (сообщение mcn_select).
Календарь не работает в Windows ниже 98.

Стили календаря
mcs_daystate Календарь будет запрашивать информацию о выделенных днях через сообщение mcn_getdaystate
mcs_multiselect Можно будет выбирать не один день, а целый промежуток
mcs_notoday Календарь не будет показывать внизу сегодняшний день
mcs_notodaycircle Сегодняшний день не будет обведен кружком
mcs_weeknumbers Дополнительно будут показаны номера недель

6. Всплывающие подсказки

create-tooltip ( style -- )

Создает элемент-всплывающую подсказку, общую для всей программы. Подсказка индивидуальным элементам присваивается (и читается) через свойство -tooltip.

Стили подсказок
tts_alwaystip Подсказка будет появляться, даже если элемент неактивен.
tts_noprefix Из подсказки будут выкидываться символы амперсанда "&"
tts_noanimate Подсказка появится без анимационных эффектов
tts_balloon Всплывающая подсказка будет не квадратной, а специальной формы: похожая на рамку, в которую на карикатурах обычно вписывают текст персонажа

0 create-tooltip
GRID
" Кнопка" button (/ -tooltip " Подсказка для кнопки" /) |
" Метка" label (/ -tooltip " Подсказка для метки" /) |
GRID;
В Windows ниже XP подсказки на полях ввода почему-то не всплывают.


7. Общие свойства контейнеров

Оставшиеся элементы управления объединены под общим именем контейнеров. Они обычно содержат какие-то подъэлементы, которые, собственно, и представляют интерес. Для подъэлемента типично иметь свой текст, картинку (иногда даже не одну), собственные установки и произвольный параметр, устанавливаемый программистом для хранения связанных с подъэлементом данных. Картинки, как правило, определяются в виде индексов в связанном с контейнером списком картинок, однако возможно также указание констант none (нет картинки) и callback (каждый раз запрашивать картинку через соответствующее уведомление; работает не во всех элементах управления). Аналогично, если у подъэлемента нету текста, следует указывать константу none.

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



-imagelist

Список картинок, присвоенный контейнеру. Чтение и запись осуществляются следующим образом: -imagelist@ ( what ctl -- ), -imagelist! ( i what ctl -- ). Параметр what - код списка картинок, зависящий от конкретного элемента управления. Например, для закладок он всегда равен 0, поскольку у закладок только один список. У панелей управления есть три разных списка - 0, 1, 2.

-iwidth, -iheight

Ширина и высота подъэлемента.

-iflags

Флаги подъэлемента.

-itext

Текст, присвоенный подъэлементу.

-iimage

Рисунок подъэлемента.

-iparam

Параметр подъэлемента.

add-item ( ... n ctl -- )

Добавляет к контейнеру ctl подъэлемент с кодом n. Параметры подъэлемента и код зависят от типа контейнера.

delete-item ( i ctl -- )

Удаляет подъэлемент i из контейнера.

item-count ( ctl -- n)

Возвращает число подъэлементов в контейнере.


8. Заголовки

header ( style -- )

Создать заголовок указанного стиля.

Стили заголовка
hds_buttons Подъэлементы заголовка будут вести себя как кнопки
hds_hidden Предполагается, что заголовок будет скрытым.
Стили подъэлементов заголовка
hdf_left Подъэлементы заголовка будут выравнены влево.
hdf_right Подъэлементы заголовка будут выравнены вправо.
hdf_center Подъэлементы заголовка будут выравнены по центру.

add-item ( flags text bmp param i headerctl -- )

Добавить новый подъэлемент заголовка. Выравнивание текста подъэлемента устанавливается с помощью flags, а в дальнейшем можеть быть изменено с помощью свойства -align.


9. Закладки

tabcontrol ( style -- ctl )

Создает новый элемент - набор закладок. Помимо стандартных свойств, можно использовать свойство -selected.

Стили закладок
tcs_buttons Подъэлементы-закладки будут вести себя как кнопки
tcs_fixedwidth Все закладки будут равной ширины
tcs_focusnever Закладки никогда не получат фокуса
tcs_focusonbuttondown Закладка получит фокус только при нажатии на нее
tcs_forceiconleft Иконки в каждой закладке будут стоять слева (только для tcs_fixedwidth)
tcs_forcelabelleft Заголовки будут стоять сразу рядом с иконками, выравненные по левому краю (только для tcs_fixedwidth)
tcs_multiline Закладки при необходимости будут располагаться в несколько рядов
tcs_ownerdrawfixed Закладки должны отрисовываться родительским окном по специальному уведомлению
tcs_raggedright Закладки не будут заполнять весь ряд
tcs_rightjustify Ширина закладок будет увеличена так, чтобы они заполняли весь ряд
tcs_singleline Закладки будут выставлены в один ряд
tcs_tabs Подъэлементы будут отрисовываться как закладки, а весь ряд будет обведен рамкой
tcs_tooltip С каждой закладкой будет связано всплывающее окошко

add-item ( grid text image i ctl -- )

Добавить новый подъэлемент-закладку. grid - сетка, которая будет показываться на соответствующей странице закладки, text - название закладки, image - номер иконки закладки в ее списке картинок, i - номер закладки.


10. Панели инструментов

toolbar ( style -- ctl)

Создать панель инструментов указанного стиля. Как правило, удобнее пользоваться словом create-toolbar.

create-toolbar ( style win -- )

Создать безымянную панель инструментов и присоединить ее к указанному окну. У окна может быть только одна панель вверху. Она доступна через свойство окна -toolbar.

Стили панелей инструментов
tbstyle_altdrag Кнопки панели можно будет перетягивать при нажатой клавише Alt
tbstyle_tooltips С кнопками будут связаны всплывающие окошки
tbstyle_wrapable Кнопки панели можно будет ставить в несколько рядов
tbstyle_flat "Плоский" стиль: кнопки и сама панель прозрачны
tbstyle_list "Плоская" панель с надписями справа от иконки
tbstyle_transparent Панель будет прозрачной, а кнопки на ней - нет
Стили кнопок на панели инструментов
btns_autosize Размер кнопки не фиксируется, а высчитывается по ее картинке и тексту
btns_button Обычная кнопка
btns_dropdown Кнопка со стрелкой справа. Стрелка отделена от основной кнопки
btns_wholedropdown Кнопка со стрелкой справа
btns_showtext На кнопке будет показываться текст
btns_noprefix Текст на кнопке не будет сопровождаться префиксом быстрой клавиши
btns_check Кнопка с двумя состояниями нажата/не нажата
btns_checkgroup Радиокнопка. Может быть нажата только одна кнопка из группы

toolbar-sizes ( buttw butth imagew imageh ctl -- )

Задает нестандартный размер кнопок панели (buttw, butth) и изображений на кнопках (imagew, imageh). Работает, только если на панели нет еще ни одной кнопки.

add-item ( text image style proc n ctl -- )

Добавить новую кнопку в панель инструментов. У каждой кнопки могут быть свои стили, типичные из которых - tbstyle_button и tbstyle_dropdown. proc - процедура, которая будет вызвана при нажатии кнопки. n - в отличие от других контейнеров, не номер подъэлемента, а его произвольный индекс. Он задается программистом и служит для отличия одного подъэлемента от другого. У подъэлементов панели инструментов есть лишнее свойство -istate - состояние кнопки (нажата, выбрана и др.).

separate ( ctl -- )

Добавить на панель разделитель кнопок.

add-std-bitmap ( id ctl -- n )

Загрузить в панель стандартный набор картинок id. Возвращается номер первой загруженной картинки во внутреннем списке панели.

add-res-bitmaps ( cnt id ctl -- n)

Загрузить cnt из ресурса с номером id. Возвращается номер первой загруженной картинки во внутреннем списке панели. Ресурсы должны быть в формате BMP, 8-битовые, со стандартной системной палитрой (в Фотошопе называется System (Windows), нулевой цвет в палитре считается прозрачным.

У панели инструментов не один список картинок, а целых три: what - код списка: 0 - обычные картинки, 1 - картинки, показываемые, когда на кнопку наводится курсор мыши, 2 - картинки отключенных кнопок.

dropdown? ( -- ? )

Если к кнопке добавлена маленькая стрелка (стиль tbstyle_dropdown), то процедура обработки -command вызывается и тогда, когда нажата сама кнопка, и тогда, когда нажата только стрелка. Различить эти случаи можно с помощью слова dropdown?, возвращающего TRUE, если нажата только стрелка. Кстати, если при обработке понадобится код кнопки, на которую нажали (а это бывает нужно, когда одна процедура обрабатывает события от нескольких кнопок сразу), узнать его можно следующим образом: dropdown? IF wparam ELSE lparam @ THEN


11. Деревья

treeview ( style -- ctl )

Создает элемент-дерево указанного стиля.

Стили деревьев
tvs_haslines Листья будут соединены линиями с родителем
tvs_linesatroot Листья будут соединены линиями с корнем дерева
tvs_hasbuttons К ветвям будет добавлена кнопка "свернуть/развернуть"
tvs_editlabels Можно будет менять заголовки листьев
tvs_showselalways Выбранный подъэлемент останется выделенным, даже если дерево потеряет фокус

add-item ( text image selectimage param after parent ctl -- hitem )

Добавляет новый подъэлемент к дереву как ветвь подъэлемента parent, стоящую после подъэлемента after. Если родитель равен 0, подъэлемент добавляется в корень дерева. after может быть обозначено константами tvi_first - добавить первым, tvi_last - добавить последним, tvi_sort - добавить в порядке сортировки. selectimage - рисунок выбранного элемента. Возвращает дескриптор, который следует использовать для доступа к созданному подъэлементу.

walk-tree ( proc from ctl -- )

Обойти поддерево, начиная с ветви from. Для каждого подъэлемента будет вызвана процедура proc ( child ctl -- ).


12. Списки иконок

listview ( style -- ctl )

Создает новый элемент - список иконок. Свойство -command будет вызываться при получении сообщения lvn_columnclick.

Стили списков иконок
lvs_alignleft В режимах "значки" и "маленькие значки" иконки будут выравнены по левому края окна
lvs_aligntop В режимах "значки" и "маленькие значки" иконки будут выравнены по верхнему края окна
lvs_autoarrange В режимах "значки" и "маленькие значки" иконки будут выравниваться автоматически
lvs_editlabels Можно будет редактировать подписи под иконками
lvs_icon Режим "значки"
lvs_smallicon Режим "маленькие значки"
lvs_list Режим "список"
lvs_report Режим "таблица"
lvs_nocolumnheader В режиме "таблица" не будет показываться заголовок
lvs_nolabelwrap В режиме "значки" подпись под иконкой будет занимать только одну строку
lvs_noscroll Запрещает прокрутку иконок в окне
lvs_nosortheader Заголовки колонок не будут работать как кнопки
lvs_ownerdrawfixed Отрисовка элементов возлагается на родительское окно (только режим "таблица")
lvs_shareimagelist Используемый список картинок не будет уничтожаться при уничтожении списка иконок
lvs_showselalways Всегда показывать выбранный подъэлемент, даже если список потерял фокус
lvs_singlesel Может быть выбран только один подъэлемент
lvs_sortascending Подъэлементы будут автоматически сортироваться по подписям
lvs_sortdescending Подъэлементы будут автоматически сортироваться по подписям в обратном порядке

add-item ( text image param ctl -- )

Добавляет новый подъэлемент к списку иконок.

prepare-listview ( n ctl -- )

Подготавливает список к приему n дополнительных подъэлементов. Повышает эффективность add-item.

clear-listview ( ctl -- )

Очищает список, удаляя из него все элементы.

arrange-listview ( type ctl -- )

Выравнивает иконки в пределах элемента. Возможные значения выравнивания: lva_alignleft - по левому краю окна, lva_aligntop - по верхнему краю окна, lva_default - согласно текущей настройке, lva_snaptogrid - по ближайшему узлу сетки элемента.

icon-view, smallicon-view, list-view, report-view ( ctl -- )

Переключает список иконок в различные режимы отображения: "крупные значки", "мелкие значки", "список", "таблица".

-selected ( -- n)

Свойство возвращает информацию о выделенных элементах: -1 - не выделено ничего; >-1 - индекс выделенного подъэлемента; <-1 - число (по модулю) выделенных подъэлементов.

walk-selected ( xt ctl -- )

Обходит все выбранные подъэлементы, вызывая для каждого xt ( i -- )

lv-param>i ( param ctl -- i/-1)

Находит индекс подъэлемента по его параметру.

Колонки

У каждого подъэлемента списка иконок могут быть дополнительные значения, которые можно увидеть в многоколоночном режиме "таблица". Доступ к этим значениям (а это обыкновенные строки) выполняется через свойство -isubitem: -isubitem@ ( addr i subitemno ctl -- ), -isubitem! ( z i subitemno ctl -- )



add-column ( text subitem i ctl -- )

Добавляет i-тую колонку, присваивая ей значение subitem. Доступ к настройкам колонки осуществляется через свойства -ctext, -cflags, -cwidth, csubitem, -cimage, -corder

del-column ( i ctl -- )

Удалить i-тую колонку.

Пример работы с общими элементами управления