Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга о KOL.doc
Скачиваний:
29
Добавлен:
30.04.2019
Размер:
1.77 Mб
Скачать

3.16.3. Свойства кнопок (toolbar)

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

TBButtonEnabled[ i ] - кнопка "доступна";

TBButtonVisible[ i ] - кнопка видимая (при скрытии кнопки, находящиеся от нее справа сдвигаются на ее место);

TBButtonChecked[ i ] - кнопка "вдавлена" (имеет смысл использовать только для фиксируемых кнопок, при создании которых использовался префикс '-' или '+');

TBButtonMarked[ i ] - кнопка подсвечена (этому свойству так же можно присваивать значение true или false);

TBButtonPressed[ i ] - кнопка "нажата";

TBButtonText[ i ] - текст надписи на кнопке;

TBButtonImage[ i ] - индекс значка для кнопки;

TBButtonSeparator[ i ] - кнопка является "разделительной" (фактически, изображается более узкая разделительная полоска - плоская или вдавленная);

TBButtonRect[ i ] - возвращает прямоугольник, занимаемый на линейке кнопкой;

TBButtonWidth[ i ] - возвращает (и позволяет изменить) ширину кнопки;

TBButtonAtPos( X, Y ) - возвращает дескриптор кнопки, находящейся на линейке в точке с заданными координатами (значение -1 возвращается при отсутствии кнопок в этой точке);

TBBtnIdxAtPos( X, Y ) - аналогично предыдущему методу, но возвращает индекс кнопки;

TBMoveButton( i, j ) - перемещает кнопку с индексом i в позицию j;

3.16.4. Некоторые особенности работы с инструментальной линейкой (toolbar)

Для того, чтобы изменить высоту горизонтально расположенной линейки, в OS Windows приходится изменять высоту пиктограмм, и другого способа для управления высотой данного визуального элемента нет. Даже если вы не используете пиктограммы, но хотите увеличить высоту линейки, создайте список изображений (image list) с шириной изображения 1 пиксель (ImgWidth = 1), и желаемой высотой, и назначьте его в качестве набора пиктограмм для линейки, даже не добавляя в этот список изображения ни одной картинки. В случае использования MCK достаточно бросить на форму компонент TKOLImageList, задать ему ImgWidth = 1 в Инспекторе Объектов, и для зеркала TKOLToolbar назначить этот список изображений в качестве основного набора пиктограмм (свойство ImageListNormal).

Иногда возникает необходимость расположить линейку вертикально. В этом случае можно поступить одним из следующих способов. Либо следует указать число строк, в которых должны размещаться кнопки (и это число должно совпадать с числом кнопок). Либо следует задать опцию tboWrapable и обеспечить такую ширину линейки, при которой кнопки непременно будут переноситься на следующую строку.

Существует известная проблема неверной отрисовки панели инструментов с опцией tboFlat в ОС Windows XP при включенных темах: фон линейки становится черным. Для устранения этой проблемы используйте свойство времени разработки FixFlatXP (она включена по умолчанию). При включении этой опции в случае, когда детектируется эта версия ОС (или выше), опция tboFlat не включается.

В дополнение замечу, что окно линейки инструментов использует для управления собой оконные сообщения TB_xxxx, по неизвестной причине оказавшиеся в начале пользовательского диапазона сообщений WM_USER+n. Если форма сама в первую очередь принимает такие сообщения, перехватывая их для своих целей, вполне возможно, что линейка инструментов не будет реагировать на некоторые запросы и команды, реализованные через те же самые сообщения. (То же может касаться и некоторых других оконных элементов управления в Windows, например - list view или tree view). Поэтому мой совет: не использовать первую сотню из пользовательских сообщений для своих целей.

Зеркалом MCK для данной разновидности контрола является компонент TKOLToolbar. Он позволяет настроить линейку на этапе разработки, и не ломать себе голову над тем, какие вызовы и в каком порядке следует сделать, чтобы линейка выглядела именно так, как это требуется разработчику.