Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Псевдо MDI-окна и модальные окна  [new]
Док
Member

Откуда: Казань
Сообщений: 6130
Мужики, разъясните мне одну вещь.

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

Это возможно в принципе? Или модальное окно всегда будет перекрывать любое окно приложения?

=================
Док.

Win7 Ultim x64/Deb 9.6 (MATE; gtk2) i386:
FB 3.0.2.32703, Lazarus 2.1(r.60225); FPC 3.3.1 (r.41075), IBX by -Rik-

К сообщению приложен файл. Размер - 71Kb
28 апр 19, 22:56    [21873829]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4464
Док,

не понял: Parent ?
28 апр 19, 23:23    [21873845]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Док
Member

Откуда: Казань
Сообщений: 6130
Gerasimenko
не понял: Parent ?

да, а что? TabSheet - родитель формы, при отстыковке Parent = nil (форме назначается ShowInTaskBar:= stAlways, чтобы на таскбаре отображалась ее кнопка). IsHasParent - паблик свойство формы (для отладки). Могу проект выложить, но он на Лазаре и требует транковый компилятор (там дженерики внутрях) .
28 апр 19, 23:46    [21873853]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4464
Док
Gerasimenko
не понял: Parent ?

да, а что? TabSheet - родитель формы, при отстыковке Parent = nil (форме назначается ShowInTaskBar:= stAlways, чтобы на таскбаре отображалась ее кнопка). IsHasParent - паблик свойство формы (для отладки). Могу проект выложить, но он на Лазаре и требует транковый компилятор (там дженерики внутрях) .

автор
При вызове модального окна из отстыкованного окошка я пытаюсь сделать так, чтобы модальное перекрывало только отстыкованное (вызвавшее его) окно, а не все окна приложения

myModalForm.Parent:=myParentFreeForm ?
29 апр 19, 09:14    [21873936]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4464
Gerasimenko
Док
пропущено...

да, а что? TabSheet - родитель формы, при отстыковке Parent = nil (форме назначается ShowInTaskBar:= stAlways, чтобы на таскбаре отображалась ее кнопка). IsHasParent - паблик свойство формы (для отладки). Могу проект выложить, но он на Лазаре и требует транковый компилятор (там дженерики внутрях) .

автор
При вызове модального окна из отстыкованного окошка я пытаюсь сделать так, чтобы модальное перекрывало только отстыкованное (вызвавшее его) окно, а не все окна приложения

myModalForm.Parent:=myParentFreeForm ?
Parent модальной формы присвоить форму из которой она вызвана: не?
29 апр 19, 09:15    [21873937]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
ziv-2014
Member

Откуда:
Сообщений: 297
Док,
Нет, потому что сначала вызывается процедура, которая делает disable для всех окон в проекте.
Потом вызывается модальная форма.
Потом снова вызывается процедура, которая делает enable для всех окон в проекте.
Тебе надо переделывать showmodal. Изучи данную процедуру.
29 апр 19, 10:26    [21873989]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4456
Док
Мужики, разъясните мне одну вещь.

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

Это возможно в принципе? Или модальное окно всегда будет перекрывать любое окно приложения?

Модальных окон во многооконном интерфейсе X-Window да и Windows, в принципе нет, это абстракция VCL (и LCL как его копипастера)

по характеру задачи тут конечно не ShowModal надо, а например окно с POPUP-стилем, в понимании WinAPI, Tab-ы же не блокируют выполнение
29 апр 19, 11:17    [21874055]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59771
ziv-2014> Тебе надо переделывать showmodal. Изучи данную процедуру.

Ему не ShowModal надо переделывать, а делать Disable для
всех "родительских" форм (по цепочке) "псевдомодальной"
формы, кроме главной. При этом "родительская" форма в
данном случае - необязательно Parent/Owner, а вызвавшая
(для чего может понадобиться хранить соответствующую
ссылку в каждой форме и передавать её при каждом вызове).

