Форум: "KOL";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
ВнизКак сделать зеркало под либу? Ваять новый набор компонент? Найти похожие ветки
← →
Barloggg (2005-12-15 09:29) [0]Имею и еще пишу несколько очень симпатичных процедур пользовательской отрисовки, которые перекрывают onPaint у стандартных компонент.
Есть центральное "ядро рисования" и в него ссыпаются Pcontrolы с пометками "этот рисовать как панель, этот как кнопку ну и так далее".
Просто перекрыть функцию onPaint и OnResize и всего делов.
Как этому придать "товарный вид"?
То есть забацать зеркало?
Ваять свой собственный набор компонент? этого бы мне не хотелось.
пока я вижу работу комонента таким образом:
при броске компонента на форму в классе появляется несколько Published процедур, скажем DrawLikeButton, DrawLikePanel которые потом можно мышью подключить к нужным мне компонентам, а там уж "ядро рисования" само разберется...
или не маяться фигней и оставить как есть? то есть после создания, но перед показом формы ручками писать длинный список загрузки нужных мне компонент в рисовалку?
Компоненты же у нас не различаются верно? то есть если прямо не указать что вот это кнопка, то и не поймешь как ее надо рисовать. так что автоматика тут бессильна. только ручками. а как?
Или другого пути кроме как создать свой набор нету?
← →
RA © (2005-12-15 10:28) [1]Можно попробовать такой вариант. Сделать всего одно зеркало типа TAllControls, у котогрого есть свойство
itIs: TItIs
.
ГдеTItIs=(itBotton, itPanel, itLabel, ...)
И выполнять нужную отрисовку "глядя" на это свойство.
← →
Barloggg (2005-12-15 10:52) [2]хмм... а куда я это приткну? а понял. Да можно сделать и так, придется писать свои компоненты замещающие стандартные. этого хочу избежать.
Да и вопрос я не совсем корректно сформулировал. точнее путанно.
Смысл моего вопроса вот в чем:
Могу ли я сделать перекрытие некоторых функций у выбранных мною компонентов на "заранее подготовленные" визуально?
← →
ECM © (2005-12-15 10:53) [3]
> Можно попробовать такой вариант. Сделать всего одно зеркало
А смысл?
Если сделать зеркало для одного компонента (можно сделать общего МСК-предка) - то для остальных останется перекрыть максимум пару методов для генерации KOL-кода (который всё равно нужно было писать - только не в одной процедуре)
Это всё не сложно ...
ИМХО: Лучше всё-таки создать набор. Затраты на зеркало не намного выше чем для одного - зато потом будет удобнее.
Потребуется помощь - помогу. :)
← →
Barloggg (2005-12-15 12:22) [4]Но зачем мне создавать набор, когда у меня всего навсего с десяток onPaint"ов (несколько вариантов одного и того же), одна общая onResize и парочка onMouseDown?
Да и то в том наборе будет только лишь панель, кнопка, метка и картинка. кому он будет нужен как набор?
кстати пытался сделать свой компонент полгода назад... все бабахнуло... значит помощь понадобится... если другого выхода кроме как писать набор не найдется.
← →
Barloggg (2005-12-15 12:25) [5]хмм... один общий МСК предок... бросаем на форму, а потом в свойствах выбираем как он должен выглядеть при запуске... мысль для меня новая, расскажите поподробнее плз.
а с брошенными на него другими компонентами сложностей не будет? (если нижнему конечно задать вид как у панели)
← →
ECM © (2005-12-15 15:26) [6]
> кому он будет нужен как набор
Прежде всего лично Вам...:)
У меня, например, уже пару десятков своих (под себя заточенных).
Удобно - меньше голова забита.
> а с брошенными на него другими компонентами сложностей не
> будет? (если нижнему конечно задать вид как у панели)
Как раз в этом случае разделение на разные компоненты позволит избежать лишних проблем (ИМХО)
> один общий МСК предок... бросаем на форму
Нет Вы неверно меня поняли - общий предок что бы от него наследовать
набор (так меньше писанины в МСК). Бросать на форму его нельзя будет -
это вспомогательный класс
← →
Barloggg (2005-12-15 16:01) [7]Ну тогда это по любому набор. Лично мне удобнее в onFormCreate забабахать длинный список пересылки контролов в ядро с указанием какой контрол как рисовать.
примерно таким вот образомprocedure Add(control:PControl;NameToFindLater:string;DrawLikeWhat:integer=0);
и ради того, чтобы избавиться от такой строчки для каждого конкретного контрола ваять набор компонент... не, это мне не надо.
← →
Barloggg (2005-12-20 12:46) [8]хмм... вспомнилось вот:
а ведь для того чтобы подключить ту же DelphiX приходится ручками править пару строчек в коде.
и никак это не автоматизировано...
короче придется ваять инструкцию по подключению...
но ведь все равно будут запросы "а зеркало?"...
← →
SPeller © (2005-12-21 03:56) [9]Зачем набор? Достаточно одного компонента на форму, который и будет генерировать в inc-файле "длинный список пересылки контролов в ядро с указанием какой контрол как рисовать". Всё просто - при генерации кода идём по форме, перечисляем всех её детей, смотрим на класс (это же МСК - тут ртти можно использовать во всю красу), и в зависимости от класса генерим строчку. Например, для класса TMCKEditBox получим Add(Ctl.Name, "...", itEdit); для TMCKPanel получим Add(Ctl.Name, "...", itPanel); и т.д. А чтобы не делать кучу условий - заводим массив:
TDrawType = (itUnknown, itEdit, itPanel, itCheckBox, itButton, ...);
MyClasses: array [TDrawType] of TMCKCustomControl {вроде так называется предок всех визуальных в МСК}
= (TMCKEditBox, TMCKPanel, TMCKCheckBox, TMCKButton, ...);
var
DT: TDrawTypes;
DT := itUnknown;
for I := Low(MyClasses) to High(MyClasses) do
begin
if (TargetCtl is MyClasses[I]) then
begin
DT := I;
break;
end;
end;
// и тут мы получаем в переменной DT тип контрола, который надо зафигачить в генерируемый код.
И теперь не нужно добавлять условия, а только лишь добавлять значения в перечислимый тип и массив.
← →
Barloggg (2005-12-21 11:12) [10]хмм... выглядит красиво. надо это использовать.
а как бы добавить сюда выборочное добавление? типа вот эти кнопки я хочу перекрыть, а эту вот не хочу.
это чтобы демку сбацать дабы показать как моя отрисовка уживается со стандартной.
опять-таки в МСК.
← →
SPeller © (2005-12-21 11:31) [11]Создаем у нашего компонента свойство, которое будет содержать какой-то класс, или строку, разделенную точкой с запятой, или простой стринглист. Это свойство будет хранить имена контролов, которые рисовать не надо. Для удобного редактирования придётся написать свой редактор свойства и поставлять вместе с компонентом.
MyClasses: array [TDrawType] of TMCKCustomControl {вроде так называется предок всех визуальных в МСК}
= (nil, TMCKEditBox, TMCKPanel, TMCKCheckBox, TMCKButton, ...);
...
if (TargetCtl is MyClasses[I] and (ExceptList.IndexOf(TargetCtl.Name) < 0)) then
...
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.045 c