Форум: "Основная";
Текущий архив: 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.044 c