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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2010, 18:41   #1
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию Не работатет onkeypress.

Доброго времени ))
Чтобы остановить анимацию я использую нажатие на клавишу "1" для этого создаю обработчик события onkeypress для формы в котором значиться-
Код:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key in ['1'] then  m:=0;

end;
но когда жму на 1 картинка продолжает изменяться и программа остаётся всё так же зацикленной . m - это глобальная переменная ,если больше нуля - выполняем анимацию - если меньше, по-идее, должна остановиться....но не хочет.-
вот весь код-
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  m:integer;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var q,a,b,x0,y0,n,dx,dy,f,i:integer;
  horda: real;
  mv: array [0..7,0..1] of integer;
begin
  Canvas.Brush.Style := bsClear;
  m:=1;
  f:=0;
 while m>0 do
  begin
    self.Repaint;
    canvas.Pen.Width:= 15;
    form1.canvas.Ellipse(150,150,250,250);
    form1.canvas.Ellipse(195,195,205,205);
    canvas.Pen.Width:= 7;
    form1.Canvas.MoveTo(200,200);
    q:=0;
    for i := 0 to 7 do
    {присваиваем концам спиц ,
     которые прилегают к ободу колеса
     ,учитывая смещение ,новые координаты}
    begin
      mv[i,0]:=Round(50*cos((q+f)*pi/180))+200;
      mv[i,1]:=Round(50*sin((q+f)*pi/180))+200;
      q:=q+45;
    end;
    f:=f+5;  // увеличиваем угол смещения спиц на 10 градусов
    if f>=360 then  f:=0;
    for i:= 0 to 7 do
    begin
      form1.Canvas.MoveTo(200,200);
      form1.Canvas.LineTo(mv[i,0],mv[i,1]); // рисуем спицы и рычаг.
      if i=0 then
      begin
        canvas.Pen.Width:= 10;
        form1.Canvas.MoveTo(mv[i,0],mv[i,1]);
        form1.Canvas.LineTo(mv[i,0]-400,mv[i,1]);
        form1.canvas.Ellipse(mv[i,0]-3,mv[i,1]-3,mv[i,0]+3,mv[i,1]+3);
        canvas.Pen.Width:= 7;
      end;
    end;
    Sleep(10);   // задержка
  end;


end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key in ['1'] then  m:=0;

end;

end.
Пожалуйста, скажите в чём ошибка. (прикрепляю архив с "проектом")
Вложения
Тип файла: zip Колесо паровоза.zip (134.0 Кб, 14 просмотров)
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 08.06.2010, 19:22   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вставьте Application.ProcessMessages в тело цикла(ну в конце цикла например)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.06.2010, 19:57   #3
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

теперь так-
Код:
procedure TForm1.Button1Click(Sender: TObject);
var q,a,b,x0,y0,n,dx,dy,f,i:integer;
  horda: real;
  mv: array [0..7,0..1] of integer;
begin
  Canvas.Brush.Style := bsClear;
  m:=1;
  f:=0;
 while m>0 do
  begin
    self.Repaint;
    canvas.Pen.Width:= 15;
    form1.canvas.Ellipse(150,150,250,250);
    form1.canvas.Ellipse(195,195,205,205);
    canvas.Pen.Width:= 7;
    form1.Canvas.MoveTo(200,200);
    q:=0;
    for i := 0 to 7 do
    {присваиваем концам спиц ,
     которые прилегают к ободу колеса
     ,учитывая смещение ,новые координаты}
    begin
      mv[i,0]:=Round(50*cos((q+f)*pi/180))+200;
      mv[i,1]:=Round(50*sin((q+f)*pi/180))+200;
      q:=q+45;
    end;
    f:=f+5;  // увеличиваем угол смещения спиц на 10 градусов
    if f>=360 then  f:=0;
    for i:= 0 to 7 do
    begin
      form1.Canvas.MoveTo(200,200);
      form1.Canvas.LineTo(mv[i,0],mv[i,1]); // рисуем спицы и рычаг.
      if i=0 then
      begin
        canvas.Pen.Width:= 10;
        form1.Canvas.MoveTo(mv[i,0],mv[i,1]);
        form1.Canvas.LineTo(mv[i,0]-400,mv[i,1]);
        form1.canvas.Ellipse(mv[i,0]-3,mv[i,1]-3,mv[i,0]+3,mv[i,1]+3);
        canvas.Pen.Width:= 7;
      end;
    end;
    Sleep(10);   // задержка
    Application.ProcessMessages;
  end;
но не работатет. даже "завершение процесса " не работатет теперь - пришлось диспетчер задач вызывать....
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 08.06.2010, 20:36   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

KeyPreview у формы в true стоит?
(я не учел что у вас кнопка еще на форме)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.06.2010, 20:58   #5
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Установил )) теперь всё работает )) Пепел Феникса, выручил )) спасибо ))
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OnKeyPress aurora_87 Общие вопросы C/C++ 3 15.01.2010 12:06
Как правильно обработать onkeypress? Stilet JavaScript, Ajax 6 13.08.2009 16:14
OnKeyPress из NumLock`а Alex Cones Общие вопросы Delphi 2 23.04.2009 20:08
Как работатет сервис по поиску игровых серверов gamer2008 PHP 1 19.08.2008 23:59