Чтобы сделать всё это можно и ShowModal переделать, но
это некошерно, проще свой метод ShowPseudoModal добавить.

Posted via ActualForum NNTP Server 1.5

29 апр 19, 11:40    [21874099]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Gator
Member

Откуда: Москва
Сообщений: 14205
В Вин я бы поигрался стилями модального окна(формы). А в *Nixах туплю
29 апр 19, 11:48    [21874111]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Док
Member

Откуда: Казань
Сообщений: 6130
ziv-2014
Тебе надо переделывать showmodal. Изучи данную процедуру.

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

Гаджимурадов Рустам
Ему не ShowModal надо переделывать, а делать Disable для
всех "родительских" форм (по цепочке) "псевдомодальной"
формы, кроме главной.

Увы, придется ручками делать Screen.DisableForms/EnableForms. Спасибо.
29 апр 19, 12:40    [21874180]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59771
Док> Чуйствовал, что придется в исходники лезть,

Ты, как мы помним, упертый, поэтому спорить/убеждать
не буду, но на всякий случай повторю - правильнее/лучше
не переделывать/перекрывать ShowModal (туда можно
разве что подсмотреть за деталями), а сделать рядышком
свой метод, который будет делать что надо. Хотя можно и
VCL править, если ты свой фреймворк хочешь нарабатывать.

Док> Увы, придется ручками делать Screen.DisableForms/EnableForms. Спасибо.

Насколько я помню, этого не хватит, если мы имеем в виду одну
и ту же псевдомодальность (которая в отличие от модальности
позволяет одновременно/параллельно иметь несколько "доступных"
открытых псевдомодальных форм и необязательно дочерних).

Posted via ActualForum NNTP Server 1.5

29 апр 19, 14:40    [21874389]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59771
P.S. "Disable" - необязательно именно вызов самого метода
Disable, можно просто не давать передавать фокус (Activate)
на родительскую (для псевдомодальной) форму.

Posted via ActualForum NNTP Server 1.5

29 апр 19, 14:42    [21874397]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Док
Member

Откуда: Казань
Сообщений: 6130
Гаджимурадов Рустам
правильнее/лучше
не переделывать/перекрывать ShowModal (туда можно
разве что подсмотреть за деталями)

Так и я о чем :)

Гаджимурадов Рустам
этого не хватит, если мы имеем в виду одну
и ту же псевдомодальность

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

Кстати, попутный вопрос (лень гуглить). Есть ли простой способ перебрать все окна экрана, которые относятся только к текущему приложению?
29 апр 19, 17:34    [21874672]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4456
Док
Кстати, попутный вопрос (лень гуглить). Есть ли простой способ перебрать все окна экрана, которые относятся только к текущему приложению?
есть, но в VCL, например, проще использовать Application.Forms
29 апр 19, 20:20    [21874841]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
aleksandr-pro
Member

Откуда: Самара
Сообщений: 187
Док,

возможно с небольшими ограничениями правда но возможно, есть такая тема
http://rsdn.org/forum/delphi/2891825.all

вот оттуда и отчасти из других источников я делал процедурку которая при многооконном (правда не DMI)интерфейсе реализует как раз то что надо, сделана как раз способом который выше описывает
Гаджимурадов Рустам
ziv-2014> Тебе надо переделывать showmodal. Изучи данную процедуру.

Ему не ShowModal надо переделывать, а делать Disable для
всех "родительских" форм (по цепочке) "псевдомодальной"
формы, кроме главной. При этом "родительская" форма в
данном случае - необязательно Parent/Owner, а вызвавшая
(для чего может понадобиться хранить соответствующую
ссылку в каждой форме и передавать её при каждом вызове).

Чтобы сделать всё это можно и ShowModal переделать, но
это некошерно, проще свой метод ShowPseudoModal добавить.


