Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.038 c
14-1095933019
Lexxx
2004-09-23 13:50
2004.10.10
Помогите найти компонент.


1-1096118944
cv
2004-09-25 17:29
2004.10.10
клавиатура код итд


9-1086872388
init13
2004-06-10 16:59
2004.10.10
ГЛСцена (текст)


4-1094655045
Алексей Петухов
2004-09-08 18:50
2004.10.10
Настройки принтера


6-1091460590
Alexis
2004-08-02 19:29
2004.10.10
Виртуальный LAN





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский