2011-01-20 3 views
1

В this article есть объяснение того, как использовать TFrames в качестве альтернативы TTabSheets в Delphi PageControl.Delphi: Управление несколькими экземплярами TFrames

Я размышлял о подобном упражнении, которое, как представляется, не дает решения, и для которого мое решение кажется чрезмерно сложным.

Требование предназначено для интерфейса с вкладками, где каждая вкладка может быть одной из нескольких различных конструкций. Каждая конструкция реализована как TFrame.

Из-за характера разрабатываемого приложения мы можем иметь несколько копий любого кадра, открываемого в любой конкретный момент (с содержанием каждой вкладки, отличающейся, но не дизайном), чтобы пользователь мог сравнить детали 2/3 разных предметов одновременно.

Например, в одной сессии, мы можем иметь 3 открытых вкладок, все рамной конструкции А. В другом случае мы можем иметь 3 открытых вкладок каждого из кадров A, B и C.

Конструкция должна быть достаточно гибкой, чтобы мы могли добавить Frames к дизайну по запросу.

В настоящее время решение, которое у меня есть, состоит в том, чтобы иметь отдельных TLists, управляющих каждым типом фрейма, который у нас открыт, и, возможно, мастер-TList, чтобы отслеживать открытые вкладки. Как я уже сказал, сложнее.

Есть ли у кого-нибудь предложение, как это можно было бы обрабатывать проще?

+4

У меня нет требования для * управления *. Копии определенного кадра - это разные экземпляры, верно? Так в чем проблема? IOW, что делает ваш * список *? –

+0

Это то, что я люблю о SE :) Был слишком догнал концепцию большего, чтобы уменьшить ее. Сертак, можете ли вы опубликовать это как ответ, чтобы я мог его принять :) –

+0

Я не могу понять разумный ответ из кучки вопросов. ;) Пожалуйста, дайте ответ самостоятельно, если ни один из существующих не удовлетворит этот вопрос, вы знаете, что ваш дизайн лучше всего. –

ответ

1

Я бы, вероятно, оставил мастер-TList экземпляров фрейма.

Если вам это необходимо, вы сможете получить их, предварительно допросив TPageControl или через каждого из ваших отдельных TLists для каждого типа кадра.

Кроме того, ваш подход звучит разумно.

1

У меня есть приложение, которое управляет кадрами на одной панели с помощью моего собственного элемента управления меню, чтобы контролировать, какая рамка видна. Когда мне нужно сделать рамку видимой, я просто установил видимый: = false для каждого кадра на панели, кроме той, которую я хочу. Я контролирую, что происходит на панели, поэтому я знаю, что, по крайней мере, каждый элемент управления является Tframe, и я могу попасть в каждый кадр, перейдя через свойство Controls Panel. Затем я использую интерфейсы для связи между моей основной формой и моими кадрами.

Теперь, если вы хотите использовать стандартный интерфейс с вкладками, вы все равно можете использовать элемент управления страницы, как вы предложили, вы знаете, что на каждом TtabSheet есть один Tframe, и вы можете проверить его тип и работать с ним по мере необходимости , Я не понимаю, почему вам нужен Tlist, потому что, если вам действительно нужно попасть в «список Tframes», вы могли бы построить его dyamically в любом случае, итерации по TtabSheets в элементе управления страницы.

Альтернатива, которая будет работать аналогично моему первому подходу, но получит приятные вкладки Windows, будет использовать TtabControl вместо TpageControl. С помощью TtabControl вы просто получаете экземпляр Tstrings (в свойстве Tabs), который представляет все вкладки. Так как это Tstrings, вы можете связать объект (т. Е. Ваш Tframe) с каждым элементом и, следовательно, с каждой вкладкой. Когда вы нажимаете вкладку, вы все скрываете и показываете правильный Tframe. У вас также есть свой список, потому что он прикреплен к TtabControl через свойство Tabs. Вам просто нужно самостоятельно управлять видимостью фреймов.

+0

Это имело бы смысл, если бы у меня был только один экземпляр каждого типа кадров. Например, если у меня есть 3 кадра (A, B & C) и три открытых вкладки, они могут быть AAA, BBC, ABC и т. Д. Во время разработки я не знаю, сколько из каждого кадра может быть открыто ... –

+0

У меня нет фреймов во время разработки. Просто создайте фреймы динамически, установите родительский элемент соответствующим образом для выбранного сценария и установите соответствие с alClient. Для каждого сценария вы все равно можете перебирать родительские/страницы и находить свои фреймы. Думаю, как предполагали другие, нет необходимости вести список (или списки). Я просто пытался предоставить пару различных способов достижения одного и того же. – Jenakai

0

Мы используем TPageControl и создаем среду исполнения потомком TTabSheet, у которого есть новое свойство для нашего собственного TFrame (нам не нужно сканировать.Элементы управления или. Компоненты для поиска в нашем кадре каждый раз).

 Смежные вопросы

  • Нет связанных вопросов^_^