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

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

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

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

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

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

Здравия желаю !
Я уже создавал подобную тему и сделал всё как там мне посоветовали и тогда обработчик работал нормально, но теперь я снова всё сделал точно также, а имеено -
1) глобальная переменная логического типа d (если правда - куб вращается, если лож - не должен, но вращается)))
2) Установил keypreview.
3) добавил в выполняемый цикл некое магическое выражение-
Application.ProcessMessages
вот. собственно......но что-то не работает, программа по-прежнему зациклена. Подскажите пожалуйста, что необходимо исправить/добавить.
вот исходный код-
Код:
procedure TForm1.Button1Click(Sender: TObject);
var ug, m,n,a,b,i,f,j: integer;
   mv,mvv: array [1..8,1..3] of integer;
   md: array [1..8,1..2] of integer;
   r: array [1..8] of integer;
begin

  ug:=strtoint(edit25.text);

  if radiobutton1.checked=true then
  for i := 1 to 8 do
  begin
    r[i]:=trunc(sqrt(sqr(mv[i,2])+sqr(mv[i,3])));
  end;

   if radiobutton2.checked=true then
  for i := 1 to 8 do
  begin
    r[i]:=trunc(sqrt(sqr(mv[i,1])+sqr(mv[i,3])));
  end;

  if radiobutton3.checked=true then
  for i := 1 to 8 do
  begin
    r[i]:=trunc(sqrt(sqr(mv[i,1])+sqr(mv[i,2])));
  end;



  d:=TRUE;
  f:=0;

    while d=TRUE do
    
      begin
        if radiobutton1.checked=true then

    for i := 1 to 8 do
    begin
      mvv[i,1]:= mv[i,1];
      mvv[i,2]:= trunc((sin(arctan(mv[i,2]/(mv[i,3]+0.000000000001))
      +f*(-1)*pi/180)*r[i])) ;
      mvv[i,3]:= trunc((cos(arctan(mv[i,2]/(mv[i,3]+0.000000000001))
      +f*(-1)*pi/180)*r[i])) ;
    end;
    if f>=360 then f:=0;
    f:=f+3;

    if radiobutton2.checked=true then
    for i := 1 to 8 do
    begin
      mvv[i,2]:= mv[i,2];
      mvv[i,1]:= trunc((cos(arctan(mv[i,3]/(mv[i,1]+0.000000000001))
      +f*(-1)*pi/180)*r[i])) ;
      mvv[i,3]:= trunc((sin(arctan(mv[i,3]/(mv[i,1]+0.000000000001))
      +f*(-1)*pi/180)*r[i])) ;
    end;
  
    if radiobutton3.checked=true then
    for i := 1 to 8 do
    begin
      mvv[i,3]:= mv[i,3];
      mvv[i,1]:= trunc((cos(arctan(mv[i,2]/(mv[i,1]+0.00000000000000000000001))
      +f*(-1)*pi/180)*r[i])) ;
      mvv[i,2]:= trunc((sin(arctan(mv[i,2]/(mv[i,1]+0.00000000000000000000001))
      +f*(-1)*pi/180)*r[i])) ;
    end;
    self.Repaint; 
    for i := 1 to 8 do
    begin
      md[i,1]:= mvv[i,1]+200+ trunc((cos(ug*(1)*pi/180)*mvv[i,3])/2) ;
      md[i,2]:= -mvv[i,2]+400 -trunc((sin(ug*(1)*pi/180)*mvv[i,3])/2) ;
    end;
    form1.Canvas.MoveTo(md[1,1],md[1,2]);
    form1.Canvas.lineto(md[2,1],md[2,2]);
    form1.Canvas.MoveTo(md[1,1],md[1,2]);
    form1.Canvas.lineto(md[3,1],md[3,2]);
    form1.Canvas.MoveTo(md[3,1],md[3,2]);
    form1.Canvas.lineto(md[4,1],md[4,2]);
    form1.Canvas.MoveTo(md[4,1],md[4,2]);
    form1.Canvas.lineto(md[2,1],md[2,2]);


    form1.Canvas.MoveTo(md[5,1],md[5,2]);
    form1.Canvas.lineto(md[6,1],md[6,2]);
    form1.Canvas.MoveTo(md[5,1],md[5,2]);
    form1.Canvas.lineto(md[7,1],md[7,2]);
    form1.Canvas.MoveTo(md[7,1],md[7,2]);
    form1.Canvas.lineto(md[8,1],md[8,2]);
    form1.Canvas.MoveTo(md[8,1],md[8,2]);
    form1.Canvas.lineto(md[6,1],md[6,2]);
    for I := 1 to 4 do
    begin
      form1.Canvas.MoveTo(md[i,1],md[i,2]);
      form1.Canvas.lineto(md[i+4,1],md[i+4,2]);
    end;

  



    m:=5;
    n:=5;
    a:= trunc(100*cos(ug*(-1)*3.14/180)+200);
    b:=trunc(100*sin(ug*(-1)*3.14/180)+400);
    form1.canvas.moveto(200,400);  // сначала надо нарисовать координатные оси))
    form1.canvas.lineto(200,150);
    form1.Canvas.TextOut(200-m,150-n, 'Y');
    form1.canvas.moveto(200,400);
    form1.canvas.lineto(500,400);
    form1.Canvas.TextOut(500+m,400+n, 'X');
    form1.canvas.moveto(200,400);
    form1.canvas.lineto(a,b);
    form1.Canvas.TextOut(a-m-m-m,b-n-n, 'Z');
    sleep(50);
    Application.ProcessMessages;
  end;

  
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key in [' '] then  d:=FALSE;
end;

end.
прикрепляю архив.
Вложения
Тип файла: zip Вращение вокруг оси.zip (43.4 Кб, 9 просмотров)
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 13.06.2010, 20:42   #2
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Почему бы не делать таймером? ProcessMessages не лучший вариант... Особенно вместе со sleep()... %)
И кстати программа нормально работает... =\
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 13.06.2010, 21:03   #3
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

При нажатии на пробел останавливается ????
а у меня просто куб "перепрыгивает на исходную" и продолжает вращаться....
я знаю как добавить таймер на форму....но не больше ))
в предыдущей теме всё работало вроде...
против абортов=за + жизнь;.фкн вгу;_______________________мойблг

Последний раз редактировалось vedro-compota; 13.06.2010 в 21:05.
vedro-compota вне форума Ответить с цитированием
Старый 13.06.2010, 21:17   #4
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

При нажатии пробела останавливается... Но если фокус ввода был на кнопке запуска, то оно опять запускается...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 13.06.2010, 21:31   #5
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Цитата:
фокус ввода
это что за зверь такой ? ))
--------------------------------
ага. понял. это рамка вокруг кнопки )) но всё равно странно, что от этого зависит ))
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 13.06.2010, 21:34   #6
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

От этого не зависит, от этого кнопка нажимается, а нажатие кнопки запускает заново анимацию...
Используйте SpeedButton - рисованную кнопку... На ней вроде нету фокуса...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 14.06.2010, 08:42   #7
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работатет onkeypress. vedro-compota Мультимедиа в Delphi 4 08.06.2010 20:58
OnKeyPress aurora_87 Общие вопросы C/C++ 3 15.01.2010 12:06
OnKeyPress из NumLock`а Alex Cones Общие вопросы Delphi 2 23.04.2009 20:08
Как работатет сервис по поиску игровых серверов gamer2008 PHP 1 19.08.2008 23:59