RxMDI

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

RxMDI

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

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

Re: RxMDI

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

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

Re: RxMDI

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

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

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

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

Re: RxMDI

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

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

вообще, насколько я помню, нужное тобой событие вызывается функцией {имя формы}.Show но у меня показ формы не очищает даже Memo.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4238
Зарегистрирован: 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
постоялец
 
Сообщения: 131
Зарегистрирован: 03.12.2012 20:21:35

Re: RxMDI

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

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


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

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

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

Re: RxMDI

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

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

Re: RxMDI

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

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

Re: RxMDI

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

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

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


Вернуться в RxLib

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

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

Рейтинг@Mail.ru