Компонент 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 ... от верхнего ...
 






 Компонент TGrKnopka.

Компонент 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