Форум: "Основная";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];
ВнизКак сделать, чтобы с формы нельзя было никуда переулючиться... Найти похожие ветки
← →
3d (2002-09-29 16:20) [0]Народ, помогите, как сделать, чтобы с формы нельзя было никуда переулючиться, до тех пор пока на ней не выполнят предписанные программой действия (не Modal Window). Например, когда выскакивает важное системное сообщение, в котором пока не нажмёшь ОК нельзя переключиться на любое другое окно или рабочий стол.
← →
PaRL (2002-09-29 16:22) [1]Модальные окна как раз для этого и предназначены.
← →
Manulo (2002-09-29 19:11) [2]Есть способ... Заблокируй клаву и мышку! Правда при его использовании ты врядли нажмёшь ок! :=)
← →
3d (2002-09-29 19:29) [3]PaRL
Модальные окна как раз для этого и предназначены.
-----------------------------------------------------------------
Я пробовал сделать форму модальной (Form1.ShowModal), но с неё вполне можно переключиться на другое окно. Может я что-то делаю не так, напишите pls кто-нибудь код.
← →
Song (2002-09-29 19:30) [4]В смысле на чужое окно-то?
← →
3d (2002-09-29 19:36) [5]На любое, будь то открытая в окне папка или окно программы. Нечто подобное есть при открытии окна Open/Save Dialog или при важных системных сообщениях, где пока не нажмёшь Save/Open/OK и т.д., либо Cansel, никуда не переключишся будет только звук типа Ding.
← →
Ученик (2002-09-29 20:23) [6]Как идея, запретить (через EnableWindow) все окна кроме своего.
← →
TTCustomDelphiMaster (2002-09-29 20:38) [7]И тысячи испуганых юзверей побегут к админам с криком "У меня комп завис!!!".
← →
Юрий Зотов (2002-09-29 20:56) [8]После чего программа, считающая, что ее окна и есть самые важные во всей системе будет начисто снесена. Получится - "за что боролись, на то и напоролись".
Если действительно нужно вывести важное сообщение, используйте MessageBox с флагом MB_SYSTEMMODAL. Нормальной программе этого вполне достаточно.
← →
Ученик (2002-09-29 21:25) [9]Ученик © (29.09.02 20:23)
private
{ Private declarations }
FWindowList : Pointer;
type
PTaskWindow = ^TTaskWindow;
TTaskWindow = record
Next: PTaskWindow;
Window: HWnd;
end;
var
TaskWindowList: PTaskWindow = nil;
function DoDisableWindow(Window: LongInt; Data: LongInt): Bool; stdcall;
var
P: PTaskWindow;
begin
if (Window <> Data) and (Window <> GetWindowLong(Data, GWL_HWNDPARENT)) and
IsWindowVisible(Window) and IsWindowEnabled(Window) then
begin
New(P);
P^.Next := TaskWindowList;
P^.Window := Window;
TaskWindowList := P;
EnableWindow(Window, False);
end;
Result := True;
end;
function DisableTaskWindows(ActiveWindow: HWnd): Pointer;
begin
TaskWindowList := nil;
try
EnumWindows(@DoDisableWindow, ActiveWindow);
Result := TaskWindowList;
except
EnableTaskWindows(TaskWindowList);
raise;
end
end;
procedure EnableTaskWindows(WindowList: Pointer);
var
P: PTaskWindow;
begin
while WindowList <> nil do
begin
P := WindowList;
if IsWindow(P^.Window) then EnableWindow(P^.Window, True);
WindowList := P^.Next;
Dispose(P);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FWindowList := DisableTaskWindows(Handle)
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
EnableTaskWindows(FWindowList);
FWindowList := nil
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if FWindowList <> nil then
EnableTaskWindows(FWindowList)
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c