Текущий архив: 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.48 MB
Время: 0.039 c