5

Я рассматриваю разные макеты пользовательского интерфейса для своего следующего проекта, и мне было интересно, есть ли интегрированные или сторонние фреймворки, которые позволяют мне создавать интерфейс с вкладками документов?Интерфейс с вкладками в Delphi

Чтобы уточнить, что я хочу, это не какой-то механизм стыковки или интерфейс MDI, а прежде всего каркас, который позволяет мне иметь одну основную форму и одну или несколько вторичных форм, которые будут отображаться как вкладки внутри основной формы ,

Хотя я сказал, что мне не нужен какой-либо механизм стыковки, я сделал небольшое тестовое приложение, которое на самом деле его использует. Результат, который я получил, очень близок к тому, что я хочу. Во-первых, я пропускаю некоторые функции, такие как кнопка закрытия на каждой вкладке. Во-вторых, мне нужно было создать собственную структуру, чтобы автоматизировать все задачи, такие как создание и уничтожение вкладок, объединение каждой новой формы с ее вкладкой, освобождение формы при закрытии связанной вкладки и т. Д. Я не говорю, что не могу этого сделать, но я хотел бы знать, есть ли готовые фреймворки, которые уже имеют все эти функции. Хотя я бы предпочел решение с открытым исходным кодом, также приветствуется коммерческий.

+0

Проблема интерфейсов с вкладками выходит далеко за рамки добавления вкладок. Это легкая часть. Есть более сложные, например, добавление слияния меню/панелей инструментов/лент разумным способом. –

+0

В моем случае только основная форма будет содержать панель меню и не будет сливаться с меню из других форм, так как там не будет никаких меню. С панелями инструментов это другое. Нормально иметь дополнительные панели инструментов в каждой форме и, поскольку эти формы будут «интегрированы» внутри основной формы и подключены к ее вкладке, эти вторичные панели инструментов будут «прямо у себя дома» с функциями, связанными только с формами, которые они размещают in. – LightBulb

ответ

6

Я не думаю, что есть какие-либо рамки интерфейс с вкладками, но приятные глазу элементы управления вкладки/страницы с кнопки закрытия на каждой вкладке, пожалуйста, проверьте следующее:

  1. rkSmartTabs, он имитирует Google Chrome браузера с вкладками. и это с открытым исходным кодом.
  2. TAdvOfficePager, MS Office стиль.

Надеюсь, что это поможет.

+1

rkSmartTabs - действительно красивый компонент, и код очень понятен! –

+0

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

+0

rkSmartTabs выглядит красиво и кажется хорошей отправной точкой. В D2010 есть некоторые проблемы с дизайном времени, имена свойств несовместимы, и у меня возникли некоторые проблемы с его установкой в ​​среде IDE, поскольку автор не предоставил никакой информации о требованиях, но я могу жить со всем этим на данный момент. Мне еще нужно попробовать TAdvOfficePager. – LightBulb

0

Я рекомендую TvjPageList, который является частью набора компонентов JVCL. Это с открытым исходным кодом и, похоже, соответствует вашим требованиям.

+0

Я не вижу никаких вкладок в этом компоненте. Мне кажется, что он ведет себя аналогично TNotebook. – LightBulb

+0

@LightBulb: если он похож на TNoteBook, это просто означает, что вы помещаете свои фреймы/формы в клиентскую область основной формы ниже, чем у TNotebook. Это также означает, что вам не нужно управлять созданием/уничтожением TTabControls, на котором вы иначе поместите свои фреймы/формы, потому что это то, что требуется TPageControl. –

6

Внешние компоненты здесь не являются обязательными.

Вы можете использовать стандартные Delphi управления для получения того, что вы хотите:

  • Положите TPageControl на форме (из вкладки Win32);
  • Свойство «Выровнять по умолчанию» для alClient;
  • Щелкните правой кнопкой мыши элемент управления и выберите «Новая страница», чтобы добавить новую страницу.

Тогда не записывайте свой «вкладной» интерфейс по формам, а по кадрам.

Вы также можете создавать страницы по коду, отображая рамку внутри каждой страницы.

+0

Есть ли у вас опыт использования фреймов из DLL? Мое приложение является модульным, где каждый модуль находится в разных DLL. Исправьте меня, если я ошибаюсь, но я думаю, что Frames могут работать только с BPL. – LightBulb

+0

@LightBulb: BPL - это DLL и предпочтительный способ разделить монолитные приложения. –

+1

Вам не нужны кадры, чтобы придерживаться остальной части А.Бучеза. Используйте любой wincontrol, который вам нравится в качестве родителя в вашей DLL, и поместите его в TPageControl с помощью setParent. –

1

Я рекомендую использовать панель инструментов (TToolBar или любые аналогичные) и фреймы (TFrame), чтобы имитировать интерфейс с вкладками, причину ?! хорошо Delphi собирается перекрестная платформа (не секрет, что), они будут переносить большинство, если не весь стандартный VCL поставляется с Delphi, поэтому ПОЧЕМУ НЕ использовать это как преимущество?

Просто создайте фрейм (динамически), когда пользователь нажимает кнопку на панели инструментов и уничтожает предыдущую (если существует), поэтому вы будете использовать память минимум, время запуска/выключения приложения будет очень хорошим, на с другой стороны, если вы решили использовать (cx) TPageControl, TAdvPager и т. д., вы можете попасть в ситуацию, когда одна форма (основная подозреваемая) будет иметь столько VCL, что потребуется много НЕОБЫЧНОЙ памяти и он будет медленным.

Использование фреймов имеет много преимуществ, если в вашем приложении вам нужна «вкладка», вы можете просто создать необходимый фрейм динамически и использовать его без дополнительной работы.

В любом случае, это мои два цента, надеюсь, что это поможет.

+0

Мне нужен динамический интерфейс, что означает, что я буду создавать и уничтожать формы/фреймы для действий пользователя. Интерфейс с вкладками выглядит как хороший макет. Использование TToolBar - один из способов сделать это, но использование простого TTabSet и стыковки вновь созданных форм/фреймов внутри клиентской области основной формы звучит достаточно просто для меня, так как я могу создать всю структуру. Точка была, если бы я мог найти то, что уже существует. – LightBulb

+0

@LightBulb ohhh, ОК, я не знаю каких-либо компонентов рядом с вашими потребностями, однако я настоятельно рекомендую сохранить проект как можно дальше от сторонних компонентов, без которых вы можете жить, особенно если ваш руководитель группы или владелец компании, по мере роста проекта вы поймете, что я имею в виду. – ComputerSaysNo

+0

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

0

Я использую JVCL JvDocking и его систему стыковки с таблицами для создания MDI-подобных приложений.

Вы также можете плавать или черепицей ваши окна, а также иметь их в виде вкладок.