Форум: "Media";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];
ВнизКак на 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
кстати как-то такое я делал, короче когда кнопку жмешь - она стирается...не выйдет. лучше свою сделать
← →
k (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 вся ветка
Форум: "Media";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c