Delphi: управление несколькими экземплярами TFrames - PullRequest
1 голос
/ 20 января 2011

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

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

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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 21 января 2011

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

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

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

1 голос
/ 20 января 2011

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

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

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

0 голосов
/ 21 января 2011

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

...