RxMDI

Модераторы: alexs, Модераторы

RxMDI

Сообщение ssadragon » 28.05.2013 12:18:57

Можно ли как-то сделать чтобы отрабатывалось событие FormShow при показе уже созданной формы, например при нажатии на кнопку на TRxMDITasks
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: RxMDI

Сообщение Лекс Айрин » 28.05.2013 12:46:06

А зачем? OnPaint не прокатит?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: RxMDI

Сообщение ssadragon » 28.05.2013 12:58:55

Лекс Айрин писал(а):А зачем?

чтоб обновить например грид на форме или есче какие операции при показе формы
Лекс Айрин писал(а):OnPaint не прокатит?

он вызывается постоянно, а мне надо только один раз когда форма появилась
и убивать форму не надо
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: RxMDI

Сообщение Лекс Айрин » 28.05.2013 13:52:19

ssadragon, а что мешает добавить грид и обновить форму, вызвав событие OnPaint?

вообще, насколько я помню, нужное тобой событие вызывается функцией {имя формы}.Show но у меня показ формы не очищает даже Memo.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: RxMDI

Сообщение ssadragon » 28.05.2013 14:05:22

Лекс Айрин писал(а):вызывается функцией {имя формы}.Show

да это так, но видимо RxMDI этого не делается. И FormHide тоже не вызывается, хотя не помешало бы.
Лекс Айрин писал(а):но у меня показ формы не очищает даже Memo

дк он сам не очистится, вот для таких действий я и использую FormShow.

Добавлено спустя 12 минут 12 секунд:
Решил сию проблему вот так:
Код: Выделить всё
Index: rxmdi.pas
===================================================================
--- rxmdi.pas   (revision 2739)
+++ rxmdi.pas   (working copy)
@@ -217,25 +217,30 @@
//  FLabelPosition := lpAbove;
   FLabelSpacing := 3;
   CreateInternalLabel;
-  Glyph:=LoadLazResBitmapImage('RxMDICloseIcon');
+  //Glyph:=LoadLazResBitmapImage('RxMDICloseIcon');  // Какая-то утечка происходит и из-за этого закомментарил
end;

{ TRxMDIPanel }

procedure TRxMDIPanel.SetCurrentChildWindow(AValue: TForm);
begin
+  If Assigned(FCurrentChildWindow) then
+    FCurrentChildWindow.Hide;                                    // Hide предыдущей активной формы, после вызывается FormHide
   FCurrentChildWindow:=AValue;
+  If Assigned(FCurrentChildWindow) then
+    FCurrentChildWindow.Show;                                  // Show текущей активной формы, после вызывается FormShow
   if Assigned(FCloseButton) then
   begin                 
     FCloseButton.Enabled:=Assigned(FCurrentChildWindow);
-    if FCloseButton.Enabled then
+    if (FCloseButton.Enabled) and (FCloseButton.Visible) then
       FCloseButton.FInfoLabel.Caption:=FCurrentChildWindow.Caption
     else
       FCloseButton.FInfoLabel.Caption:='';
   end;

   if Assigned(TaskPanel) then
-    TaskPanel.Visible:=Assigned(FCurrentChildWindow);
+    //TaskPanel.Visible:=Assigned(FCurrentChildWindow);  // Ну а это мне не нужно так как я не хочу показывать RxMDITasks
end;

procedure TRxMDIPanel.navCloseButtonClick(Sender: TObject);

Вроде работает. Ну может и получше место есть где можно вызывать Show/Hide - это лучше известно разработчику компоненты.
Но не нарыл еще куда лучше будет вставить Hide MDI формы при уничтожении главной(на которой находится RxMDIPanel)
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: RxMDI

Сообщение Лекс Айрин » 28.05.2013 15:07:28

ssadragon писал(а):дк он сам не очистится,


Я знаю... но мне это и не надо.

Попробуйте все же как я сказал... по крайней мере, такой способ должен требовать меньше времени и ресурсов.

Добавлено спустя 1 час 34 минуты 1 секунду:
нашел таки.. как перерисовывать... viewtopic.php?f=5&t=713
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: RxMDI

Сообщение alexs » 29.05.2013 22:58:07

В принципе патчик понятен. Только смысл физически прятать/показывать форму? Можно просто дёрнуть обработчики OnShow/OnHide у формы.
Какие ещё пожелания по доработке есть?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxMDI

Сообщение Лекс Айрин » 30.05.2013 09:49:11

alexs, а как все же идеологически правильно?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: RxMDI

Сообщение alexs » 30.05.2013 19:54:45

А вот даже не задумывался.
В настоящем MDI окна не прячутся при переходе из одного окна в другое. И события эти не работают.

Добавлено спустя 29 секунд:
Кстати - можно отдельное событие сделать - переключение активного окна.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxMDI

Сообщение alexs » 07.11.2018 11:34:55

Доработки - добавил флаги RxMDIPanel.Options;
rxpoCloseF4 - закрывать дочернии окна по Ctrl+F4
rxpoSwithByTab - перключать дочерние окна нажатием на клавиатуре Ctrl+Tab (в обратном порядке - Ctrl+Shift+Tab)
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxMDI

Сообщение alexs » 17.01.2019 14:15:38

Новый функционал - теперь есть возможность включить отображение списка окон в главном меню.
Добавил свойство WindowMenu
Поведение не долдно отличаться от штатного MDI windows
Пока нет ограничения на кол-во отображаемых открытых окно. И нет пункта меню с вызовом окна со списком открытых окон. По мере надобности - планирую реализовать.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxMDI

Сообщение Lucifer » 11.07.2019 10:30:45

Тоже хочется... Сейчас вот делаю мультиязычную прогу. И при трансляции с использованием штатного функционала SetDefaultLang не переводит уже открытые MDI-окна на лету. В кнопках остается старый язык, который был до смены. Алекс, подскажи, куда копнуть. Переоткрыть окна не предлагать - некоторые должны быть открыты постоянно, увы. Repaint в MDITask не помогает.
Lucifer
постоялец
 
Сообщения: 121
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Re: RxMDI

Сообщение alexs » 11.07.2019 10:38:24

Готового ответа нет. Надо знать - как модуль трансляции сообщает всем объектам о смене языка? Там какое-то сообщение рассылается? Или ещё как?
Заголовки кнопок берутся из заголовка окна. Надо просто в нужный момент вызвать процедуру обновления заголовка. Ну и ещё - проверить как будут формироваться тексты в всплывающем меню.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxMDI

Сообщение Lucifer » 11.07.2019 10:58:32

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

Добавлено спустя 53 минуты 31 секунду:
alexs писал(а):Новый функционал - теперь есть возможность включить отображение списка окон в главном меню.
Добавил свойство WindowMenu
Поведение не долдно отличаться от штатного MDI windows

Я так понял, что не реализовано еще? Или где его включить?
Lucifer
постоялец
 
Сообщения: 121
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Re: RxMDI

Сообщение alexs » 11.07.2019 13:53:52

Да. Готового метода нет. Не могу пока понять - как перехватить событие изменения заголовка окна.
как временное решение - добавил новый метод RxMDITasks.UpdateMDICaptions; - обновить все заголовки кнопок согласно текущим заголовкам.
Будет достаточно его вызвать после смены языка:
Код: Выделить всё
procedure TForm1.MenuItem3Click(Sender: TObject);
begin
  SetDefaultLang('ru', '', '', true);
  RxMDITasks1.UpdateMDICaptions;
end;
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

След.

Вернуться в RxLib

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

Рейтинг@Mail.ru
cron