Страница 1 из 2

Привязка к клавишам

Добавлено: 29 янв 2007, 12:20
Oleg_Rus
Допустим у меня имеется форма авторизации, надо чтобы при нажатии на клавишу Esc(#27) форма закрылась. в Events`ах я покопался и поле OnKeyPress набил закрытие формы, но клавиша реагирует только когда вводишь неверный пароль.
сразу приведу код программы:


procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
BitBtn1.Enabled:=True;
BitBtn2.Enabled:=True;
Edit1.Enabled:=True;
Edit2.Enabled:=True;
Label4.Caption:='';
Timer1.Interval:=3000;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key=#27 then Form1.Close;
end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then Form1.BitBtn1Click(Sender);
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
const name = 'Oleg_Rus';
pass = '1990,fnj';
begin
if (name = Edit1.Text) and (pass = Edit2.Text) then
begin
Label4.Font.Color:=clWindowText;
Label4.Caption:='Спасибо за пользование нашим продуктом';
Form1.Hide;
Form2.Show;
end else
begin
Label4.Font.Color:=clRed;
if (name <> Edit1.Text) and (pass = Edit2.Text) then Label4.Caption:='Неверный пользователь'
else if (pass <> Edit2.Text) and (name = Edit1.Text) then Label4.Caption:='Неверный пароль'
else Label4.Caption:='Некорректный ввод';
Edit1.Text:='';
Edit2.Text:='';
Edit1.Enabled:=False;
Edit2.Enabled:=False;
BitBtn1.Enabled:=False;
BitBtn2.Enabled:=False;
Timer1.Enabled:=True;
end;

end;

Re: Привязка к клавишам

Добавлено: 29 янв 2007, 12:24
Сейчас_не_спящий
Сразу, ошибка:
&quot писал(а):procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then Form1.BitBtn1Click(Sender);
end;
Дурими совами ты написал:
Если ввести в Edit1 "Esc" то форма закроется.
Сделай тоже самое, только относящееся не к Эдит, а к форме

Re: Привязка к клавишам

Добавлено: 29 янв 2007, 12:27
Сейчас_не_спящий
Вот тебе часть кода:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
If Key = #27 then Form1.Close;
end;

Re: Привязка к клавишам

Добавлено: 29 янв 2007, 12:57
Oleg_Rus
Это есть!
Вторая процедура!
Основной прикол заключается в следующем: клавиша работает только после неверного ввода пароля!

Re: Привязка к клавишам

Добавлено: 29 янв 2007, 12:58
Oleg_Rus
Извиняюсь, третья!

Re: Привязка к клавишам

Добавлено: 29 янв 2007, 13:03
Сейчас_не_спящий
&quot писал(а):в Events`ах я покопался и поле OnKeyPress набил закрытие формы, но клавиша реагирует только когда вводишь неверный пароль.
Это случается только потому что когда ты вводишь пароль фокус остаётся у тебя в едите, и поэтому КейПрес считывает его оттуда. Тебе как надо? Что бы независимо от того где курсор при нажатии на ESC форма закрывалась или как?

Re: Привязка к клавишам

Добавлено: 29 янв 2007, 13:43
somewhere
Получается, что клавишу ловит только окно. Однако если фокус на контроле и ты жмакаешь клавишу, окно ее не поймает, потому как именно форме это "сообщение" (с точки зрения винды) не относится. Если контролов мало, например, как здесь - всего один эдит, то проще и там половить - просто еще одну проверочку на код, иначе, если много, то тут надо писать свою WindowProc для Application.Handle, чтобы все клавиши, касательно Application ловились там и проверялись на Esc.

Re: Привязка к клавишам

Добавлено: 29 янв 2007, 14:21
Oleg_Rus
somewhere, что за "проверочку на код"? Объяни пожалуйста!

Re: Привязка к клавишам

Добавлено: 29 янв 2007, 14:54
Игорь Акопян
1. А чем не устраивает установить у кнопки ОК - свойство Default=true, а у кнопки Cancel свойство Cancel=true?

2. Не вкурил зачем таймер? ;)

Re: Привязка к клавишам

Добавлено: 29 янв 2007, 16:50
somewhere
&quot писал(а):что за "проверочку на код"? Объяни пожалуйста!

Код: Выделить всё

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then Form1.BitBtn1Click(Sender);
if key=#27 then Form1.Close;
end;
А вот зачем таймер я тоже так и не понял...