Delphi. Учимся на примерах | страница 35



Результат оформления формы должен соответствовать рис. 10.1.

Рис. 10.1. Форма для программы входа в систему

Разработка программного кода

Объявим в качестве закрытых членов класса формы переменную типа HWND и две процедуры, которые разработаем чуть позже:

>type

> TForm1 = class(TForm)

> …

>private

> { Private declarations }

> h1: HWND; //переменная, содержащая идентификатор окна

> procedure logon(); //блокирует все, пока пароль не будет

>  //введен верно

> procedure_check(); //проверка корректности пароля

>public

> { Public declarations }

>end;

Теперь в разделе implementation создадим сами процедуры. Сначала процедура check:

>procedure TForm1.check();

>begin

> if pass.Text = 'password' then //если пароль верный

> begin

>  //узнаем идентификатор Рабочего стола

>  h1:= FindWindow('Progman',nil);

>  //разрешаем работу с Рабочим столом

>  ShowWindow(h1, sw_show);

>  // узнаем идентификатор панели задач

>  h1:= FindWindow('Shell_traywnd',nil);

>  //разрешаем работу с панелью задач

>  ShowWindow(h1, sw_show);

>  halt; //закрываем программу

> end // иначе, выводим сообщение о неверном пароле

else ShowMessage('Wrong password!');

>end;

Процедура check проверяет корректность пароля. В данном случае в качестве пароля используется слово "password". Если в поле pass введено именно это слово, то разблокируем Рабочий стол и панель задач. После этого доступ ко всему открыт, и мы завершаем работу программы. Если же введенный пользователем текст не совпадает с корректным паролем, то мы продолжаем требовать ввод пароля.

Теперь очередь процедуры logon:

>procedure TForm1.logon();

>begin

> //узнаем идентификатор Рабочего стола

h1:= FindWindow('Progman', nil);

> ShowWindow(h1, sw_hide); //прячем Рабочий стол

> //находим панель задач

> h1:= FindWindow('Shell_traywnd', nil);

> ShowWindow(h1, sw_hide); //прячем панель задач

> {проверяем, не запущен ли диспетчер задач}

h1:= FindWindow(nil, 'Диспетчер задачWindows');

> {если да, то закрываем окно диспетчера задач}

> if (h1 <> 0) then PostMessage(h1, WM_QUIT, 1, 0);

>end;

Здесь мы блокируем Рабочий стол и панель задач, а затем проверяем, не пытается ли пользователь отключить нашу программу с помощью диспетчера задач. Если окно диспетчера задач открыто, то закрываем его.

Теперь нам почти не придется программировать — мы просто будем вызывать процедуры check и logon. При нажатии кнопки Enter вызывается процедура check:

>procedure TForm1.Button1Click(Sender: TObject);

>begin

check;

>end;

Для того чтобы не утруждать пользователя нажатиями кнопки на форме, имитируем эту операцию по нажатию в поле pass клавиши . Для этого создайте обработчик события pass.OnKeyРгеss: