Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2009, 15:51   #1
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию Не работает процедура KeyDown\Up в Дельфи

Столкнулся с непонятной для меня загадкой. На форме
Timer и GroupBox с тремя RadioButton. В таймере проверяется какая "радиокнопка" включена и выводится в Label название "радиокнопки" и на форму код состояния трех "радиокнопок".
Код:
implementation

{$R *.dfm}

procedure CheckVibor;// проверка включенной "радиокнопки"
begin
  if Form1.RadioButton1.Checked = false then a:= 0 
   else begin a:= 1; _text:= '"СТОП"'; end;
  if Form1.RadioButton2.Checked = false then b:= 0 
   else begin b:= 1; _text:= '"ПУСК"'; end;
  if Form1.RadioButton3.Checked = false then c:= 0 
   else begin c:= 1; _text:= '"ТЕСТ"'; end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);// Interval = 200 mc
begin
  Form1.Canvas.TextOut(20,50,FormatDateTime('c',Now));
  CheckVibor;
  Form1.Canvas.TextOut(30,200,'Код режима -  ' 
    + IntToStr(a) + ' ' + IntToStr(b) + ' ' + IntToStr(c));
  Form1.Label1.Caption:= 'Включен  ' + _text;
end;
Все работает.Переключение "радиокнопок" нормально происходит клавишами "стрелки влево-вправо-вверх-вниз".Причем это включено автоматически.
Я хочу переключать "радиокнопки" другим образом - к примеру клавишами '1' ,'2', '3' . Добавляю процедуру обработчик
Код:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
  49: Form1.RadioButton1.Checked:= true; // клавиша "цифра 1"
  50: Form1.RadioButton1.Checked:= true; // клавиша "цифра 2"
  51: Form1.RadioButton1.Checked:= true; // клавиша "цифра 3"
  13: Form1.Caption:= '   Подтверждение  выбора'; // ENTER
  end;
end;
Но эта процедура не работает вообще.
Почему не работает обработчик нажатия клавиш ?
Как убрать переключение "радиокнопок" клавишами "стрелки" ?
Полный проект во вложении.
Вложения
Тип файла: rar РадиоКноп.rar (3.5 Кб, 16 просмотров)
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 29.10.2009, 15:53   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

события formKeydown, FormKeypress уже плохие?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 29.10.2009, 15:55   #3
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Только что сделал так:
Код:
case key of
49:close;
end;
И работает.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 29.10.2009, 15:56   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Код:
case Key of
  49: Form1.RadioButton1.Checked:= true; // клавиша "цифра 1"
  50: Form1.RadioButton2.Checked:= true; // клавиша "цифра 2"
  51: Form1.RadioButton3.Checked:= true; // клавиша "цифра 3"
Будьте повнимательнее и загадок будет гораздо меньше...
mihali4 вне форума Ответить с цитированием
Старый 29.10.2009, 16:00   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

1) form.keypreview:= true

2)
Код:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
  49: Form1.RadioButton1.Checked:= true; // êëàâèøà "öèôðà 1"
  50: Form1.RadioButton2.Checked:= true; // êëàâèøà "öèôðà 2"
  51: Form1.RadioButton3.Checked:= true; // êëàâèøà "öèôðà 3"
  13: Form1.Caption:= '   Ïîäòâåðæäåíèå  âûáîðà'; // ENTER
  end;
end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 29.10.2009, 16:22   #6
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

To russian-stalker
Цитата:
case key of
49:close;
end;
Имеется ввиду вместе с приведенным в первом посте кодом.
To mihali4 Да, ошибся при копировании, но после исправления все равно не реагирует.
To raxp
А вот это
Цитата:
form.keypreview:= true
помогло в части работы обработчика клавиш. Спасибо.
Остался вопрос - как убирается влияние клавиш "стрелки" на выбор "радиокнопок" ?
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 29.10.2009, 17:13   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Остался вопрос - как убирается влияние клавиш "стрелки" на выбор "радиокнопок" ?
це просто...
Код:
procedure tForm1.Hook(var Msg: tMsg; var Handled: Boolean);
begin
  if (Msg.Message = WM_KeyDown) and (Msg.wParam in [37,38,39,40]) then
    Handled := True
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.OnMessage := hook
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 29.10.2009, 17:54   #8
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Всем спасибо. Научили.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура в Дельфи ИльяМалиновский Общие вопросы Delphi 2 24.08.2009 18:32
почему не работает процедура нажатия клавиши в делфи buka_14 Помощь студентам 3 16.04.2009 17:26
Хранимая процедура не работает! Только_Учусь SQL, базы данных 6 08.09.2008 09:22
Процедура не работает Михаил Юрьевич Общие вопросы Delphi 4 03.06.2008 07:22
не работает хранимая процедура yulia БД в Delphi 11 28.05.2007 19:00