Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Многооконная программаю. Модал - немодал [D7, XP]


Стас ©   (2007-07-04 11:16:00) 

Ситуация такая: есть главная форма - FormMain, несколько форм, вызываемых из главной в модальном режиме - FormM1, FormM2 и т.д. И есть форма - FormSet, которая может быть вызвана из любой из выше перечисленных форм в немодальном режиме. Т.е., она должна находиться на экране и из любой формы в нее можно войти.

Сначала сделал просто:

procedure TFormMain.Menu_settingsClick(Sender: TObject);
begin
 FormSet.Show;
end;


И аналогично в модальных формах. Но тогда с формой FormSet можно было работать только из того окна, где она была Show. Если закрыть ее из этого окна и открыть из другого, она работала из другого.
Тогда я сделал так: перед обращением к модальному окну закрывал FormSet, а при открытии модального окна вновь его "показывал".

procedure TFormMain.ButM1Click(Sender: TObject);
begin
 ...
 if FormSet.Showing then begin FormSet.Close; FormSet.tag := 1; end
 else FormSet.tag := 0;

 FormM1.ShowModal;
 ...
end;

А в модуле M1:

procedure TFormM1.FormShow(Sender: TObject);
begin
 ...
 if FormSet.tag = 1 then FormSet.Show;
 ...
end;

Может это можно сделать как-то по-другому?


{RASkov}   (2007-07-04 15:35:00) [1]

> [0] Стас   (04.07.07 11:16)

Модальное окно оно для того и модальное, чтобы отбирать фокус у всех...
В твоем слачае

> есть главная форма - FormMain, несколько форм, вызываемых
> из главной в модальном режиме - FormM1, FormM2 и т.д. И
> есть форма - FormSet, которая может быть вызвана из любой
> из выше перечисленных форм в немодальном режиме

можно поступить иначе.... показывать все бывшие модальные формы в немодальном виде(Show), а на время их показа отключать главную (MainFormEnabled:=False).... Возможно еще и сделать их fsStayOnTop (поверх всех), ну и ФормСет тоже фсСтэйОнТоп...

А твой способ это извращение... можно так же простым вызовом рекреатевнд решить эту проблему... но, имхо, не верное это....


Правильный Вася   (2007-07-04 11:27:00) [2]

каша какая-то, ага, с борщом и компотом
получаются помои

ЗЫ не делай так


Наверх

Титульная страница Поиск, карта сайта Написать письмо