Главная страница
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.018 c
7-5284
НаемНИК
2002-11-14 13:58
2003.02.03
Перехват УДАЛЕНИЯ ФАЙЛА


3-4765
_landy
2003-01-16 12:45
2003.02.03
Sybase


4-5347
KPV-10k
2002-12-16 21:06
2003.02.03
Скрыть АПИ ф-ции используемые прогой от внешнего просмотра...


4-5329
R4D][
2002-12-18 17:58
2003.02.03
Локальные hook и


14-5201
Akela
2003-01-14 23:25
2003.02.03
Что общего ? :)))