Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.14;
Скачать: CL | DM;

Вниз

Взять отрисовку полностью на себя   Найти похожие ветки 

 
BorisMor ©   (2005-04-25 18:31) [0]

Как взять отрисовку контрола полностью на себя ?

Интересует в первую очередь TScrollBar
Создал от него наследника и обрабатываю WM_PAINT.
Если стрелки по краям еще отрисовываю нормально, то запретить прорисовку самого бегунка не могу.

Бегунок стирает все мои художестава при перестаскивание.


 
alpet ©   (2005-04-25 18:38) [1]

1. Надо полностью заменить обработчики WM_PAINT, WM_NCPAINT, WM_ERASEBACKGROUND. Причем управление DefWindowProc потом передаваться не должно.
2. Код пожайлуста приведи.


 
BorisMor ©   (2005-04-25 18:55) [2]

Щас попробую.....
Вот основвной код:


procedure TgScrollBar.WMPaint(var Message: TWMPaint);
begin
 inherited;
 DoPaint;
end;
/////////////////////////////////////////////////////////////////

procedure TgScrollBar.DoPaint;
var
 R: TRect;
 Canvas: TCanvas;
begin
if (parent = nil) or (Canvas=nil) then exit;
GetWindowRect(Handle, R);

if Kind = sbHorizontal then
    begin
     FCanvas.Draw(0,0,butL);
     FCanvas.Draw(Width-wButS,0,butR);
    end else
if Kind = sbVertical then
    begin
     FCanvas.Draw(0,0,butT);
     FCanvas.Draw(0,Height-hButS,butB);
    end;
end;
......
в креэйте создаются всякие битмапы которые отрисовываются +

FCanvas := TControlCanvas.Create;
TControlCanvas(FCanvas).Control := Self;

hButS := GetSystemMetrics(SM_CYVTHUMB);
wButS := GetSystemMetrics(SM_CXHTHUMB);



 
alpet ©   (2005-04-25 19:02) [3]

procedure TgScrollBar.WMPaint(var Message: TWMPaint);
begin
inherited;
DoPaint;
end;


Ключевое слово inherited. Его надо убрать.
Потом message.result надо устанавливать в 0, и производить валидацию прорисованного участка функцией ValidateRect. Исправь для начала это.


 
alpet ©   (2005-04-25 19:10) [4]

Вообще перерисовка этого элемента управления задача интересная. Для начала - если тебе не нужно рисовать все целиком попробуй обрабатывать сообщение WM_CTLCOLORSCROLLBAR. Можно задать любую кисть (цвет, растр), а отрисовку выполнит Windows.


 
BorisMor ©   (2005-04-25 19:20) [5]

alpet ©   (25.04.05 19:10) [4]
Уже делал. Но некрасиово получается.
Требуется что бы интерфейс польностью был графически, а тут "остатки" Windows виднеются. Да и проклятый бегунок серый :)


 
BorisMor ©   (2005-04-25 19:25) [6]

alpet ©   (25.04.05 19:02) [3]

До того какк постить ветку убирал inherited. Но без него все остальные контролы не прорисовываются... Вернул обратно.

Сейчас добавил в обрабтку
WM_ERASEBKGND
WM_NCPAINT
WM_PAINT

DoPaint;
ValidateRect(Handle, nil);
Message.Result:=0;

к сожелению когда тоскаешь мышкой ползунок результат тот же.


 
MBo ©   (2005-04-25 19:52) [7]

Может, стоит взять с torry какой-либо саморисованный скроллбар и покопаться в коде?


 
BorisMor ©   (2005-04-25 20:31) [8]

Уже брал и смотрел.
Все что нашел, оказалось наследниками от TGraphControl. Т.е. фактически люди создают все заново.
А хочется отнаследовать TScrollBar что бы быстро потом "прикручивать" к другим стандартным контролам.


 
mgcr ©   (2005-04-26 10:43) [9]

alpet ©   (25.04.05 19:02) [3]


> Ключевое слово inherited. Его надо убрать.


Это еще почему ?


> Потом message.result надо устанавливать в 0, и производить
> валидацию прорисованного участка функцией ValidateRect.
> Исправь для начала это.


А что будет, если message.result не равен 0 ?


 
alpet ©   (2005-04-26 11:01) [10]

Переопредели метод не WMPaint, а PaintWindow. Первый заказывает отрисовку дочерних элементов, тогда как второй только самого компонента.



Страницы: 1 вся ветка

Текущий архив: 2005.06.14;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.04 c
3-1115374915
vic1
2005-05-06 14:21
2005.06.14
текст в ADODataset


1-1117126665
Serg1981
2005-05-26 20:57
2005.06.14
ListView со строками разного цвета


1-1117521519
liver
2005-05-31 10:38
2005.06.14
Alt + F4


1-1117520936
Гость2
2005-05-31 10:28
2005.06.14
Срочно! Как сделать округление числа типа real до 2-го знака?


1-1117521709
imm
2005-05-31 10:41
2005.06.14
Где искать буфер TBitmap





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский