Компонент TKnopka |
Компонент "кнопка" унаследован от стандартного TButton. Преимущества по сравнению с использованием стандартной кнопки состоит, прежде всего, в надежности: на время обработки события OnClick кнопка становится недоступной. В результате, если пользователь пытается нажать кнопку повторно в течение длительной операции, у него не получится испортить данные в базе данных или нарушить работу программы. Разумеется, сюда включается и тот случай, когда пользователь пытается нажимать на все кнопки двойным кликом (видимо из тех соображений, что "не всегда срабатывает одинарный клик, поэтому, чтобы не ломать голову, проще всего всегда использовать двойной щелчок"). Более того, по умолчанию запрет делается вообще на все визуальные элементы формы, хотя они и не приобретают вид "недоступных", так же на время обработки клика мышью.
Помимо этого, данная кнопка, оставаясь совершенно совместимой со стандартной (в том числе нормально выглядит при включённых темах и подключённым манифестом), обладает множеством дополнительных возможностей:
Обратите внимание, что
Компонент
разрабатывался для Delphi 5, но работает так же и в
Delphi 6, и должен работать в Delphi 7. В более поздних версиях
Delphi и его
клонов не тестировался. Для отображения кнопки внутренним образом используется
компонент TNormalLabel из пакета
TNormalReport, и для хранения картинки - компонент
TUniPic из пакет
TUniEdit (который
обычно входит в TFastListView - все компоненты
входят в общий дистрибутив).
Подробное описание
TKnopka | TPnKnopka | TGrKnopka |
Свойства, события, методы класса TKnopka, доступные в Инспекторе объектов и/или во время исполнения.
Синим цветом отмечены свойства, унаследованные от TButton и аналогичные свойствам стандартной кнопки. При этом свойства и события, не имеющие никаких отличий, оставлены без описания. Обо всех таких свойствах подробную информацию можно найти в справке Delphi по соответствующим компонентам.
Публикуемые свойства (свойства, которые могут быть изменены Инспектором объектов в режиме дизайна формы).
Имя свойства | Тип | Начальное значение |
Описание | |
Action | ||||
Align | TAlign | alNone | Выравнивание контрола на родительском контроле на форме. В отличие от стандартной кнопки (TButton), компонент TKnopka может быть легко выровнен, что упрощает размещение большого числа кнопок в один ряд. В случае необходимости обеспечить пробелы между выровненными кнопками, следует использовать компонент-спутник TPnKnopka. (Стандартная кнопка не имеет свойства Align, точнее, оно в нем "закрыто" для использования). | |
Anchors | TAnchors | [akLeft, akTop] | ||
BiDiMode | ||||
Cancel | Boolean | FALSE | ||
Caption | String | OK | В отличие от стандартной кнопки, текст может быть многострочным. Способы переноса задаются свойством Wrapping. | |
Constraints | ||||
Cursor | TCursor | crDefault | ||
Default | Boolean | FALSE | ||
DisableFormWhileClick | Boolean | TRUE | TRUE запрещает все элементы формы на время обработки события OnClick, предотвращая нежелательные действия пользователя на время выполнения длительных операций. | |
DisableWhileClick | Boolean | TRUE | TRUE запрещает на время выполнения обработчика события OnClick саму кнопку, делая её визуально недоступной пользователю. | |
DragCursor | ||||
DragKind | ||||
DragMode | ||||
Enabled | Boolean | TRUE |
В случае FALSE текст изображается утопленным.
В случае наличия рисунка TPicture, для него
формируется черно-белое изображение. В случае рисунка из
TImageList, используется режим рисования
Disabled, но есть возможность задать отдельный
ImageList для хранения рисунков на кнопки в
состоянии "недоступна". В случае присваивания этому свойству значения в то время, когда выполняется обработчик OnClick, при включённом свойстве DisableWhileClick или DisableFormWhileClick, значение не присваивается немедленно, а лишь по окончании работы обработчика OnClick. |
|
FocusDotFrameAroundText | Boolean | FALSE | TRUE приводит к тому, что вокруг текста кнопки в фокусе ввода изображается точечная рамка. | |
Font | В отличие от стандартной кнопки, изменение свойства Color для TKnopka допускается. В состоянии "недоступна" цвет шрифта игнорируется, текст изображается утопленным как обычно. Обратите внимание, что в случае масштабирования текста, лучше использовать True Type шрифты (например, Tahoma, Times New Roman, Arial, Courier New). | |||
Height | Integer | |||
HelpContext | Integer | 0 | ||
Hint | String | Текст всплывающей подсказки (работает на всех элементах контрола). | ||
ImageIndex | Integer | 0 | Если список изображений ImageList задан, то на кнопке отображается рисунок из списка, с индексом, заданным данным свойством. В случае, если для состояния "недоступна" используется отдельный список пиктограмм (ImagesDisabled), индекс картинки, относящейся к кнопке, должен быть тем же. | Обратите внимание, что имеется возможность отключить отображение картинок на всех кнопках (кроме тех, которые не имеют текста) присваиванием значения TRUE глобальной переменной DisableAllIconsOnKnopka. |
ImageList | TImageIndex | Задаёт список изображений, из которого берётся картинка для изображения на кнопке. Другой способ задать картинку - свойство Picture. | ||
ImagesDisabled | TImageIndex | Позволяет задать отдельный список изображений для состояния кнопки "недоступна" (Enabled = FALSE). Если такой список не задан, то картинка из ImageList изображается в режиме disabled (т.е. система формирует серый вариант картинки). | ||
Layout | TKnopkaLayout | klLabelRight | Положение текста относительно картинки, при наличии того и другого. Варианты: klLabelRight, klLabelBottom, klLabelLeft, klLabelTop. | |
Left | Integer | |||
MarginsPic | Integer | 4 | Расстояние от краёв кнопки до внешнего края картинки. | |
MarginsText | Integer | 2 | Расстояние от краёв картинки до внешнего края текста. | |
ModalResult | mrNone | Максимальная длина редактируемой строки (Kind = ekEdit, ekCombo) | ||
Name | String | |||
ParentBiDiMode | Boolean | TRUE | ||
ParentFont | Boolean | TRUE | ||
ParentShowHint | Boolean | TRUE | ||
PicTransparent | Boolean | TRUE | Картинка из свойства Picture считается прозрачной по обычным для Delphi правилам (для TBitmap, прозрачный цвет берётся из нижнего левого пикселя). | Обратите внимание, что имеется возможность отключить отображение картинок на всех кнопках (кроме тех, которые не имеют текста) присваиванием значения TRUE глобальной переменной DisableAllIconsOnKnopka. |
Picture | TPicture | TRUE |
Картинка может быть задана этим свойством или через
ImageList. Если используется данное свойство, то для состояния
Enabled=FALSE автоматически строится
черно-белый вариант изображения. Для упрощения загрузки растровых изображений, подготовленных для использования в качестве свойства Glyph кнопок TBitBtn и TSpeedButton, и содержащих два изображения, в момент загрузки картинки, у которой ширина ровно вдвое больше высоты, программисту предлагается автоматическое деление изображения. Если он соглашается, левая половина устанавливается в качестве значения свойства, а вторая отбрасывается (затенённое изображение будет строиться автоматически, путём перевода в оттенки серого). |
|
PopupMenu | ||||
RepeatDelay | Integer | 200 | Период (в миллисекундах, т.е. 1000 соответствует одной секунде) между автоматическими срабатываниями кнопки при длительном нажатии на нёё мышью, когда включено свойство RepeatPress. | |
RepeatFirst | Integer | 400 | Задержка после нажатия мышью, после которой событие OnClick начинает срабатывать периодически, пока кнопка удерживается нажатой. | |
RepeatPress | Boolean | FALSE | При включении TRUE длительное нажатие на кнопку мышью приводит к периодическому срабатыванию OnClick через интервалы RepeatDelay. | |
ShowHint | Boolean | TRUE | ||
SpeedButton | Boolean | FALSE | В случае значения TRUE кнопка работает как TSpeedButtton: она не получает фокус ввода и нажать на нее можно только кликом мыши. Тем не менее, свойств, аналогичных GroupIndex или AllowAllUp в TKnopka нет, поэтому для замены групп альтернативных кнопок TSpeedButton данный компонент не подйдёт (рекомендуется использовать TRadioGroup или другие средства). | |
StdImage | TStdImage | Задает иконку по умолчанию, которая отображается при отсутствии назначенных свойств Picture и ImageList, и при установке свойства StdImgShowSize > 0. Подробнее см. TUniPic, который, собственно, и отвечает за рисование стандартных пиктограмм из системных ресурсов. | Обратите внимание, что имеется возможность отключить отображение картинок на всех кнопках (кроме тех, которые не имеют текста) присваиванием значения TRUE глобальной переменной DisableAllIconsOnKnopka. | |
StdImgShowSize | Integer | 0 | Задает размер картинки, изображаемой согласно свойству StdImage. Обычные размеры: 16, 24 и 32 (хотя попадаются и дргие, например, 17x17). | |
TabOrder | Integer | |||
TabStop | Boolean | TRUE | В случае установленного значения SpeedButton данное свойство сбрасывается, при присваивании FALSE свойству SpeedButton свойство TabStop так же устанавливается. | |
Tag | Integer | 0 | ||
TextAlignment | TAlignment | Аналог Alignment. Задаёт выравнивание текста. | ||
TextScale | ktsInFont |
Способ масштабирования текста в случае, когда он весь не помещается на
кнопке. Варианты: ktsInFont - по возможности уменьшается размер шрифта с шагом 1 (минимум - 4 пт), ktsInScale - используется масштабирование через промежуточный метафайл (для лучшего качества требуется, чтобы использовался True Type шрифт, например, Tahoma), ktsNone - масштабирование не используется. |
||
Top | Integer | |||
Visible | Boolean | TRUE | ||
Width | Integer | |||
Wrapping | TKnopkaWrap | kwSyllabels |
Способ переноса многострочного текста:
Варианты: kwSyllabels - по слогам (а так же пробелам и знакам препинания), kwWords - по словам (пробелам и знакам препинания), kwLetters - по буквам, kwNone - текст однострочный, переносы запрещены. |
Публикуемые события (которые могут быть назначены или изменены Инспектором объектов в режиме дизайна формы).
Имя события | Параметры обработчика | Описание |
OnClick | (Sender: TObject) | Вызывается, когда на кнопку нажимают или вызывают метод Click; До завершения обработчика, если выставлены в TRUE свойства DisableWhileClick и / или DisableFormWhileClick (по умолчанию это так), кнопка (и / или форма) будет недоступна для повторного нажатия пользователем. |
OnContextPopup | ||
OnDragDrop | ||
OnDragOver | ||
OnEndDock | ||
OnEnter | ||
OnExit | ||
OnKeyDown | ||
OnKeyPress | ||
OnKeyUp | ||
OnMouseDown | ||
OnMouseMove | ||
OnMouseUp | ||
OnStartDock | ||
OnStartDrag |
Методы времени исполнения компонента TKnopka, доступные из программы (секция PUBLIC).
Имя метода | Описание |
procedure Click; | Прочие методы все те же самые, что и для TButton. Поэтому они не приводятся. Этот метод позволяет "нажать" на кнопку программно. Рекомендуется использовать именно такой способ, нежели прямой вызов назначенного обработчика события, если требуется обеспечить временное запрещение кнопки и/или формы на время выполнения обработчика события. |
Свойства компонента TPnKnopka, доступные из Инспектора объектов.
Компонент TPnKnopka представляет собой панель с кнопкой типа TKnopka.
Компонент TPnKnopka разработан для того, чтобы можно было удобным образом располагать в одну линейку несколько кнопок TKnopka, выравнивая их на родительской панели свойством Align. В дополнение к TKnopka, компонент TPnKnopka предоставляет (в основном) четыре дополнительных свойства SpaceXXXX, задающих расстояние от внешнего края контрола до самой кнопки.
Все прочие свойства в основном те же, что и для TKnopka,
и фактически относятся к самой кнопке. Некоторые события (мыши) могут
срабатывать как на самой кнопке, так и на панели. Обращайте внимание в
обработчике на значение параметра Sender, если это
важно.
Имя свойства или декларация метода | Тип (свойства) | Описание |
SpaceBottom | Integer | Расстояние от нижнего края контрола до кнопки. |
SpaceLeft | Integer | ... от левого края контрола до кнопки |
SpaceRight | Integer | ... от правого ... |
SpaceTop | Integer | ... от верхнего ... |
Компонент TPnKnopka представляет собой графический контрол (унаследован от TGraphicControl). Для изображения всех кнопок типа TGrKnopka создаётся и используется только одна кнопка типа TKnopka, общая для всех экземпляров компонента TGrKnopka. Все свойства графической кнопки TGrKnopka соответствуют свойствам компонента TKnopka. Единственное существенное отличие с точки зрения состава доступных свойств заключается в том, что, как и любые графические контролы, TGrKnopka не может принимать фокус ввода. В этом плане она похожа на TSpeedButton, и даже больше, чем TKnopka при установке свойства SpeedButton=TRUE (у TGrKnopka такого свойства, соответственно, так же нет).
Компонент TGrKnopka может оказаться полезен для создания большого поля из кнопок, так как в любом случае используется только одна оконная кнопка TKnopka для изображения всех экземпляров компонента TGrKnopka. Соответственно, оконные ресурсы не расходуются.
Замечание по оптимизации
В связи с тем, что для родительского контрола устанавливается свойство
DoubleBuffered = TRUE, рекомендуется по возможности не
размещать на том же родительском контроле помимо кнопок
TGrKnopka никаких других визуальных элементов, особенно таких сложных,
как, например, list view, tree view и т.д. Лучше всего
выделить для графических кнопок отдельную панель, в этом случае именно для этой
панели и устанавливается свойство DoubleBuffered = TRUE.
(C) by Vladimir Kladov, 2000-2010