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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2008, 15:19   #1
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию Таймер на паузу

Подскажите, пожалуйста, как поставить таймер на паузу?Т.е. чтобы по клику мышки на форме он не останавливался и начинался потом заново, а именно чтобы пауза ставилась с сохранением всех текущих значений переменных...
yulia вне форума Ответить с цитированием
Старый 02.12.2008, 15:23   #2
Sm1Le
Форумчанин
 
Аватар для Sm1Le
 
Регистрация: 31.10.2008
Сообщений: 500
По умолчанию

Быть Может Код есть ?
Skype : UASm1Le.
Sm1Le вне форума Ответить с цитированием
Старый 02.12.2008, 15:53   #3
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

конечно есть )))

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var i,j:byte;
cs,sn:real;
min:real;
min_pos:byte;
box,get:TRECT;
begin
 g:=0.5;
 if g>2*pi then g:=0;

 for i:=1 to v_n do
  begin
   planets[i].grad:=planets[i].grad+planets[i].vec;
   if planets[i].grad>2*pi then planets[i].grad:=0;
   if planets[i].grad<0 then planets[i].grad:=2*pi;
   cs:=cos(planets[i].grad);
   sn:=sin(planets[i].grad);

   newPoints[i].x:=points[i].x*cs+points[i].z*sn;
   newPoints[i].y:=points[i].y;
   newPoints[i].z:=-points[i].x*sn+points[i].z*cs;


   newPoints[i].x:=newPoints[i].x;
   newPoints[i].y:=newPoints[i].y*cos(g)-newPoints[i].z*sin(g);
   newPoints[i].z:=newPoints[i].y*sin(g)+newPoints[i].z*cos(g);

   Viewpoints[i].x:=((newpoints[i].x*dest/(dest+newpoints[i].z))*80)+(image1.Width/2);
   Viewpoints[i].y:=((newpoints[i].y*dest/(dest+newpoints[i].z))*80)+(image1.Height/2);
   Viewpoints[i].z:=newpoints[i].z;
   planets[i].pos:=Viewpoints[i];
  end;
 image1.Canvas.Lock;
 image1.canvas.Brush.Color:=clblack;
 image1.canvas.CopyRect(image1.Canvas.ClipRect,image3.Canvas,image3.Canvas.ClipRect);
 image1.Canvas.Brush.Color:=clred;
 image2.Canvas.Brush.Color:=clwhite;
 image2.Canvas.Pen.Color:=clwhite;
 for j:=1 to v_n do
   begin
   min:=planets[1].pos.z;
   min_pos:=1;
   for i:= 2 to v_n do
      if planets[i].pos.z>min then
           begin
             min:=planets[i].pos.z;
             min_pos:=i;
           end;
   planets[min_pos].pos.z:=-3000;
   draw_posled[j]:=min_pos;
   end;
 for i:= 1 to v_n do
   begin
    begin
      image2.Canvas.Rectangle(image2.Canvas.ClipRect);
        box.Left:=0;
        box.Top :=0;
        box.Right:=round((planets[draw_posled[i]].image.Graphic.Width)*des/(des+Viewpoints[draw_posled[i]].z));
        box.Bottom:=round((planets[draw_posled[i]].image.Graphic.Height)*des/(des+Viewpoints[draw_posled[i]].z));

        get.Left:=0;
        get.Top:=0;
        get.Right:=planets[draw_posled[i]].image.Bitmap.Width;
        get.Bottom:=planets[draw_posled[i]].image.Bitmap.Height;
        image2.Transparent:=true;
        image2.Picture.Bitmap.TransparentColor:=$FFFFFF;
        image2.Picture.Bitmap.Transparent:=true;
        image2.Canvas.copyRect(box,planets[draw_posled[i]].image.Bitmap.Canvas,planets[draw_posled[i]].image.Bitmap.Canvas.ClipRect);
        image2.Width:=box.Right-box.Left;
        image2.Height:=box.Bottom-box.Top;

        image1.Canvas.Draw(round(planets[draw_posled[i]].pos.x-(planets[draw_posled[i]].image.Graphic.Width div 2)*des/(des+Viewpoints[draw_posled[i]].z)),
                           round(planets[draw_posled[i]].pos.y-(planets[draw_posled[i]].image.Graphic.Height div 2)*des/(des+Viewpoints[draw_posled[i]].z)),
                           image2.Picture.Bitmap);
       end;
   end;
 image1.Canvas.Unlock;

 end;
