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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2010, 20:32   #1
Arm!n
 
Регистрация: 09.12.2010
Сообщений: 7
По умолчанию Дельфи. Назначение действий на клавиши

Имеется прога с кнопками на форме. Кнопки "Enter", "<-" и "->" отвечают за создание прямоугольника, сдвиг влево и вправо соответсвенно. Необходимо избавиться от кнопок, и вместо них назначить действия на клавиши "Enter", "<-" и "->". Пытался с помощью процедуры FormKeyPress сделать это, но что-то не получалось - никакой реакции на клавиши. Помогите, пожалуйста!
Код:
unit Unit1lr4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls,unit2, StdCtrls;

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    Timer1: TTimer;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure FormPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);

  private
    { Private declarations }
  public
  El:TEll;
    { Public declarations }
  end;
const n=70;s=30;
var
  Form1: TForm1;
  k,j:integer;
implementation

{$R *.dfm}
procedure TForm1.FormPaint(Sender: TObject);
begin
 with PaintBox1.Canvas do
   begin
   Pen.Color:=clwhite;
   Pen.Style:=psSolid;
   Brush.Color:=clwhite;
   color:=clgreen;
   rectangle(PaintBox1.ClientRect);
   end;
 El.Draw(True);
end;

procedure TForm1.FormCreate;
begin
El:=TEll.Create(Paintbox1.Canvas,100,50,160,150,clyellow);
end;

procedure TForm1.FormDestroy;
begin
El.Destroy;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 if El.XX<=ClientHeight-60 then
  begin
  El.draw2(n,0);
  inc(k);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
 var i:integer;
begin
 for i:=1 to k do El.move(-n,0);
 El.draw(false);
 inc(j);
 El.XX:=100-s*j;
 El.XX1:=160-s*j;
 for i:=1 to k do El.draw2(n,0);
end;

procedure TForm1.Button3Click(Sender: TObject);
 var i:integer;
begin
 for i:=1 to k do El.move(-n,0);
 El.draw(false);
 dec(j);
 El.XX:=100-s*j;
 El.XX1:=160-s*j;
 for i:=1 to k do El.draw2(n,0);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if El.YY<=Clientheight-60 then El.Move(0,10)
     else  timer1.Enabled:=false ;
end;

end.
Вложения
Тип файла: rar Project.rar (166.3 Кб, 21 просмотров)
Arm!n вне форума Ответить с цитированием
Старый 26.12.2010, 21:05   #2
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Установите у формы свойство KeyPreview := true;
_Engine_ вне форума Ответить с цитированием
Старый 26.12.2010, 21:08   #3
Arm!n
 
Регистрация: 09.12.2010
Сообщений: 7
По умолчанию

Устанавливал. Никакого эффекта.
Arm!n вне форума Ответить с цитированием
Старый 26.12.2010, 21:11   #4
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

На счет OnKeyPress не знаю, но OnKeyDown точно отрабатывала
_Engine_ вне форума Ответить с цитированием
Старый 26.12.2010, 21:17   #5
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

чем http://delphiexpert.ru/view_lesson.php?id=16 не нравится? Или вообще обязательно, чтобы через KeyPress надо?
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 26.12.2010, 21:31   #6
Ponkole
Форумчанин
 
Регистрация: 02.07.2010
Сообщений: 167
По умолчанию

Вот поправил используется OnKeyDown:
Вложения
Тип файла: zip лаба.zip (204.4 Кб, 11 просмотров)
Если я тебе помог, помоги и ты мне +ом с комментарием
Ponkole вне форума Ответить с цитированием
Старый 26.12.2010, 21:36   #7
Arm!n
 
Регистрация: 09.12.2010
Сообщений: 7
По умолчанию

MyLastHit, спасибо, помогло. Странно только вот, что именно enter и стрелки не работают, а любые другие клавиши действуют.

Ponkole, благодарствую.

Последний раз редактировалось Arm!n; 26.12.2010 в 21:39.
Arm!n вне форума Ответить с цитированием
Старый 26.12.2010, 21:39   #8
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Нет, не странно.
KeyPress возвращает аски код(a-z...A-Z..0..9), а KeyDown сканкод(Enter, Space, Backspace, и тд).
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тема разработки и назначение ProgDel Общие вопросы по программированию, компьютерный форум 0 07.11.2010 10:29
Назначение клавиши на событие VBA 220v Microsoft Office Excel 2 26.11.2009 16:51
Назначение параметра beemoto Общие вопросы Delphi 6 20.11.2009 18:27
Назначение события EA_Sports Общие вопросы Delphi 2 11.03.2007 00:45
назначение модераторов Alar О форуме и сайтах клуба 25 08.12.2006 18:30