Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как на 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()


Наверх

Титульная страница Поиск, карта сайта Написать письмо