Это вообще программа имитации движения планет вокруг солнца.. И надо, чтобы они останавливались, а потом продолжали лететь с того же места... ну вообщем сделать паузу таймера

Последний раз редактировалось rpy3uH; 02.12.2008 в 18:22.
yulia вне форума Ответить с цитированием
Старый 02.12.2008, 16:01   #4
Sm1Le
Форумчанин
 
Аватар для Sm1Le
 
Регистрация: 31.10.2008
Сообщений: 500
По умолчанию

скиньте проект если не сложно а то так не очень вижу ... Но вообще почему вам не сохранять значение всех переменных ?! и начинать движение с тех значений ?!
Skype : UASm1Le.
Sm1Le вне форума Ответить с цитированием
Старый 02.12.2008, 16:29   #5
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

вот проект...

там куча записей и массивов и я не совсем представляю как можно сохранить их значения....
Вложения
Тип файла: rar Planetu.rar (219.6 Кб, 56 просмотров)
yulia вне форума Ответить с цитированием
Старый 02.12.2008, 16:37   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Подскажите, пожалуйста, как поставить таймер на паузу?
Элементарно, Ватсон.
Заведите себе глобальную переменную, например, PAUSED: BOOLEAN.
И поставьте на форму, например, кнопочку PauseButton "ПАУЗА", по которой будет:
Код:
if PauseButton.Caption='Пауза' then
begin
paused:=True;
PauseButton.Caption:='Продолжить';
end else
begin
paused:=False;
PauseButton.Caption:='Пауза';
end;
а первой строкой в procedure TForm1.Timer1Timer(Sender: TObject); будет:
Код:
if paused then
exit;
Вот и все. И ничего сохранять не надо...
mihali4 вне форума Ответить с цитированием
Старый 02.12.2008, 16:51   #7
Sm1Le
Форумчанин
 
Аватар для Sm1Le
 
Регистрация: 31.10.2008
Сообщений: 500
По умолчанию

Все гениальное просто ! =))) работает =))) Автор получилось ?
Skype : UASm1Le.
Sm1Le вне форума Ответить с цитированием
Старый 02.12.2008, 17:10   #8
Deight
Бредовый
Форумчанин
 
Аватар для Deight
 
Регистрация: 15.11.2008
Сообщений: 285
По умолчанию

А по чему нельзя timer1.Enable:=false;
а что бы запустить таймер timer1.Enable:=true;
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.
Deight вне форума Ответить с цитированием
Старый 02.12.2008, 17:18   #9
Sm1Le
Форумчанин
 
Аватар для Sm1Le
 
Регистрация: 31.10.2008
Сообщений: 500
По умолчанию

Цитата:
Сообщение от Deight Посмотреть сообщение
А по чему нельзя timer1.Enable:=false;
а что бы запустить таймер timer1.Enable:=true;
Можно и так =))))
Skype : UASm1Le.
Sm1Le вне форума Ответить с цитированием
Старый 02.12.2008, 17:32   #10
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Цитата:
Сообщение от Deight Посмотреть сообщение
А по чему нельзя timer1.Enable:=false;
а что бы запустить таймер timer1.Enable:=true;
А вот так вот я как раз и делала, но оно почему-то виснет напрочь.. т.е. останавливается и навсегда
yulia вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер Михаил Юрьевич Общие вопросы Delphi 1 16.07.2008 08:46
Таймер в С# kommunist Общие вопросы .NET 3 02.06.2008 12:11
ТАЙМЕР ratibor32 Общие вопросы C/C++ 1 26.12.2007 19:02
Таймер Stanislav Общие вопросы Delphi 3 26.11.2007 06:52
Таймер. Flash_ Gamedev - cоздание игр: Unity, OpenGL, DirectX 30 22.01.2007 12:59