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

Вниз

TGraphicControl и его отрисовка за пределами его :)   Найти похожие ветки 

 
Chlavik ©   (2004-05-16 23:22) [0]

Привет... Ситуация такая есть платформа на базе TCustomControl, на которой располагаются Елементы одного класса (TBlockObject) наследники TGraphicControl. Сама платформа это дизайнер, а TBlockObject это те самые елемнты кторые дизайнятся. Мне нужно что при отрисовке елемента (если он Selected) поверх его рисовалась рамочка и прочее. Но вся проблема в том что пол рамочки или там крестика на рамке Елемента должна находися на нём самом, а другая на платформе. А увелиичвать рамеры елемета чтобы рисовать всё на нём сразу я не могу.. что делать как рисовать на платформе с элентами как по одному контролу?


 
jack128 ©   (2004-05-16 23:33) [1]

введи виртуальный(можно абстрактный) метод в TBlockObject, что то типа
procedure TBlockObject.DrawOuterSelection(Canvas: TCanvas); в котором наследники должны на канве нарисовать эту внешнюю рамку выделенного элемента.
И пусть твой дизайнер вызывает в Paint вызывает этот метод у выделенного контрола SelectObject.DrawOuterSelection(Canvas);


 
hunter ©   (2004-05-16 23:35) [2]

1 вариант. Рисовать и на элементе и на платыорме.
2 вариант. Создать наследника от TGraphicControl или от TBlockObject и назвать его TSelectedBlockObject. При выделении объекта можно делать несколько действий например Hide выделенного объекта а вместо него TSelectedBlockObject.Show.
3 вариант. Отказаться от TBlockObject как от наледника TGraphicControl а сделать его наследником от TObject и рисовать все элементы самому


 
Chlavik ©   (2004-05-16 23:41) [3]

У меня чють наоборот TBlockObject вызывает у дизайнера метод DrawDesignFocus при своей отрисовке но просто я же сказал что пол линии елента рамки  находятся на самом TBlockObject а пол на платформе вот например крестиками отмечаеются места пересичения осей симетрии и рамки (BoundsRect) TBlockObject.  Что делать ?


 
Chlavik ©   (2004-05-16 23:49) [4]


> 3 вариант. Отказаться от TBlockObject как от наледника TGraphicControl
> а сделать его наследником от TObject и рисовать все элементы
> самому


Это эквивалентно переписанию метода  TWinControl.PaintControls :(


 
jack128 ©   (2004-05-16 23:50) [5]


> Chlavik ©   (16.05.04 23:41)
и? В чем проблема то? Внутри себя BlockObject выделение может нарисовать? Может. А внешнюю часть, которая находится на CustomControl"e я предложил как нарисовать?

> У меня чють наоборот TBlockObject вызывает у дизайнера метод
> DrawDesignFocus при своей отрисовке
это ж что, у тя дизайнер знает как рисовать всех наследников BloclObject"a? (я так понял, каждый наследник рисуется по разному?) Что то у мя вызывают сомнения подобный подход.. Хотя я конечно не знаю твою специфику...


 
Chlavik ©   (2004-05-16 23:55) [6]


> это ж что, у тя дизайнер знает как рисовать всех наследников
> BloclObject"a?


Он знает как рисовать дизайн рамочку, потому что она у всех одинаковая, а какждый контрол перед этим рисует себя сам (да и рисунок там всего навсего регион), а по размерам контрол просто рамка в которую это регион помещается (GetRGNBox)


 
hunter ©   (2004-05-16 23:57) [7]

А может сделать попроще? Не рисовать и там и там, а вызывать у выделенного объекта *как предложил jack128* метод передавая ему канву парента, а выделенный элемент будет рисовать вокруг себя рамку только на канвасе парента. Или обязательно рисовать и на элементе?


 
Chlavik ©   (2004-05-17 00:00) [8]


> hunter ©   (16.05.04 23:57) [7]


--------X----------- = это кусок рисунка рамочки по одну сторону parent по другую BlockObject как тот крестик нарисовать ?


 
jack128 ©   (2004-05-17 00:02) [9]


> Chlavik ©   (17.05.04 00:00)
еще раз, почему не подходит [1]??


 
jack128 ©   (2004-05-17 00:05) [10]


> Он знает как рисовать дизайн рамочку, потому что она у всех
> одинаковая
А. Ну так сделай обратный [1] вариант пусть BlockObject вызывает у дезайнера DrawInnerSelection(Canvas)


 
Chlavik ©   (2004-05-17 00:25) [11]

У меня другая идея ... Но просто я не знаю как правильно её реализовать TGraphicControl (он же TBlockObject потому что наследник) рисуется всегда себя на Parente потому что он не наследник TWinControl по этому, я думаю что как то можно нарисовать ту рамочку  все дела на паренте после того как TBlockObject нарисуется себя н паренте. Можна так ?


 
jack128 ©   (2004-05-17 01:02) [12]

Посмотрел я тут. Нефига у тя не получиться ;-(
в момент вызова TCustomContro.Paint -  из его кавы исключаются прямоугольники соответствующие пренадлежащим ему(кастом контролу) контролам. Аналогично для график контрола, а момент вызова TGraphicControl.Paint канва обрезается по его кординатам и нечего "снаружи" ты нарисовать не можешь. Покрайней мере не в методах Paint - это точно.

Если интересно, то подробнее смотри TWinControl.PaintHandler и TWinControl.PaintControls



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

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

Наверх




Память: 0.5 MB
Время: 0.032 c
8-1080121247
Jeka_
2004-03-24 12:40
2004.05.30
Запись видео или изображения с вэб-камеры.


6-1081351811
nomshar
2004-04-07 19:30
2004.05.30
И опять о сокетах


14-1084214136
PaRL
2004-05-10 22:35
2004.05.30
Самообразование


3-1084340816
ZHoooK
2004-05-12 09:46
2004.05.30
DBComboBox и набор данных


1-1085035121
Sandman25
2004-05-20 10:38
2004.05.30
procedure of class?