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

Вниз

Компонент наподобии TPanel со встроенными контролами   Найти похожие ветки 

 
bss   (2010-11-26 21:16) [0]

Есть задачи, когда нужно вводить одинаковый тип данных на разных визуальных формах. Применяли такой финт ушами - этот набор данных проектировался на некоей форме, в TPanel.
Далее для использования создавался скрытый экземпляр формы, соответственно на нем создавалась панелька, этой панельки переприсваивали Parent"а и она панельку можно было встроить в другие любые формы. Простота разработки, но большая неочевидность в design-time.

Хочется повторить что-то подобное, но по грамотному в виде компонента. Выглядеть планируется как TPanel (может быть наследник от TPanel) с созданными на нем другими контролами. Как лучше осуществить сие?

Делать прямого наследника от TWinControl, а на нем уже размещать панельку с Align=alClient или делать наследника TPanel?

В зависимости от настроек компонента в нем будет размещено то или иное количество других компонент (в основном набор TRzEdit). Хочется, чтобы ручками в design-time"e программист не смог дотянуться до этих "наложенных" контролов. Чтобы они визуально были видны для оценки, но щелчок по ним приводил к выделению самого основного компонента, то есть они шли фоном как картинка.

Вот картинка: http://img-fotki.yandex.ru/get/4603/fotki254746.0/0_42268_e0d20876_L.jpg

Все, что обведено красным - это и есть компонент, так он выглядит. Но чтобы нельзя было выделить на нем Edit"ы и добраться до их свойств, хотя реально это созданные экземпляры компонент TRzEdit...

Если непонятно объяснил - спрашивайте.


 
antonn ©   (2010-11-26 21:25) [1]

а фреймы не подойдут?


 
bss   (2010-11-26 23:17) [2]

в зависимости от настроек компонента я бы выводил на нем то или иное количество эдиторов.

Например, представим себе компонент редактирования контактов. Если там свойства "ShowPhone" и "ShowFax" установлены в true, то я вывожу визуалку, позволяющую редактировать телефон и факс. Если в false - то не вывожу. А с фреймами непонятно как это сделать. Статично очень.


 
clickmaker ©   (2010-11-26 23:21) [3]

> А с фреймами непонятно как это сделать. Статично очень

открою страшную тайну: компоненты можно создавать не только перетаскивая их мышкой на форму.
можно еще и так
if ShowPhone then begin
 PhoneEdit := TEdit.Create();
 ...


 
Virgo_Style ©   (2010-11-27 10:45) [4]

А я бы, наверное, использовал Visible или даже Enabled.

Если сегодня поле ввода телефона находится вверху слева, а завтра - внизу справа (из-за появившихся новых полей), лично меня бы это очень расстроило.


 
vuk ©   (2010-11-27 11:39) [5]

to bss   (26.11.10 23:17) [2]:

>  А с фреймами непонятно как это сделать.

Как ни странно - точно так же как с любыми компонентами.


> Статично очень.

Ого! А мужики-то не знают! :))

P.S. В результате долгой и напряженной работы мысли изобретен велосипед. :)


 
_Юрий   (2010-11-27 12:53) [6]


> Хочется, чтобы ручками в design-time"e программист не смог
> дотянуться до этих "наложенных" контролов. Чтобы они визуально
> были видны для оценки, но щелчок по ним приводил к выделению
> самого основного компонента, то есть они шли фоном как картинка.
>


А по умолчанию так и будет, чтобы вложенные динамически созданные контролы начали вести себя как самостоятельные элементы дизайна, надо приложить определенные усилия


 
bss   (2010-11-27 14:57) [7]


> можно еще и так
> if ShowPhone then begin
>  PhoneEdit := TEdit.Create();


> Как ни странно - точно так же как с любыми компонентами.


но где динамически создавать? Я заоверайдил конструктор у фрейма - не помогло. События специфичного не нашел.


> А по умолчанию так и будет, чтобы вложенные динамически
> созданные контролы начали вести себя как самостоятельные
> элементы дизайна, надо приложить определенные усилия

ясно, спасибо!


 
vuk ©   (2010-11-27 16:25) [8]

to bss   (27.11.10 14:57) [7]:

> Я заоверайдил конструктор у фрейма - не помогло.

Странно, мне помогает. Что-то делаю не так?


 
bss   (2010-11-28 15:08) [9]

Я говорю про design-time


 
Дмитрий С ©   (2010-11-28 17:06) [10]

если уж на то пошло, что мешает того же потомка tpanel сделать?


 
bss   (2010-11-28 20:14) [11]

У фрейма в Design-time не вызывается конструктор, плюс к этому непонятно как добавить published property у фрейма (чтобы оно появилось в object inspector).


 
vuk ©   (2010-11-28 21:27) [12]

Добавьте фрейм в дизайнтайм пакет и установите его в палитру как компонент.



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

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

Наверх




Память: 0.49 MB
Время: 0.008 c
15-1290896924
Friencis
2010-11-28 01:28
2011.03.06
ServicePack for Delphi7 (d7_ent_upd1_1.exe)


15-1290067685
palva
2010-11-18 11:08
2011.03.06
О вечном двигателе


15-1290288586
Юрий
2010-11-21 00:29
2011.03.06
С днем рождения ! 21 ноября 2010 воскресенье


15-1290872112
Unknown_user
2010-11-27 18:35
2011.03.06
DCC32 и Turbo pascal


2-1292409400
RUu
2010-12-15 13:36
2011.03.06
несоответствие типов