![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как на Button нарисовать свою картинку и проиграть звук? [D6, WinXP]
brestmarket © (2002-10-18 02:59:00)Как на Button нарисовать свою картинку - BitBtn и SpeedButton не
подходят, т.к. не поддерживают XP-интерфейс?, а также как лучше
проиграть определенный звук, при первом подведении курсора к кнопке?
Ricks (2002-10-20 15:14:00) [1]А может надо свою кнопку сделать? Приделать туда темы и все-такое???
TTCustomDelphiMaster (2002-10-20 10:49:00) [2]Чтобы кнопка не стиралась при нажатии нужно перерисовывать ее на событие 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;
k (2002-10-20 00:22:00) [3]2MJH ©
ты прав, я уже убедился в этом
MJH (2002-10-19 08:38:00) [4]2k
кстати как-то такое я делал, короче когда кнопку жмешь - она стирается...не выйдет. лучше свою сделать
k (2002-10-19 01:07:00) [5]у TButton нет канваса. вообще. никак.
см. declaration этого класса...
k (2002-10-19 01:04:00) [6]чтобы нарисовать картинку на 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
AM (2002-10-18 13:31:00) [7]Один из подходов это :
>> MJH © (18.10.02 12:07)
Вместо Button использовать компонент TImage, в корый подгрузить изображение нарисованной кнопки. Можно имулировать нажатие кнопки меняя картинку в TImage на события OnMouseDown, OnMouseUp.
Конечно это все нудно... но зато кнопки будут красивыми :)
С другой стороны можно поразмыслить логически:
У большинства визуальных компонентов есть canvas (холст) на котором можно рисовать.
У компонента TButton нету Canvas, либо оно Protected.
Если последнее верно (не знаю надо это уточнить), то можно создать свой компонет TMyButton, у которого есть Canvas, что позволит рисовать.
brestmarket (2002-10-18 12:53:00) [8]Если можно пример, рисования на Button...
Буду очень и очень признателен...
MJH (2002-10-18 12:07:00) [9]1) TImage
2) PlaySound()