4. Лабораторная работа. Функции ввода для консольных устройств
Задание: программа запрашивает пароль, состоящий из трех символьных комбинированных сообщений (пароль указан в варианте задания), выводя при этом вместо вводимых символов символ ‘*’. Если пароль введен правильно, то выводится приветствие ‘Hello, User’. Выход из программы осуществить только после ввода символьной комбинации выхода ( см. вариант задания) с предварительной подсказкой.
[C] - включен режим CapsLock;
[N] - включен режим NumLock;
[S] - включен режим ScrollLock.
Исходный код программы для Delphi:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask;
type
TForm1 = class(TForm)
Button1: TButton;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
MaskEdit1: TMaskEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
procedure FormCreate(Sender: TObject);
procedure MaskEdit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Button1Click(Sender: TObject);
procedure MaskEdit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
P1,P2,P3,PCtrl,PAlt,Ctrl_esc:boolean;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
P1:=false;
P2:=false;
P3:=false;
PCtrl:=false;
PAlt:=false;
end;
procedure TForm1.MaskEdit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Ctrl_esc:=false;
Form1.Caption:=inttostr(key); // отображает в заголовке код клавиши
if (GetKeyState(20)) =1 then
CheckBox1.Checked:=true // CapsLock
else
CheckBox1.Checked:=false;
if (GetKeyState(144)) =1 then // NumLock
CheckBox2.Checked:=true
else
CheckBox2.Checked:=false;
if (GetKeyState(145)) =1 then // ScrollLock
CheckBox3.Checked:=true
else
CheckBox3.Checked:=false;
if key=17 then PCtrl:=true;
if key=18 then PAlt:=true;
if length(MaskEdit1.Text)=1 then
if CheckBox1.Checked and CheckBox3.Checked and PAlt and (key =65) then P1:=true;
if length(MaskEdit1.Text)=2 then
if PCtrl and (key =66) then P2:=true;
if length(MaskEdit1.Text)=3 then
if CheckBox1.Checked and PAlt and (key =67) then P3:=true
// P.S. у разных производителей могут немного отдичаться номера клавишь
// и к тому же бывает что две команды на одной кнопки как у меня и у них код тоже одинаковый т.е. активизируются вместе
// на всякий случай я сделал код который будет в заголовке программы прописывать номера кнопок(при нажатии в Edit)
// так что если у тебя на компе другая раскладка окажется можешь изменить без проблем просто измени номере в скобках
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if P1 and P2 and P3 then ShowMessage('Вход выполнен')
else
ShowMessage('Не верный пароль');
end;
procedure TForm1.MaskEdit1KeyPress(Sender: TObject; var Key: Char);
begin
//Edit1.Text:=key
if Ctrl_esc and (key='') then close;
Ctrl_esc:=true;
end;
end.
Блок схемы:
|