Главная страница
    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.047 c
14-1116745105
totti
2005-05-22 10:58
2005.06.14
Матеметический компонент. Есть ли он в Делфи?


1-1117516990
liver
2005-05-31 09:23
2005.06.14
изображение из ImageList в Image


1-1117114924
lema
2005-05-26 17:42
2005.06.14
Вопрос по QuickRep


9-1111060381
Серый
2005-03-17 14:53
2005.06.14
Где найти путные md2 модели


14-1116828369
vidiv
2005-05-23 10:06
2005.06.14
Перекомпилировать весь VCL





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