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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2010, 16:55   #1
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
Сообщение delphi управление окружностью

Здраствуй дорогие форумчанины.
Написала программу, которая приводит окружность в действии.
Мне нужно чтобы пользователь мог управлять этим движением с помощью стрелочек. Написала процеду KeyPress но она не работает. Помогите мне ее исправить))))
Исходный код ниже:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    StartProgramm: TMenuItem;
    exit: TMenuItem;
    procedure Timer1Timer(Sender: TObject);
    procedure exitClick(Sender: TObject);
    procedure StartProgrammClick(Sender: TObject);
    procedure KeyPressing(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x,y:integer;
  dx,dy:integer;
implementation

{$R *.dfm}
procedure Ris(var dx,dy:integer);
begin
     // стереть окружность
  form1.Canvas.Pen.Color := form1.Color;
  form1.Canvas.Ellipse(x, y, x + 10, y + 10);
  x := x + dx; // нарисовать окружность на новом месте
  y:=y+dy;
  form1.Canvas.Pen.Color := clBlack;
  form1.Canvas.Ellipse(x, y, x + 10, y + 10);
end;

procedure TForm1.exitClick(Sender: TObject);
begin
  ShowMessage('Спасибо что использовали нашу программу');
  halt;
end;

procedure TForm1.KeyPressing(Sender: TObject; var Key: Char);
begin
   if key=#72 then 
      begin
        dy:=-20;     
        dx:=0;
      end;
      if key=#80 then 
      begin
        dy:=20;       
        dX:=0;
      end;
      if key=#75 then 
      begin
        dx:=-20;      
        dy:=0;
      end;
      if key=#77 then 
      begin
        dx:=20;       
        dy:=0;
      end;
end;

procedure TForm1.StartProgrammClick(Sender: TObject);
begin
  x := 0;
  y := 10;
  dx := 5;
  timer1.Interval := 50; // период возникновения события OnTimer - 0.5 сек
  form1.canvas.brush.color := form1.color;

end;

procedure Tform1.Timer1Timer(Sender: TObject);
begin
  Ris(dx,dy);
end;

end.
Если кто нибудь знает помогите написать управление цветом по такому же принципу.
Заранее вам благодарна))))
tanek вне форума Ответить с цитированием
Старый 06.03.2010, 17:06   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

обрабатывай события нажатия клавиш в другом обработчике
TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
здесь можно регулировать чтоб обработка клавиш была только при нажатом Shift или Ctrl

а то твой обработчик keypressing не получает управления в программе нигде
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 06.03.2010, 17:51   #3
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

RUSt88 а какие теперь буду коды клавиш? а то он мне пишит не соответствие типов
tanek вне форума Ответить с цитированием
Старый 06.03.2010, 18:17   #4
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

посмотри виртуальные клавиши здесь и сравнивай переменную key с нужной клавишей
http://api.farmanager.com/ru/winapi/...lkeycodes.html

у мя delphi 2010 так что могу так (остальные версии не знаю)
Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VkKeyScan('a') then ShowMessage('sdsd');
end;
сделай так набери vk в пройедуре и нажми Ctrl+Пробел
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 06.03.2010, 18:39   #5
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

я зделала как вы сказали но все равно не работает
Код:
procedure TForm1.KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
   if key=VkKeyScan(#72) then 
      begin
        dy:=-20;     
        dx:=0;
      end;
      if key=VkKeyScan(#80) then 
      begin
        dy:=20;       
        dX:=0;
      end;
      if key=VkKeyScan(#75) then 
      begin
        dx:=-20;      
        dy:=0;
      end;
      if key=VkKeyScan(#77) then 
      begin
        dx:=20;       
        dy:=0;
      end;
end;
tanek вне форума Ответить с цитированием
Старый 06.03.2010, 18:58   #6
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

#72 - это аски код английского алфавита, а у тебя по ходу язык то стоит русский, потому и не работает

используй функцию получения кода клавиши, ща не помню как пишется
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 06.03.2010, 19:06   #7
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

нет..... у меня стоит английская расскладка и он все равно не работает.... Я даже пыталась менять расскладку и бестолку
tanek вне форума Ответить с цитированием
Старый 06.03.2010, 19:42   #8
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

какие клавиши нужно зажимать в проге для управления?

буквы или стрелки на клаве? если буквы, то сделай так например нужно реагировать на нажатие клавиши "W", знач запишем так
if Key = VkKeyScan('w') then ShowMessage('sdsd');

если стрелки, то у них код такой
if Key = VK_LEFT then ShowMessage('sdsd');
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 06.03.2010, 20:11   #9
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

спасибо вам большое.... вы мне очень помогли)))
а как мне сделать чтобы я мог изменять цвет окружности?
tanek вне форума Ответить с цитированием
Старый 06.03.2010, 20:32   #10
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

пропиши функцию рисования окружности с параметром-переменной цвет
напр так Ris(dx, dy, color: TColor)

когда нужно в любом месте программы изменяешь переменную на нужный цвет и всё

var a: TColor;
a:= clWhite; ну и т.п.

Ris(20, 0, a);
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]

Последний раз редактировалось RUSt88; 06.03.2010 в 20:38.
RUSt88 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление windows с помощью delphi Hallo Обсуждение статей 6 05.09.2010 23:50
Управление внешними устройствами средствами Delphi RockForr Общие вопросы Delphi 7 03.05.2009 22:04
Управление Excel из Delphi chekanoff Общие вопросы Delphi 2 15.01.2008 20:31
Кто поможет с "пульсирующей" окружностью??? Solny6ko YasnoE Помощь студентам 11 18.05.2007 20:27
Управление настройками компьютера из приложения Delphi Saili Общие вопросы Delphi 2 05.12.2006 11:41