Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.01;
Скачать: CL | DM;

Вниз

Как изменить вид кнопки?   Найти похожие ветки 

 
Alessio ©   (2002-06-13 23:24) [0]

Я хочу нарисовать собственные очертания у стандартной кнопки. Как мне это сделать? Если через Canvas, то как до туда добраться? Подскажите, пожалуйста!


 
allrussia ©   (2002-06-14 02:13) [1]

look here:

http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1023908599&n=0


 
liho26 ©   (2002-06-14 07:11) [2]

Метод, описанный мной выше меняет форму кнопки. Однако есть еще один способ, позволяющий перерисовывать компоненты, у которых есть Handle. Приведенный ниже пример был написан в D6 и протестирован на BitBtn. Конечно же он долек от совершенства и его надо (и нужно!) дорабатывать. И, все же, в целях обучения его можно использовать.
Итак, рассмотрим процедуру, которую можно вставлять в любой обработчик события.

procedure TForm1.ChangeButton(fill, bkgraund: TColor);
Var
BitCanvas: TCanvas;
begin
BitCanvas:=TCanvas.Create;
BitCanvas.Handle:=GetwindowDC(BitBtn1.Handle);
BitCanvas.Brush.Color:=fill;
BitCanvas.FillRect(BitBtn1.ClientRect);
BitCanvas.Brush.Color:=bkgraund;
BitCanvas.FrameRect(BitBtn1.ClientRect);
ReleaseDC(BitBtn1.Handle,BitCanvas.Handle);
BitCanvas.Free;
end;


Как это работает? Да все очень просто. В процедуру передаются два параметра TColor. Первый для закраски кнопки, второй для отрисовки бордюра. Далее объявляется и создается переменная BitCanvas, Handl"y которой передается Handle любого элемента, который его имеет (я говорю про Handle). В данном примере - кнопка BitBtn1. В следующих двух строках устанавливаем цвет кисти для заливки и заливаем кнопку. Еще двумя строка ниже меняем цвет кисти на другой и рисуем бордюр. Освобождаем DC и освобождаем BitCanvas.

Теперь в обрабочике формы onPaint пишем следующее:


procedure TForm1.FormPaint(Sender: TObject);
begin
ChangeButton($00FDF0EC,clblack);
end;


В onClick кнопки

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ChangeButton($00F8C8BA,clblue);
end;


В onMouseDown

procedure TForm1.BitBtn1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ChangeButton($00F8C8BA,clred);
end;


В onMouseUp

procedure TForm1.BitBtn1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ChangeButton($00FDF0EC,clblack);
end;

Простенькая кнопка получилась :)
Я еще раз повторю, что пример далек от совершенства и приведен сдесь только в целях ознакомления.
-----------------------------
С уважением ко всем присутствующим


 
ricks ©   (2002-06-18 00:47) [3]

Мне кажется, проще написать свой компонент, и вытворять там что-угодно ;-))


 
GrayFox   (2002-06-18 09:09) [4]

По моему проще добавить картинку в виде кнопки, менять ее при событии ОнКлик, или делать ее невидимой, а "нажатую" картинку потом на то место и видимой.



Страницы: 1 вся ветка

Текущий архив: 2002.07.01;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
14-1185
Delphi5.01
2002-05-30 22:32
2002.07.01
Online game


4-1243
MisterBin
2002-05-02 16:26
2002.07.01
Как при наведении курсора на какое-то окно, чтобы оно минимизиров


7-1232
ser111
2002-03-31 18:54
2002.07.01
Как узнать тип exe-шника?


1-1077
Неизвестный
2002-06-17 12:11
2002.07.01
Hint для ComboBox


1-1052
Донской
2002-06-16 17:17
2002.07.01
Мастера, подскажите, пожалуйста - не могу понять, откуда этот глю