Jump to content

Редактор формы (Form Designer) - проблема с отображением UniGUI контролов


EOR

Recommended Posts

Пробую написать редактор форм для UniGUI контролов для последующей динамической подгрузки файла формы в run-time. Но после размещения на форме дизайнера некоторые компоненты UniGUI не правильно отображаются (только как рамки).

Контролы UniGUI  - в design mode.

Свойства VCLMode = true, WebMode = false,  csDesigning in ComponentState = true

Как сделать нормальное отображение компонента при вставке и изменении свойств в инспекторе объектов?

image.png.056cc7955aa453f08ab16c7cb5119eea.png

 

Редактор форм написан с использованием пробной версии LMD DesignPack https://www.lmdinnovative.com/products/vcl/lmddesignpack/

Демо проект UniGUIandLMDDesigner.zip работает только при запущеном Delphi

 

Заранее спасибо.

 

 

Link to comment
Share on other sites

Может кто подскажет почему в IDE Delphi в режиме проектирование формы UniGUI uniMemo1 - отображается нормально.

image.png.c587b05d1d495f51e8ad653cfb9891f6.png

Тот же контрол  UniGUI uniMemo1 после запуска приложения

image.png.b24ffbfe4b77f1cf6e2c667462e91f9e.png

 

Как включить отображение  UniGUI uniMemo1 на обычной форме в режиме VCLMode = true на обычной VCL форме TForm??? 

Спасибо.

Link to comment
Share on other sites

Никогда не использовал  LMDDesigner, просто домыслы: возможно LMDDesigner ничего не знает о нестандартных компонентах.

Возможно, где-то, в каких-то свойствах нужно прописать соответствие, что TuniMemo = TMemo и т.д.

Link to comment
Share on other sites

LMD Designer использует для редактирования формы в общем случае потомков обычной стандартной формы TForm.

Поэтому вопрос состоит в том, что как нормально отобразить на обычной форме TForm контролы UiniGUI в том виде в котором мы его видим в редакторе форм Delphi IDE.

image.thumb.png.38c2abb6e98c559d8a34c910d2c3f666.png 

Но при запущенном приложении отображение нормально не происходит:

image.png.ea1624f2350a84f5c55b950cc84d6a83.png

Может есть какое-то свойство компонента UniGUI которое отвечает за отображение его в дизайн тайме типа VCLControl, которое почему-то не работает.

В выражении 

 TMemo(UniMemo1.VCLControl).Lines.Text := '111'; //  TMemo(UniMemo1.VCLControl).Lines = nil

Что как мне кажется не правильно. Нет?

И вообще при вставке любого UniGUI компонента с палитры UniGUI Standard (см. рисунок) выясняется, что имя класса (c.VCLControl.ClassName) у всех один и тот же: TCustomTransparentControl

image.png.f6946a09f57ceb8dd7fae4873e51b9c2.png

И соответственно нормально  не приводится к соответствующим типам TMemo, TButton

 

Link to comment
Share on other sites

Тут ничего не понял про

10 minutes ago, EOR said:

свойство компонента UniGUI которое отвечает за отображение его в дизайн тайме типа VCLControl

 

а тут почему нельзя просто

UniMemo1.Lines.Text := '111'

?

Link to comment
Share on other sites

37 minutes ago, x11 said:

Тут ничего не понял про

?

Это было просто для примера. Чтобы понять что у UniMemo1лежит в VCLControl.

Теоретически у компонентов UniGUI  есть ссылка на компонент, отображаемый в дизайнере Delphi IDE вместо реального компонента UniGUI.  То есть вместо TuniMemo будет отображен TMemo и т.п.

Согласно документации http://www.unigui.com/doc/online_help/api/!!MEMBERTYPE_Properties_uniGUIBaseClasses_TUniGUIBaseControl.html

Свойство 

VCLControl is a design time instance of a VCL control which visually represent UniGUI control in designer. This control is provided to enhance developer's experience when designing forms. For some controls such as TUniDBGrid VCLControl also provide additional functionalities such as column re-sizing.

 

Что примерно означает: VCLControl - это экземпляр элемента управления VCL во время разработки, который визуально представляет элемент управления UniGUI в дизайнере. Этот элемент управления предназначен для повышения удобства разработки форм для разработчиков. Для некоторых элементов управления, таких как TUniDBGrid, VCLControl также предоставляет дополнительные функции, такие как изменение размера столбца.

Таким образом здесь должны быть ссылки на экземпляры  TMemo, TButton и т.д. а здесь мы имеем TCustomTransparentControl.

Это не работает, или я просто не умею его готовить :)

ЗЫ. А вот в дизайнере Delphi IDE это работает 

Link to comment
Share on other sites

Если я правильно понял, Вы хотите в десктопной версии проектировать веб интерфейс?

Если так, то использовать vcl  контролы Фаршада у Вас не получится .

Решение простое, но трудоёмкое.

Для Unigui Tsomebutton=class(Tunibutton)

Для десктопа  TSomebutton=class(Tbutton)

Дальше, думаю,  понятно 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...