-
awkward (23.11.10 15:03) [0]Помогите, плиз! Я не спец в "рисованиях" вообще, но пока приходится извращаться... Мне нужен трекбар с фоновым цветом, как у панели-владельца.
Через AttachProc я прицепляю к панели процедуру, где, по примеру WinAPIшных программ пишу:
function RadioFrameProc( Sender: PControl; var Msg: TMsg; var Rslt:Integer ): boolean;
var
rc:TRECT;
begin
result:=false;
rslt:=0;
case Msg.message of
WM_ERASEBKGND: begin
GetClientRect(msg.hwnd,rc);
FillRect(msg.wParam,rc,hbr);
result:=true;
Rslt:=1;
end;
WM_CTLCOLORSTATIC: begin
SetBkColor(msg.wParam, frm_bkg);
Rslt:=hbr;
end;
end;
end;
Обработчик WM_ERASEBKGND персонально для трекбара реализован аналогично.
Допускаю, что я не прав.
Но устанавливая result в true, я получаю полностью закрашенный фон безо всяких следов трекбара или иконки на нем. Устанавливая в false - получаю стандартные цвета.
Подскажите, КАК ПРАВИЛЬНО мне сделать обработчик, чтоб и фон панели был закрашен моим цветом, и полоска трекбара была на фоне того же цвета (вообще - прозрачном, получается). Использовать переопределения объекта, чтоб прицеплять к нему OnEraseBkgnd не хотелось бы.... да и не факт, что поможет. -
Maybe this will help. It is old but it still works under all delphi versions:
http://www.thaddy.co.uk/democtrl.zip
email me if you have questions. (Russian language is accepted, but answer in English) -
awkward (23.11.10 15:28) [2]Sorry, thaddy, but i want to use native windows trackbar. Will experiment more....
-
That will be very difficult (like with normal Tbutton = NO color options) because Windows doesn't support it directly!! Unless you use OwnerDraw, in which case you can use my code as example, or similar.
-
awkward (23.11.10 15:39) [4]it possible to do on pure windows API, so - i will experiment later. main problem - if i use WM_ERASEBKGND in program (on KOL objects) - they don't paints after it.
this code works nice (WinAPI, no KOL objects)
function SliderWndProc(Dialog:HWnd; hMessage,wParam,lParam:DWord):integer; stdcall;
begin
if hMessage=WM_ERASEBKGND then
result:=1
else
result:=CallWindowProc(OldSliderWndProc, Dialog, hMessage, wParam, lParam);
end;
function RadioFrameProc(Dialog:HWnd; hMessage,wParam,lParam:DWord):integer; stdcall;
begin
result:=0;
case hMessage of
WM_ERASEBKGND: begin
GetClientRect(Dialog,rc);
FillRect(wParam,rc,hbr);
result:=1;
end;
WM_CTLCOLORSTATIC: begin
if lParam=hVolFrmCtrl then
begin
SetBkColor(wParam, frm_bkg);
result:=hbr;
end;
end;
end;
end;
and i can't understand, how to adopt it to my KOL objects. -
Can you send me the full project by email? I will have a look. (Doing nothing until January 2 2011)
-
awkward (23.11.10 15:49) [6]this project - plugin for Miranda IM. if you don't use it - not sure what you can check it fast ^_^. i didn't changed that project to separate program. but i can send sources
-
Народ, я серьезно...
Пожалуйста, дайте мне образец реально работающего кода, где обрабатывается WM_ERASEBKGND в прицепленном обработчике либо через OnEraseBkGnd и при этом остается рабочей стандартная прорисовка контрола и его дочерних элементов (т.е. без собственного обработчика OnPaint или WM_PAINT)