| Автор
| Сообщение |
blackstream
Частый гость

Зарегистрирован: 08.03.2006
Сообщения: 29
|
|
|
Цитата |
|
Помогите, пожалуйста, решить такую задачку:
Есть главное окно програмы, в нем компонент TPageControl.
Как правильно создать DLL, в которой будет храниться дизайн и код TTabSheet (таких dll будет несколько),
и как их потом можна будет динамически подгружать в программу, чтобы они добавлялись страницамы
в основной TPageControl окна? |
|
| В начало |
|
 |
|
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Это плохая идея. Лучше использовать BPL. А чтобы не было извращений с визуальным дизайнером (т.е. рисуешь TabSheet на одной форме и на одном PageControl в DLL, там ее прячешь, потом перетаскиваешь в приложение), вместо TPageControl используй TTabControl + TPanel, а вместо TTabSheet соответственно TForm _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
blackstream
Частый гость

Зарегистрирован: 08.03.2006
Сообщения: 29
|
|
|
Цитата |
|
| Спасибо! Буду пробовать этот способ. |
|
| В начало |
|
 |
|
|
|
Цитата |
|
| Можно и DLL. Создаем в DLL отдельную форму с набором закладок. И этим закладкам (страницам) можно менять родителя. А если DLL создана не в дельфи, то лучше менять не родителя, а хендл родительского окна. |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Я ж специально написал - | Цитата: | | А чтобы не было извращений с визуальным дизайнером (т.е. рисуешь TabSheet на одной форме и на одном PageControl в DLL, там ее прячешь, потом перетаскиваешь в приложение), |
_________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|
|
|
Цитата |
|
Когда в проекте сотни визуальных форм, использование TPageControl и визуального редактора это не извращение, а производственная необходимость. Ибо в дельфи 1 форма=5 файлов или 2 модуля (форма и ее код) и прыгать по ним весьма напряжно, особенно, если обработчики действий взаимосвязаны, но раскиданы по куче файлов. Проще все разместить на удобных визуальных заклдках в одной форме, а в рантайме отображать их по мере необходимости. Только если в рантайме будет несколько экземпляров одной формы, есть смысл выделить ее в отдельную форму или фрейм.
Единственный недостаток такого способа - жрет много памяти, потому как разом создаются ВСЕ визуальные элементы. Но этот недостаток полностью перекрывется простотой реализации, удобством применения и быстродействием. |
|
| В начало |
|
 |
|
|
|
Цитата |
|
| Кстати, никто не запрещает положить на закладку TTabSheet панель TPanel и избежать геморроя с TTabControl =) |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
to Хантер
Да нет, это не слишком хорошая идея. Если в проекте сотни визуальных форм, его архитектуру надо максимально упрощать, а не собирать мегаформы. Тяжелая форма с трудом переваривается редактором форм. Код, переносящий контролы со вкладок на формы, неочевиден и запутывает тех, кто будет разбирать программу после тебя. Т.е. это решение, конечно, имеет право на жизнь - но оно далеко не самое практичное, особенно когда работаешь не в одиночку.
Нет никаких проблем сделать в проекте сотню форм. Главное - не сваливать их в одну кучу под названиями Form1.. FormN, а выработать нормальную систему организации файлов проекта. Этого достаточно. _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
Hunter
Энтузиаст

Зарегистрирован: 14.09.2006
Сообщения: 349
|
|
|
Цитата |
|
Хорошо, простой пример. Классическая форма настроек программы - слева список разделов, справа сами разделы с настройками. Разделов много, причем, они динамические - могут добавляться из плагинов, создаваться по мере надобности (например, для разных аккаунтов). Настройки могут быть взаимосвязанными, влиять друг на друга, находясь в разных разделах.
Как это можно грамотно реализовать посредством отдельных форм? =)
У меня это реализовано двумя модулями. В одном содержатся классы каркаса конфигов - структуры, похожей на виндовый реестр, позволяющей хранить любые значения, делать загрузку-выгрузку, итд.. Эдакая древообразная база данных. В другом модуле основная форма конфига и "страница по умолчанию", позволяющая напрямую обращаться к содержимому конфига (в отладочных целях). К основному конфигу "пристыковываются" экземпляры конфигов из других частей программы, каждая ветка конфига может содержать хендл панели с контролами настроек, при смене ветки отображается панель, закрепленная за этой веткой. При открытии формы конфига данные из конфига переписываются в контролы, при сохранении данные из контролов пишутся в конфиг. Черновую реализацию (с исходниками) можно глянуть здесь: http://irchat.ru/files/Config.rar |
|
| В начало |
|
 |
|
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Понятно. Я бы сделал так: базовую форму страницы (ну, что там у них общего - функции добавления в список разделов окна настроек, загрузки/сохранения своих настроек в общее хранилище или куда мне надо и т.д.), и потом каждую страницу просто наследовал бы от этой формы, добавляя на нее нужные контролы. Собственно код построения окна умещается в пару десятков строчек, и работает так же замечательно.
И еще, я бы не делал взаимосвязанные настройки из разных разделов. "Бритва Оккама" и KISS-принцип - основополагающие правила разработки программ
Добавлено спустя 1 минуту 44 секунды:
Еще вариант - если мне не нужны всякого рода плагины, я вообще сделаю один PageControl с настройками. Только скрою у него табы, и вместо них сделаю что-нибудь приличное _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|