Страница 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;