Главная страница
    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.034 c
4-1094798681
Apolo
2004-09-10 10:44
2004.10.10
Обмен данными между потоками не используя главную форму!


1-1096278101
DelphiLexx
2004-09-27 13:41
2004.10.10
SendMessage


14-1095682249
infom
2004-09-20 16:10
2004.10.10
Что лучше применить ?


3-1095147625
Sirus
2004-09-14 11:40
2004.10.10
Подскажите насчет транзакций???


14-1095527647
Knight
2004-09-18 21:14
2004.10.10
Что стало с компактами?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский