Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.05 c
3-1155824707
incm
2006-08-17 18:25
2006.10.15
Как используя BDE и MS SQL Server получать RAISEROR( Err ,10)


15-1158852923
S@sha
2006-09-21 19:35
2006.10.15
Шпион


15-1158906102
den_777
2006-09-22 10:21
2006.10.15
Где лучше(удобнее,быстрее) купить программные продукты.


15-1158731090
Интересующийся
2006-09-20 09:44
2006.10.15
Создание плагина для IE or Opera.


11-1135322419
Lari
2005-12-23 10:20
2006.10.15
Преобразование PJpeg -> TBitMap?





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