Дабы не разводить жаркую дискуссию готов поделиться в почту, правда не знаю взлетит ли в Лазаре
29 апр 19, 20:52    [21874879]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Док
Member

Откуда: Казань
Сообщений: 6130
aleksandr-pro
Дабы не разводить жаркую дискуссию готов поделиться в почту, правда не знаю взлетит ли в Лазаре

скинь, плз, с удовольствием гляну: dddoc лай яндек сру

Технически практически сделал, но интересно посмотреть, может твой лисапед изящнее :)
29 апр 19, 22:33    [21874989]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
ziv-2014
Member

Откуда:
Сообщений: 297
Док,
Скинь свою реализацию?
30 апр 19, 09:08    [21875199]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Док
Member

Откуда: Казань
Сообщений: 6130
aleksandr-pro
возможно с небольшими ограничениями правда но возможно, есть такая тема
http://rsdn.org/forum/delphi/2891825.all

Увы, там все завязано на стили - не взлетает. Гляну вечерком твои демки.

ziv-2014
Скинь свою реализацию?

нет пока работоспособной реализации. Для одного открепленного окна есть, для нескольких - нет.

Лазарь, падла, не работает со стилями окна в CreateParams. Пытаюсь через Classes.TList реализовать, но там приложение падает с ошибкой External: SIGSEGV и при отладке вываливается в окно с ассемблером :)

зы. Сегодня предпраздничный день, традиционно народ пытается впрок все болячки залечить (чтоб потом 5 дней из дома не выходить). Поэтому у меня на всех 3х работах полная запись. Дома буду после 20 по Мск. Отпишусь позднее...
30 апр 19, 13:14    [21875472]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59771
Док> Есть ли простой способ перебрать все окна экрана,

Окна - это которые Windows или формы?

Док> которые относятся только к текущему приложению?

Созданные или "все", видимые или "все" и т.д.?
Начни с Screen.Forms, а потом задашь доп.
вопросы, если не найдешь чего-то нужного.

Posted via ActualForum NNTP Server 1.5

30 апр 19, 18:13    [21875842]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59771
aleksandr-pro> Дабы не разводить жаркую дискуссию готов поделиться
aleksandr-pro> в почту, правда не знаю взлетит ли в Лазаре

Дык выложи прямо сюда. Если там простыня
слишком большая - приложи файлом/архивом.

Posted via ActualForum NNTP Server 1.5

30 апр 19, 18:14    [21875844]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
aleksandr-pro
Member

Откуда: Самара
Сообщений: 187
Гаджимурадов Рустам,

уговорил :) PseudoModal.zip данный способ собран с множества разных источников, на правильность не претендую, на этой штуке у меня работает до сих достаточно большой проект, косяки встречаются связанные с последовательностью отображения форм, но достаточно редко.

если кто то дополнит буду благодарен, со своей стороны могу тестирование провести.
30 апр 19, 19:10    [21875895]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Док
Member

Откуда: Казань
Сообщений: 6130
Гаджимурадов Рустам
Созданные или "все", видимые или "все" и т.д.?

че-та ты ворчлив сегодня больше обычного. Не выспался что ль?
30 апр 19, 21:17    [21875987]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Док
Member

Откуда: Казань
Сообщений: 6130
aleksandr-pro,

демка классная, спасибо за познавательный код. На Лазаре со скрипом взлетело, но ниже лежащее окно не блокируется, увы. Может, я чего не так подправил
+
function TForm.MyShowModal(const ModalCaler:TCustomForm=nil):integer;
var
 ActiveWindow: HWnd;
 p_WINDOW:Forms.TForm;

 //в TCustomForm для дельфей эта процедура protected, в Лазаре - private
  procedure CloseModal;
  var
    CloseAction: TCloseAction;
  begin
    try
      CloseAction := caNone;
      if CloseQuery then
      begin
        CloseAction := caHide;
        DoClose(CloseAction);
      end;
      case CloseAction of
        caNone: ModalResult := 0;
        caFree: Release;
      end;
      { do not call widgetset CloseModal here, but in ShowModal to
        guarantee execution of it }
    except
      ModalResult := 0;
      Application.HandleException(Self);
    end;
  end;

