Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.58 MB
Время: 0.032 c
14-31943
Николай Быков
2002-09-12 19:01
2002.10.10
Как правильно пить?


4-32095
PaRL
2002-08-27 19:58
2002.10.10
Текст


14-32014
Ирка
2002-09-17 17:04
2002.10.10
Delphi 4


1-31894
PaRL
2002-09-29 15:28
2002.10.10
Глобальные переменные.


1-31690
cult
2002-09-30 16:45
2002.10.10
Кто-нибудь работал плотно с TCoolBar?





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