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

Вниз

Как сделать, чтобы с формы нельзя было никуда переулючиться...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
1-31882
Newguy
2002-09-30 03:44
2002.10.10
Richedit


14-31974
AL2002
2002-09-16 11:39
2002.10.10
Есть у кого прога Donation Free? Любая?


7-32025
GydruS
2002-08-01 09:34
2002.10.10
Как точно отсчитывать время в 5 миллисекунд?


8-31905
Groove
2002-06-09 15:27
2002.10.10
AVI


1-31815
AndreyV.
2002-10-02 12:57
2002.10.10
Продвинутый ComboBox