Страница 1 из 3
		
			
				RxMDI
				
Добавлено: 
28.05.2013 12:18:57 ssadragon
				Можно ли как-то сделать чтобы отрабатывалось событие FormShow при показе уже созданной формы, например при нажатии на кнопку на TRxMDITasks
			 
			
		
			
				Re: RxMDI
				
Добавлено: 
28.05.2013 12:46:06 Лекс Айрин
				А зачем? OnPaint не прокатит?
			 
			
		
			
				Re: RxMDI
				
Добавлено: 
28.05.2013 12:58:55 ssadragon
				Лекс Айрин писал(а):А зачем?
чтоб обновить например грид на форме или есче какие операции при показе формы
Лекс Айрин писал(а):OnPaint не прокатит?
он вызывается постоянно, а мне надо только один раз когда форма появилась
и убивать форму не надо
 
			
		
			
				Re: RxMDI
				
Добавлено: 
28.05.2013 13:52:19 Лекс Айрин
				ssadragon, а что мешает добавить грид и обновить форму, вызвав событие OnPaint?
вообще, насколько я помню, нужное тобой событие вызывается функцией {имя формы}.Show но у меня показ формы не очищает даже Memo.
			 
			
		
			
				Re: RxMDI
				
Добавлено: 
28.05.2013 14:05:22 ssadragon
				Лекс Айрин писал(а):вызывается функцией {имя формы}.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)
 
			
		
			
				Re: RxMDI
				
Добавлено: 
28.05.2013 15:07:28 Лекс Айрин
				ssadragon писал(а):дк он сам не очистится,
Я знаю... но мне это и не надо.
Попробуйте все же как я сказал... по крайней мере, такой способ должен требовать меньше времени и ресурсов.
Добавлено спустя 1 час 34 минуты 1 секунду:нашел таки.. как перерисовывать... 
viewtopic.php?f=5&t=713 
			
		
			
				Re: RxMDI
				
Добавлено: 
29.05.2013 22:58:07 alexs
				В принципе патчик понятен. Только смысл физически прятать/показывать форму? Можно просто дёрнуть обработчики OnShow/OnHide у формы.
Какие ещё пожелания по доработке есть?
			 
			
		
			
				Re: RxMDI
				
Добавлено: 
30.05.2013 09:49:11 Лекс Айрин
				alexs, а как все же идеологически правильно?
			 
			
		
			
				Re: RxMDI
				
Добавлено: 
30.05.2013 19:54:45 alexs
				А вот даже не задумывался.
В настоящем MDI окна не прячутся при переходе из одного окна в другое. И события эти не работают.
Добавлено спустя 29 секунд:
Кстати - можно отдельное событие сделать - переключение активного окна.
			 
			
		
			
				Re: RxMDI
				
Добавлено: 
07.11.2018 11:34:55 alexs
				Доработки - добавил флаги RxMDIPanel.Options;
rxpoCloseF4 - закрывать дочернии окна по Ctrl+F4
rxpoSwithByTab - перключать дочерние окна нажатием на клавиатуре Ctrl+Tab (в обратном порядке - Ctrl+Shift+Tab)
			 
			
		
			
				Re: RxMDI
				
Добавлено: 
17.01.2019 14:15:38 alexs
				Новый функционал - теперь есть возможность включить отображение списка окон в главном меню.
Добавил свойство WindowMenu
Поведение не долдно отличаться от штатного MDI windows
Пока нет ограничения на кол-во отображаемых открытых окно. И нет пункта меню с вызовом окна со списком открытых окон. По мере надобности - планирую реализовать.
			 
			
		
			
				Re: RxMDI
				
Добавлено: 
11.07.2019 10:30:45 Lucifer
				Тоже хочется... Сейчас вот делаю мультиязычную прогу. И при трансляции с использованием штатного функционала SetDefaultLang не переводит уже открытые MDI-окна на лету. В кнопках остается старый язык, который был до смены. Алекс, подскажи, куда копнуть. Переоткрыть окна не предлагать - некоторые должны быть открыты постоянно, увы. Repaint в MDITask не помогает.
			 
			
		
			
				Re: RxMDI
				
Добавлено: 
11.07.2019 10:38:24 alexs
				Готового ответа нет. Надо знать - как модуль трансляции сообщает всем объектам о смене языка? Там какое-то сообщение рассылается? Или ещё как?
Заголовки кнопок берутся из заголовка окна. Надо просто в нужный момент вызвать процедуру обновления заголовка. Ну и ещё - проверить как будут формироваться тексты в всплывающем меню.
			 
			
		
			
				Re: RxMDI
				
Добавлено: 
11.07.2019 10:58:32 Lucifer
				Нет. Там просто создается системный Translator, который берет оригинал и перевод из файла и на лету меняет текст в контролах. Такое впечатление, что он просто не может получить хэндл окон в MDI и поэтому их игнорит напрочь.
Добавлено спустя 53 минуты 31 секунду:alexs писал(а):Новый функционал - теперь есть возможность включить отображение списка окон в главном меню.
Добавил свойство WindowMenu
Поведение не долдно отличаться от штатного MDI windows
Я так понял, что не реализовано еще? Или где его включить?
 
			
		
			
				Re: RxMDI
				
Добавлено: 
11.07.2019 13:53:52 alexs
				Да. Готового метода нет. Не могу пока понять - как перехватить событие изменения заголовка окна.
как временное решение - добавил новый метод 
RxMDITasks.UpdateMDICaptions; - обновить все заголовки кнопок согласно текущим заголовкам.
Будет достаточно его вызвать после смены языка:
- Код: Выделить всё
- procedure TForm1.MenuItem3Click(Sender: TObject);
 begin
 SetDefaultLang('ru', '', '', true);
 RxMDITasks1.UpdateMDICaptions;
 end;