Jump to content

Как отследить создание каждой формы? Ищу что-то типа UniGUIMainModuleNewComponent только для форм?


Tokay

Recommended Posts

Добрый день. Есть ли где-то место в компонентах аналогичное UniGUIMainModuleNewComponent при создании всех форм? В UniGUIMainModuleNewComponent формы, к сожалению, не попадают. Нужно для перевода на другой язык, не хочется на каждой форме явно прописывать переводчик, форм больше ста.

Link to comment
Share on other sites

Я создал форму (назвал ее TfmParent), в событие создания формы вставил нужный код. А потом уже все остальные формы наследую от этой родительской формы.

Так же и с фреймами.

Link to comment
Share on other sites

17 hours ago, Sherzod said:

Рефакторинг?

как?

В Delphi разве есть функционал, который легко и просто унаследует много форм от какой-то одной?

Вроде бы даже нет вообще никакого способа, даже сложного. Придется менять руками и dfm, и pas файлы и знать что и где менять (добавлять, удалять что-то). И если где-то ошибешься...

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

 

Link to comment
Share on other sites

Ясно, буду думать. Рефакторинг, в целом, возможен. Но боюсь вот проблем с наследованием. Намного удобнее было бы некое единое место, где со всеми  (или опционально) создаваемыми формами можно было бы что-то сделать.

Link to comment
Share on other sites

У серверного модуля есть пару HTTP-событий.

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

On 6/18/2021 at 5:21 PM, Tokay said:

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

А каким "инструментом" пользуетесь? 

Link to comment
Share on other sites

On 6/29/2021 at 12:30 PM, Tokay said:

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

Решений несколько

1) Хук на создание формы 

2) Потребовать от Фаршада наличие компонента TUniScreen (назрело)

3)В событии UniGUIMainModuleNewComponent обрабатывать каждый компонент, и применять к нему перевод

 

Link to comment
Share on other sites

нам проще всего был бы 3й вариант. однако туда, как я уже писал, формы не приходят

ну и Screen было бы отлично поддержать, это само собой

Link to comment
Share on other sites

2 minutes ago, Tokay said:

нам проще всего был бы 3й вариант. однако туда, как я уже писал, формы не приходят

ну и Screen было бы отлично поддержать, это само собой

Я обошелся хуком

Link to comment
Share on other sites

  • 11 months later...

Наконец появились полные рантайм исходники и я себе поправил как хочется :)

в конце TUniBaseForm.Create

  with TUniGUIApplication(UniApplication).UniSession do
    if Assigned(UniMainModule) and Assigned(UniMainModule.OnNewComponent) then
      UniMainModule.OnNewComponent(Self);

в конце TUniFrame.Create

  with UniSession do
    if Assigned(UniMainModule) and Assigned(UniMainModule.OnNewComponent) then
      UniMainModule.OnNewComponent(Self);

'Обычный' вызов OnNewComponent убрал, дабы не было массовых вызовов.

Благодаря дописанному удалось выкинуть реально гору лишнего кода и uses'ов. Любые вновь созданные формы и фреймы централизованно приходят в MainModule.

Фаршад вероятно, сам не догадывается насколько важны полные исходники. Еще не было ни одной компоненты на моей памяти, которые не приходилось бы править под себя. А такие в общем сложные как Унигуй и подавно.

У нас сейчас уже с десяток правок в Унигуе и, вижу, будет еще больше.

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...