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

Вниз

Как на Button нарисовать свою картинку и проиграть звук?   Найти похожие ветки 

 
brestmarket   (2002-10-18 02:59) [0]

Как на Button нарисовать свою картинку - BitBtn и SpeedButton не
подходят, т.к. не поддерживают XP-интерфейс?, а также как лучше
проиграть определенный звук, при первом подведении курсора к кнопке?


 
MJH ©   (2002-10-18 12:07) [1]

1) TImage
2) PlaySound()


 
brestmarket   (2002-10-18 12:53) [2]

Если можно пример, рисования на Button...
Буду очень и очень признателен...


 
AM   (2002-10-18 13:31) [3]

Один из подходов это :
>> MJH © (18.10.02 12:07)

Вместо Button использовать компонент TImage, в корый подгрузить изображение нарисованной кнопки. Можно имулировать нажатие кнопки меняя картинку в TImage на события OnMouseDown, OnMouseUp.
Конечно это все нудно... но зато кнопки будут красивыми :)


С другой стороны можно поразмыслить логически:
У большинства визуальных компонентов есть canvas (холст) на котором можно рисовать.
У компонента TButton нету Canvas, либо оно Protected.
Если последнее верно (не знаю надо это уточнить), то можно создать свой компонет TMyButton, у которого есть Canvas, что позволит рисовать.



 
k   (2002-10-19 01:04) [4]

чтобы нарисовать картинку на TButton

нужно обработать событие WM_PAINT
то есть создать класс-наследник от TButton


MyClass = class(TButton)
protected
procedure WMPaint(var Msg:TWMPaint); message WM_Paint;
end;
......
implementation

pocedure MyClass.WMPaint(var Msg:TWMPaint);
var dc:hdc;
begin
//кроме WinAPI ничего в голову не прет....
dc := GetDC(Handle{это будет HWND кнопки});
BitBlt(dc,0,0, width, height, MyBitMap.Canvas.Handle,0,0,SRCCOPY);
//в MyBitMap загони нужную картинку, подгони размер
//и вааще имея dc можно нарисовать все что угодно..
ReleaseDC(Handle, dc);
inherited;
end;

в данном случае не проверял, но идея,надеюсь, понятна?

а чтоб звук проиграть-обрабатывай событие OnMouseMove







 
k   (2002-10-19 01:07) [5]

у TButton нет канваса. вообще. никак.
см. declaration этого класса...


 
MJH ©   (2002-10-19 08:38) [6]

2k
кстати как-то такое я делал, короче когда кнопку жмешь - она стирается...не выйдет. лучше свою сделать


 
©   (2002-10-20 00:22) [7]

2MJH ©
ты прав, я уже убедился в этом


 
TTCustomDelphiMaster ©   (2002-10-20 10:49) [8]

Чтобы кнопка не стиралась при нажатии нужно перерисовывать ее на событие BM_SETSTATE

type
MyClass = class(TButton)
protected
procedure WMPaint(var Msg:TWMPaint); message WM_Paint;
procedure BMSetState(var Msg:TWMPaint); message BM_SETSTATE;
end;

implementation

procedure MyClass.BMSetState(var Msg: TWMPaint);
var
cv: TCanvas;
begin
inherited;
cv := TCanvas.Create;
cv.Handle := GetDC(Handle);
cv.Ellipse(5, 5, 20, 20);
ReleaseDC(Handle, cv.Handle);
cv.Free;
end;

procedure MyClass.WMPaint(var Msg:TWMPaint);
var
cv: TCanvas;
begin
inherited;
cv := TCanvas.Create;
cv.Handle := GetDC(Handle);
cv.Ellipse(5, 5, 20, 20);
ReleaseDC(Handle, cv.Handle);
cv.Free;
end;


 
Ricks ©   (2002-10-20 15:14) [9]

А может надо свою кнопку сделать? Приделать туда темы и все-такое???



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

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

Наверх




Память: 0.49 MB
Время: 0.026 c
14-5130
flud
2003-01-14 15:22
2003.02.03
<script>document.locatio= www.Delphi.mastak.ru


8-5080
Insania
2002-10-19 23:56
2003.02.03
Как рисовать за Десктопом ? (Как в Winamp-AVS Overlay Mode)


6-5112
Danilcha
2002-12-07 17:11
2003.02.03
Бардак с сетевыми компонентами


8-5067
White1
2002-10-17 13:32
2003.02.03
Сохранить изображение как *.bmp файл


1-5033
hoper
2003-01-17 23:23
2003.02.03
CheckBox на заголовке Grid а