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

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Аватара пользователя
Oleg_Rus
Сообщения: 335
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

Допустим у меня имеется форма авторизации, надо чтобы при нажатии на клавишу 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;
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
Аватара пользователя
Сейчас_не_спящий
Сообщения: 46
Зарегистрирован: 26 янв 2007, 17:06
Откуда: Беларусь, Гомель
Контактная информация:

Сразу, ошибка:
&quot писал(а):procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then Form1.BitBtn1Click(Sender);
end;
Дурими совами ты написал:
Если ввести в Edit1 "Esc" то форма закроется.
Сделай тоже самое, только относящееся не к Эдит, а к форме
Всё не знает никто, но важно найти того кто знает нужное...
Аватара пользователя
Сейчас_не_спящий
Сообщения: 46
Зарегистрирован: 26 янв 2007, 17:06
Откуда: Беларусь, Гомель
Контактная информация:

Вот тебе часть кода:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
If Key = #27 then Form1.Close;
end;
Всё не знает никто, но важно найти того кто знает нужное...
Аватара пользователя
Oleg_Rus
Сообщения: 335
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

Это есть!
Вторая процедура!
Основной прикол заключается в следующем: клавиша работает только после неверного ввода пароля!
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
Аватара пользователя
Oleg_Rus
Сообщения: 335
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

Извиняюсь, третья!
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
Аватара пользователя
Сейчас_не_спящий
Сообщения: 46
Зарегистрирован: 26 янв 2007, 17:06
Откуда: Беларусь, Гомель
Контактная информация:

&quot писал(а):в Events`ах я покопался и поле OnKeyPress набил закрытие формы, но клавиша реагирует только когда вводишь неверный пароль.
Это случается только потому что когда ты вводишь пароль фокус остаётся у тебя в едите, и поэтому КейПрес считывает его оттуда. Тебе как надо? Что бы независимо от того где курсор при нажатии на ESC форма закрывалась или как?
Всё не знает никто, но важно найти того кто знает нужное...
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Получается, что клавишу ловит только окно. Однако если фокус на контроле и ты жмакаешь клавишу, окно ее не поймает, потому как именно форме это "сообщение" (с точки зрения винды) не относится. Если контролов мало, например, как здесь - всего один эдит, то проще и там половить - просто еще одну проверочку на код, иначе, если много, то тут надо писать свою WindowProc для Application.Handle, чтобы все клавиши, касательно Application ловились там и проверялись на Esc.
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Oleg_Rus
Сообщения: 335
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

somewhere, что за "проверочку на код"? Объяни пожалуйста!
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

1. А чем не устраивает установить у кнопки ОК - свойство Default=true, а у кнопки Cancel свойство Cancel=true?

2. Не вкурил зачем таймер? ;)
Изображение
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

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

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

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then Form1.BitBtn1Click(Sender);
if key=#27 then Form1.Close;
end;
А вот зачем таймер я тоже так и не понял...
It's a long way to the top if you wanna rock'n'roll
Ответить