Форум: "Прочее";
Текущий архив: 2011.03.06;
Скачать: [xml.tar.bz2];
ВнизКомпонент наподобии 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c