begin
  if Owner=nil
    then p_WINDOW:=Screen.ActiveForm
    else p_WINDOW:=Tform(owner);

  ActiveWindow := GetActiveWindow;

  if ModalCaler<>nil
    then modalform:=ModalCaler
    else modalform:=TForm(p_WINDOW);

  EnableWindow(p_WINDOW.Handle,False);
  ModalResult:=0;
  RecreateWnd(modalform);////в Лазаре процедура требует в качестве параметра константу TCustomForm 
  Include(FFormState, fsModal);
  Show;
  try
    SendMessage(Self.Handle, CM_ACTIVATE, 0, 0);
    repeat
      Application.HandleMessage;
      if (Application.Terminated) or (not visible)
        then ModalResult:= mrCancel
        else
          if ModalResult <> 0 then
          begin
            CloseModal;
            Break;
          end
    until ModalResult <> 0;

    Result:= ModalResult;
    SendMessage(Self.Handle, CM_DEACTIVATE, 0, 0);
    modalform:= nil;
  finally
    Hide;
  end;
  Exclude(FFormState, fsModal);
  EnableWindow(p_WINDOW.Handle,true);
  if GetActiveWindow = Self.Handle then SetActiveWindow(ActiveWindow);
end;

end.

Если поковыряться захочется, аттачу проект

К сообщению приложен файл (project1.zip - 137Kb) cкачать
30 апр 19, 22:36    [21876019]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
aleksandr-pro
Member

Откуда: Самара
Сообщений: 187
Док,
по идее вот эта команда должна лочить "заднее" окно
EnableWindow(p_WINDOW.Handle,False);

p_WINDOW - это как раз parent_window то есть то окно с которого произошел вызов
может быть в лазаре как то иначе формы деактивируются, можно посмотреть код ShowModal и посмотреть как там сделано
1 май 19, 06:32    [21876120]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Док
Member

Откуда: Казань
Сообщений: 6130
aleksandr-pro,

Я смотрел, если я правильно помню, там DisableForms используется с перебором всех форм приложения.

Кстати, на лазаре с твоим кодом видно, как перерисовываются окна на RecreateWnd, вылезая поверх других ;)
1 май 19, 15:32    [21876368]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
aleksandr-pro
Member

Откуда: Самара
Сообщений: 187
Док,

Нет перебора в коде вообще нет, каждая открытая форма дисаблит только своего родителя.
1 май 19, 20:56    [21876546]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59771
Ты делаешь это ("родителя") соотв. полем или передаешь параметром/ссылкой?

Posted via ActualForum NNTP Server 1.5

1 май 19, 21:40    [21876562]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
aleksandr-pro
Member

Откуда: Самара
Сообщений: 187
Гаджимурадов Рустам,

все просто берется либо указанная форма (ModalCaler), либо родитель, либо просто активная форма если родителя нет.
ссылка на форму родителя (modalform) сохраняется отдельно что бы по закрытии форму вернуть в исходное состояние.

function TForm.MyShowModal(const ModalCaler:TCustomForm=nil):integer;
var
 ActiveWindow: HWnd;
 p_WINDOW:Forms.TForm;
begin
  if Owner=nil then p_WINDOW:=Screen.ActiveForm else p_WINDOW:=Tform(owner);
  if ModalCaler<>nil then modalform:=ModalCaler else modalform:=TForm(p_WINDOW);
.......
2 май 19, 07:32    [21876659]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Док
Member

Откуда: Казань
Сообщений: 6130
Под винду все решается просто
+
procedure TfrmMain.ActShowModalWindowExecute(Sender: TObject);
var
  TmpFrm: TfrmModal;
