Code:

 

SpeedButton1.Perform(WM_LBUTTONDOWN, 0, 0);

SpeedButton1.Perform(WM_LBUTTONUP, 0, 0);

 

Автор: Maarten de Haan

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

 Также можно создать до 4-х изображений для индикации состояния кнопки

 

             <--------- Ширина --------->

 

             +------+------+-----+------+    ^

             |Курсор|Курсор|нажа-|недос-|    |

             |на кно|за пре| та  |тупна |  Высота

             | пке  |делами|     |      |    |

             +------+------+-----+------+    v

 

 

Выводите текст надписи непосредственно на "glyph" TBitBtn'а

Code:

procedure TForm1.FormCreate(Sender: TObject);

var

R: TRect;

N: Integer;

Buff: array[0..255] of Char;

begin

with BitBtn1 do

   begin

     Caption := 'A really really long caption';

     Glyph.Canvas.Font := Self.Font;

     Glyph.Width := Width - 6;

     Glyph.Height := Height - 6;

     R := Bounds(0, 0, Glyph.Width, 0);

     StrPCopy(Buff, Caption);

     Caption := '';

     DrawText(Glyph.Canvas.Handle, Buff, StrLen(Buff), R,

       DT_CENTER or DT_WORDBREAK or DT_CALCRECT);

     OffsetRect(R, (Glyph.Width - R.Right) div 2,

       (Glyph.Height - R.Bottom) div 2);

     DrawText(Glyph.Canvas.Handle, Buff, StrLen(Buff), R,

       DT_CENTER or DT_WORDBREAK);

   end;

end;

 

 

Этот компонент представляет из себя кнопку, на которую не надо нажимать, чтобы получить событие OnClick. Достаточно переместить курсор мышки на кнопку. При создании такого компонента традиционным способом, требуется довольно много времени, так как необходимо обрабатывать мышку, перехватывать её и т.д. Однако результат стоит того!

 

В некоторых видео режимах прозрачная часть glyph'а стандартного TBitBtn становится видной. Как этого избежать?

 

В примере используется техника закраски прозрачной части glyph'а цветом кнопки на которой он находится - таким образом glyph кажется прозрачным.

 

 

Когда Вы нажимаете на кнопку, то видите трёхмерный эффект нажатия. А как же насчёт четвёртого измерения, например звука ? Ну тогда нам понадобится звук для нажатия и звук для отпускания кнопки. Если есть желание, то можно добавить даже речевую подсказку, однако не будем сильно углубляться.

 

Компонент звуковой кнопки имеет два новых свойства:

Code:

uses ShellApi;

 

procedure TForm1.FormShow(Sender: TObject);

var

Icon: TIcon;

begin

Icon := TIcon.Create;

Icon.Handle := ExtractIcon(0, 'C:\WINDOWS\NOTEPAD.EXE', 1);

SpeedButton1.Glyph.Width := Icon.Width;

SpeedButton1.Glyph.Height := Icon.Height;

SpeedButton1.Glyph.Canvas.Draw(0, 0, Icon);

Icon.Free;

end;

 

сли вы хотите, чтобы кнопка или пункт меню выполнял другую функцию при нажатой кнопке  shift ,

вы можете использовать функцию GetKeyState .

 

GetKeyState принимает в качестве параметра виртуальный код кнопки и возвращает значение меньше 0,

если кнопка нажата.

 

 

Раньше казалось, что невозможно было преодолеть нестабильность Windows-98. Но теперь мы видим, что Windows XP ее в этом преодолела.

Вы не можете изменить цвет стандартного TButton, так как кнопки управления окнами всегда рисует себя с

цвет кнопки определяется в панели управления. Но можно создать создать новый компонент TButton и ручка

и рисунок поведения есть.

Мастера у меня назрел еще такой вопрос! Можно ли из 3-х Image(картинок) сделать компонент-кнопку, т.е у меня есть три картинки: кнопка обычная, нажатая и активная (на ней курсор мышки)? Я конечно могу каждый раз на форму кидать по три Image, вставляя в каждый Image картинку, но это только на одну кнопку 3 image'a, а если я хочу 10 кнопок, то это будет уже 30 image'ей!!! Я представляю, что у кнопки должны быть такие свойства как у Image'a, и в свойствах этого компонета дожны быть ссылки на 3 картинки, отвечающие нужному состоянию. Сразу скажу, что BitBtn не подойдет, так как форма кнопки прямоугольником и не повторяет форму рисунка в картинки. Компонент Image он тоже прямоугольный, но если всавить в него картинку и назначить свойство Transparent, Image станет при этом позрачный и повторит форму рисунка в картинке, т.е. рисунка кнопки.