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 клавиши