begin
  if Assigned(TfrmTemplate(Sender).Parent)
  then
    begin
      TmpFrm:= TfrmModal.Create(TfrmTemplate(Sender).Owner);//TTabSheet
      try
        TmpFrm.ShowModal;
      finally
        FreeAndNil(TmpFrm);
      end;
    end
  else
    begin
      TmpFrm:= TfrmModal.Create(TfrmTemplate(Sender));//undocked TfrmTemplate
      try
        EnableWindow(TfrmTemplate(Sender).Handle,False);//uses LCLIntf;
        TmpFrm.Show;
        while (TmpFrm.FormLiveState = flsOpen) and not Application.Terminated do
        begin
          Application.ProcessMessages;
          Application.Idle(False);
        end;
      finally
        EnableWindow(TfrmTemplate(Sender).Handle,True);
        FreeAndNil(TmpFrm);
      end;
    end;
end;

На Дебе, увы, ниже лежащее окно не дизэйблится :(. Буду думать дальше ...

aleksandr-pro,
спасибо за подсказки.
4 май 19, 00:01    [21877569]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Док
Member

Откуда: Казань
Сообщений: 6130
aleksandr-pro,

я конвертировал твой проект под Лазарь. Под винду все работает просто изумительно
+
Картинка с другого сайта.
, под никсы - фиг (ниже лежащее окно не блокируется, а выше лежащее - Form3 можно вызвать только с одной из дочерних Form2, на другой Form2 создание формы в RT чем-то блокируется) - проверил на Убунте и Дебиане. Попробую на тамошнем форуме поднять тему (правда, сомневаюсь, что активно будут отвечать - народ че-та то ли уставший в последнее время, то ли перекормлен изменениями в коде IDE и активно правит баги).

Код приложил, кому интересно

К сообщению приложен файл (project1_unix.zip - 128Kb) cкачать
9 май 19, 01:13    [21881587]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Saller
Member

Откуда: exUSSR
Сообщений: 1127
Док,

У тебя корректно под Виндой отрабатывает ситуация если открыть 2 Form3 и попытаться закрыть первую открытую Form3? У меня первая Form3 закрывается если закрыть вторую открытую Form3.
9 май 19, 13:02    [21881690]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Док
Member

Откуда: Казань
Сообщений: 6130
Saller
Док,

У тебя корректно под Виндой отрабатывает ситуация если открыть 2 Form3 и попытаться закрыть первую открытую Form3?

Если я правильно тебя понял, то да. При этом у обеих Form3 должны разные owner'ы, т.е. обе должны быть модальными. Они даже закрываются без лишних вопросов, если закрыть их общего предка. Ты последний приложенный проект пробовал?
9 май 19, 18:56    [21881847]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
aleksandr-pro
Member

Откуда: Самара
Сообщений: 187
ДА все верно owner в этом случае имеет важное значение и если понаокрывать модальное - потом не модельное - и снова модальное то будет плохо, в общем если с умом то все работает
9 май 19, 19:49    [21881877]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Saller
Member

Откуда: exUSSR
Сообщений: 1127
Док,

Последний твой проект не запускал, нет под рукой лазаря, запускал приложение, которое выкладывал Александр.
9 май 19, 23:04    [21881947]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Saller
Member

Откуда: exUSSR
Сообщений: 1127
Док,

Выложи скомпилированный вариант, проверю твою рабочую версию.
9 май 19, 23:20    [21881950]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Док
Member

Откуда: Казань
Сообщений: 6130
Saller
Выложи скомпилированный вариант

project1.7z
10 май 19, 09:08    [21882021]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Saller
Member

Откуда: exUSSR
Сообщений: 1127
Док,

Этот вариант тоже не работает как надо. Опишу порядок действий:
1. Открываем Form2
2. Открываем модальную Form3
3. Открываем Form2
4. Открываем модальную Form3
5. Пытаемся закрыть Form3 открытую в пункте 2
10 май 19, 09:38    [21882033]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Док
Member

Откуда: Казань
Сообщений: 6130
Saller
Этот вариант тоже не работает как надо.

значит, скорее всего. ты не понял, о чем идет речь в этом топике.
+ следи за руками
Картинка с другого сайта.

Основной посыл в том, что нельзя активировать owner'а, лежащего под модальным потомком, но можно активировать другие формы, не блокированные соответствующим модальным потомком. Исключение - системные диалоговые окна.
10 май 19, 11:50    [21882076]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Saller
Member

Откуда: exUSSR
Сообщений: 1127
Док
Основной посыл в том, что нельзя активировать owner'а, лежащего под модальным потомком, но можно активировать другие формы, не блокированные соответствующим модальным потомком. Исключение - системные диалоговые окна.
К этому функционалу не было никаких нареканий, единственное что нельзя закрыть формы как я описывал.
10 май 19, 12:42    [21882095]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Док
Member

Откуда: Казань
Сообщений: 6130
Saller
единственное что нельзя закрыть формы как я описывал.

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

если тебе нужен какой-то другой функционал - придется потрудиться самому :)
10 май 19, 13:53    [21882119]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59771
Док> Основной посыл в том, что нельзя активировать owner'а,
Док> лежащего под модальным потомком, но можно активировать другие
Док> формы, не блокированные соответствующим модальным потомком.


Ты, конечно, опять скажешь, что я вредничаю, но я таки поправлю:

1. Не owner'a, а "открывателя" - форму, которая вызвала ShowPseudoModal.
Owner-a может вообще не быть, или быть другой формой или Application.

2. "лежащего под модальным потомком" - размытая формулировка, лучше
"участвовавшие в цепочке вызовов" из п.1. При чём это вполне могут быть
разные экземпляры одной и той же формы, в т.ч. по несколько раз. И они
могут быть снова открыты из активной модальной формы по новой.

P.S. Конкретную реализацию я не смотрел ещё, описываю лишь механику.

Posted via ActualForum NNTP Server 1.5

10 май 19, 19:30    [21882218]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Док
Member

Откуда: Казань
Сообщений: 6130
Гаджимурадов Рустам
но я таки поправлю

в контексте данного кода owner и является "открывателем", потому и блокируется, что лежит "модальным потомком" :)

зы. Несмотря на богатство современного "рускаго" языка, во многих языковых конструкциях омонимы весьма путают общий смысл сказанного. Это особенно заметно в программировании, потому и появляются "овнеры", "чекбоксы", "комбобоксы" и проч.проч.
11 май 19, 13:20    [21882446]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59771
Док> в контексте данного кода owner и является "открывателем"

А, в смысле Owner - это не Delphi-шный Owner, а
некое доп.свойство/параметр, которое содержит
ссылку на форму-открывателя... Тогда OK, но всё
же лучше было бы другой "термин" подобрать -
Prior, Caller или хотя бы Ancestor.

Posted via ActualForum NNTP Server 1.5

11 май 19, 15:29    [21882492]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Gator
Member

Откуда: Москва
Сообщений: 14205
Гаджимурадов Рустам,

Тут, наверное, подойдёт Создатель/Creator или вообще Демиург/Demiurge - типа с ним ничего сделать нельзя, а он может всё.
11 май 19, 15:43    [21882500]     Ответить | Цитировать Сообщить модератору
 Re: Псевдо MDI-окна и модальные окна  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59771
Gator> Тут, наверное, подойдёт Создатель/Creator

Ни в коем случае. Во-первых, Creator ближе к Owner,
чем к открывателю. Во-вторых, Creator может быть
один (в т.ч. 1 раз), а Caller-ов/Sender-ов - много.

Posted via ActualForum NNTP Server 1.5

11 май 19, 16:14    [21882506]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Delphi Ответить