Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

MDIChild аналог модальной формы   Найти похожие ветки 

 
Рамиль ©   (2004-09-22 16:25) [0]

Можно как нибудь сделать такое? Хотя бы имитировать модальность.
Если написать обработчик

procedure TForm1.FormDeactivate(Sender: TObject);
begin
 Show;
 SetFocus;
end;

вроде все нормально, за одним исключением - можно закрыть другие формы, что крайне нежелательно.
(Хочу сделать интерфейс как в Галактике, если кто видел)


 
Iconka ©   (2004-09-22 16:50) [1]

Есть модальные формы, есть не модальные. Чё еще не понятно?
А я например хочу в переменную типа integer записать строку. Можно ли так?


 
Рамиль ©   (2004-09-22 16:57) [2]

Iconka ©   (22.09.04 16:50) [1]
Я же говорю хотя бы имитировать.
У меня перед носом приложение, в котором так сделано. И что то я не соображу как они это сделали :(


 
Sandman25 ©   (2004-09-22 17:05) [3]

Может, флаг устанавливают для формы, которая должна быть модальной, и в OnCloseQuery его анализируют?


 
Рамиль ©   (2004-09-22 17:16) [4]

Sandman25 ©   (22.09.04 17:05) [3]
Проблема в том, что другие формы могут обрабатывать WM_SYSCOMMAND, даже если я возвращаю фокус на форму.


 
Anatoly Podgoretsky ©   (2004-09-22 17:19) [5]

Почему нет желания использовать прямое средство?


 
Sandman25 ©   (2004-09-22 17:20) [6]

Тогда можно расширить прием с OnCloseQuery до обработчика WM_SYSCOMMAND.
Если все формы в обычном режиме - флаг имеет значение Val1, все команды доступны. Если одна из форм должна стать модальной - пробегаем по всем формам, ставим их флагам значение Val2, которое блокирует обработку команд, а модальной форме ставим значение Val3, чтобы при ее закрытии опять пробежаться по всем формам и установить флаги в Val1.


 
Рамиль ©   (2004-09-22 17:27) [7]

Anatoly Podgoretsky ©   (22.09.04 17:19) [5]
А какое для MDIChild прямое средство? Или у меня крыша едет к вечеру...
Sandman25 ©   (22.09.04 17:20) [6]
Рассматривал такой вариант, но он мне не нравится. Может как то по другому можно.


 
Iconka ©   (2004-09-22 17:30) [8]


> А какое для MDIChild прямое средство? Или у меня крыша
> едет к вечеру...

Помоему сделать его не MDIChild и запускать ShowModal


 
Anatoly Podgoretsky ©   (2004-09-22 17:30) [9]

Прямое - это модальные формы


 
Sandman25 ©   (2004-09-22 17:31) [10]

[7] Рамиль ©   (22.09.04 17:27)

Мне тоже не нравится, но с помощью ООП можно спрятать весь механизм в общем предке.


 
Рамиль ©   (2004-09-22 17:32) [11]

Iconka ©   (22.09.04 17:30) [8]
Anatoly Podgoretsky ©   (22.09.04 17:30) [9]
Не хочу что бы за пределы MDIForm утащить можно было.


 
Anatoly Podgoretsky ©   (2004-09-22 17:42) [12]

Рамиль ©   (22.09.04 17:32) [11]
Это управляемое


 
GuAV ©   (2004-09-22 21:23) [13]

А что Eanbled в False остальным не помогает ?

> А я например хочу в переменную типа integer записать строку.
> Можно ли так?

В том же смысле в котором строка записывается в переменную типа string - да.


 
jack128 ©   (2004-09-22 21:49) [14]

Идея слямзина из Enable/DisableTaskWindow
type
 PTaskWindow = ^TTaskWindow;
 TTaskWindow = record
   Next: PTaskWindow;
   Window: HWnd;
 end;

function TMainForm.DisableMDIChildren(ActiveForm: TCustomForm): PTaskWindow;
var
 i: Integer;
 Run: PTaskWindow;
begin
 if not ((TForm(ActiveForm).FormStyle = fsMDIChild) and ActiveForm.Enabled) then
   raise Exception.Create("Активной должна быть Enabled MDIChild форма");
 Result := nil;
 Run := nil;
 for i := 0 to MDIChildCount - 1 do
 begin
   if (MDIChildren[i] <> ActiveForm) and (MDIChildren[i].Enabled) then
   begin
     EnableWindow(MDIChildren[i].Handle, False);
     New(Result);
     Result.Window := MDIChildren[i].Handle;
     Result.Next := Run;
     Run := Result;
   end;
 end;
 if ActiveForm.CanFocus then ActiveForm.SetFocus;
end;

procedure TMainForm.EnableMDIChildren(WndList: Pointer);
var
 P: PTaskWindow;
begin
 while WndList <> nil do
 begin
   P := WndList;
   if IsWindow(P^.Window) then EnableWindow(P^.Window, True);
   WndList := P^.Next;
   Dispose(P);
 end;
end


 
Рамиль ©   (2004-09-23 08:34) [15]

Ок. Всем спасибо. Похоже, что не трогая остальных форм сделать нельзя. Буду делать через Enable/Disable.



Страницы: 1 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.037 c
4-1093591313
Falcon
2004-08-27 11:21
2004.10.10
Проблемы с окнами


1-1096032495
AdmeraL
2004-09-24 17:28
2004.10.10
Tregistry


14-1095848482
Григорьев Антон
2004-09-22 14:21
2004.10.10
Забавная картинка из корейского метро


14-1095675929
pavel_guzhanov
2004-09-20 14:25
2004.10.10
Воспроизведение мультимедиа файлов в windows


14-1095853131
080D:07BBh
2004-09-22 15:38
2004.10.10
Сенсация: оазисы жизни на Марсе