D Forms Library TableLayoutPanel? - PullRequest
       5

D Forms Library TableLayoutPanel?

10 голосов
/ 09 июля 2011

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

Есть ли какая-либо реализация TableLayoutPanel для DFL?
Как люди обычно используют эту библиотеку без нее?

Edit:

Ссылка на другую программу, использующую DFL, будет отличным бонусом за ответ. :)

Ответы [ 3 ]

6 голосов
/ 12 июля 2011

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

Я отклонил ваш вопрос, потому что он сформулирован с элементами флеймбайта. Я предполагаю, что ваш предыдущий опыт работы с библиотеками GUI был в основном с библиотеками, поддерживающими макеты блоков, такими как Qt. Сам Win32 GUI API не предоставляет никаких примитивов для создания макетов блоков - он использует абсолютные координаты насквозь. Это остается неизменным во многих библиотеках OO, которые основаны на API, таких как MFC. Некоторые библиотеки, такие как VCL, имеют необязательные примитивы для создания макетов блоков (панелей с выравниванием и авторазмером), но, в конце концов, все контрольные изменения положения должны выполняться приложением или структурой GUI, поэтому что-то подобное должно быть реализованным в DFL с нуля.

Итак, чтобы ответить на ваши вопросы:

Существует ли какая-либо реализация TableLayoutPanel для DFL?

Вероятно, нет.

Как люди обычно используют эту библиотеку без нее?

Они рисуют элементы управления на форме с помощью мыши, используя Entice Designer. (То же самое верно для MFC / Visual Studio, VCL / Delphi IDE и т. Д.)


Ответ на комментарий:

как поместить вещи в макет таблицы (например, две рядом и одна ниже)?

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

  1. В Entice Designer поместите панель, установите для dock значение BOTTOM. Установите его высоту соответствующим образом.
  2. Поместите вторую панель, установите ее dock на RIGHT.
  3. В коде вашей формы добавьте следующий метод:
    protected override void onResize(EventArgs ea)
    {
        super.onResize(ea);
        panel2.width = this.clientRectangle.width / 2;
    }

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

Или вы говорите, что это плохая идея?

Определенно не моя точка зрения - преимущества семантических макетов, которые не требуют использования IDE для построения, хорошо видны. Просто из-за своих корней Win32 API библиотеки Windows редко предоставляют хорошие средства для их создания. Конечно, их отсутствие не делает создание графических интерфейсов невозможным или даже сложным - люди обычно просто используют формы фиксированного размера и т. Д. (Это хорошо видно конечным пользователям, переходящим с Windows на KDE - большинство диалогов KDE имеют изменяемый размер, тогда как Windows 'нет.)

1 голос
/ 11 июля 2011

Теперь, когда я близок к своему коду, есть два способа управления макетом. Как отметил храповик, есть абсолютные позиции, а также стыковка. Стыковка размещает предмет в 5 возможных местах . Сверху, снизу, слева, справа или по центру (заливка). Затем вы можете поместить панель в одну из них, которая сама может содержать элементы, закрепленные внутри нее. Вы присваиваете значение закрепления для свойства dock .

Entice Designer написан с использованием DFL.

1 голос
/ 11 июля 2011

при отсутствии компоновки таблицы вы можете использовать свойства location и size для размещения элементов на доске (и, возможно, даже реализовать собственную компоновку таблицы)

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

...