Button, SpeedButton, BitBtn
Когда Вы нажимаете на кнопку, то видите трёхмерный эффект нажатия. А как же насчёт четвёртого измерения, например звука ? Ну тогда нам понадобится звук для нажатия и звук для отпускания кнопки. Если есть желание, то можно добавить даже речевую подсказку, однако не будем сильно углубляться.
Компонент звуковой кнопки имеет два новых свойства:
- Подробности
- Родительская категория: VCL
- Категория: Button, SpeedButton, BitBtn
Мастера у меня назрел еще такой вопрос! Можно ли из 3-х Image(картинок) сделать компонент-кнопку, т.е у меня есть три картинки: кнопка обычная, нажатая и активная (на ней курсор мышки)? Я конечно могу каждый раз на форму кидать по три Image, вставляя в каждый Image картинку, но это только на одну кнопку 3 image'a, а если я хочу 10 кнопок, то это будет уже 30 image'ей!!! Я представляю, что у кнопки должны быть такие свойства как у Image'a, и в свойствах этого компонета дожны быть ссылки на 3 картинки, отвечающие нужному состоянию. Сразу скажу, что BitBtn не подойдет, так как форма кнопки прямоугольником и не повторяет форму рисунка в картинки. Компонент Image он тоже прямоугольный, но если всавить в него картинку и назначить свойство Transparent, Image станет при этом позрачный и повторит форму рисунка в картинке, т.е. рисунка кнопки.
- Подробности
- Родительская категория: VCL
- Категория: Button, SpeedButton, BitBtn
Автор: Maarten de Haan
Пример показывает, как сделать кнопку с тремя состояниями. В обычном состоянии она сливается с формой. При наведении на такую кнопку курсором мышки, она становится выпуклой. Ну и, соотвественно, при нажатии, кнопка становится вогнутой.
Также можно создать до 4-х изображений для индикации состояния кнопки
<--------- Ширина --------->
+------+------+-----+------+ ^
|Курсор|Курсор|нажа-|недос-| |
|на кно|за пре| та |тупна | Высота
| пке |делами| | | |
+------+------+-----+------+ v
- Подробности
- Родительская категория: VCL
- Категория: Button, SpeedButton, BitBtn
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; |
- Подробности
- Родительская категория: VCL
- Категория: Button, SpeedButton, BitBtn
Иконка компонента является инкапсулированным объектом, требующим для хранения изображения некоторый участок памяти. Следовательно, при замене иконки, память, связанная с первоначальной иконкой, должна возвратиться в кучу, а для новой иконки требуется новое распределение памяти. По правилам Delphi, этим должен заниматься метод "Assign". Ниже приведен код всей процедуры замены иконки.
- Подробности
- Родительская категория: VCL
- Категория: Button, SpeedButton, BitBtn
Раньше казалось, что невозможно было преодолеть нестабильность Windows-98. Но теперь мы видим, что Windows XP ее в этом преодолела.
- Подробности
- Родительская категория: VCL
- Категория: Button, SpeedButton, BitBtn
Code: |
procedure AddDisableBMP(SB : array of TObject); var BM, SBM : TBitmap; w, x, y, NewColor, i : integer; PixelColor : TColor; begin BM := TBitmap.Create; SBM := TBitmap.Create; try for i := 0 to High(SB) do begin if (SB[i] is TSpeedButton) then BM.Assign((SB[i] as TSpeedButton).Glyph) else if (SB[i] is TBitBtn) then BM.Assign((SB[i] as TBitBtn).Glyph) else Exit;
if not Assigned(BM) or (BM.Width <> BM.Height) then Exit;
w := BM.Width; SBM.Width := w * 2; SBM.Height := w; SBM.Canvas.Draw(0, 0, BM);
for x := 0 to w - 1 do for y := 0 to w - 1 do begin PixelColor := ColorToRGB(BM.Canvas.Pixels[x, y]); NewColor := Round((((PixelColor shr 16) + ((PixelColor shr 8) and $00FF) + (PixelColor and $0000FF)) div 3)) div 2 + 96; BM.Canvas.Pixels[x, y] := RGB(NewColor, NewColor, NewColor); end;
SBM.Canvas.Draw(w, 0, BM);
if (SB[i] is TSpeedButton) then with (SB[i] as TSpeedButton) do begin Glyph.Assign(SBM); NumGlyphs := 2; end else with (SB[i] as TBitBtn) do begin Glyph.Assign(SBM); NumGlyphs := 2; end; BM := TBitmap.Create; SBM := TBitmap.Create; end; finally BM.Free; SBM.Free; end; end; |
- Подробности
- Родительская категория: VCL
- Категория: Button, SpeedButton, BitBtn
Страница 2 из 2