Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.335 c
1-1117086896
Артем К.
2005-05-26 09:54
2005.06.14
Удаление компонента в Runtime при нажатии на кнопку Delete


3-1114757222
afanasic
2005-04-29 10:47
2005.06.14
Oracle -> BDE -> Delphi не читается BLOB


1-1116952290
HI
2005-05-24 20:31
2005.06.14
Параметры страницы в RichEdit


4-1114164757
VVV-First
2005-04-22 14:12
2005.06.14
Memory Mapped Files


4-1114087865
kivadim
2005-04-21 16:51
2005.06.14
Как программно переключить языки





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский