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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2011, 11:26   #11
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
Как таймеру объяснить что это надо делать пока
timer.enabled //отключить(false)/включить(true) таймер
Код:
timer.enabled:=  (XM/2)+b+R<=XM ;
То что я видел у вас
1.Стирание =Рисование цветом фона в очень СТАРЫX (постоянных/начальных) координатах.
Код:
     Form1.Canvas.Pen.Color:=Form1.Color;
     Form1.Canvas.Arc(trunc(XM/2),trunc(YM/2)-trunc(a/2),trunc(XM/2)+b,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2),trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2),trunc(YM/2)-trunc(a/2));
2 рисование в последних (предыдущих координатах)
Код:
     Form1.Canvas.Pen.Color:=ClBlue;
     Form1.Canvas.Arc(trunc(XM/2)+R,trunc(YM/2)-trunc(a/2),trunc(XM/2)+b+R,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2)+R,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2)+R,trunc(YM/2)-trunc(a/2));
3 изменение координат.
Код:
     R:=R+2;
нужна схема
1.стирание в последних(предыдущих) координатах
2. изменение координат
3. рисование в новых.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 19.04.2011 в 11:42.
evg_m вне форума Ответить с цитированием
Старый 19.04.2011, 12:55   #12
detalik
Форумчанин
 
Регистрация: 05.04.2011
Сообщений: 115
По умолчанию

Спасибо, получилось, продолжая задание (дуга, отразившись от правого края формы продолжает движение влево), попробовал так
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   XM:=Form1.Width;
   YM:=Form1.Height;

     if (XM/2)+b+R<=XM then begin
     Form1.Canvas.Pen.Color:=Form1.Color;
     Form1.Canvas.Arc(trunc(XM/2),trunc(YM/2)-trunc(a/2),trunc(XM/2)+b,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2),trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2),trunc(YM/2)-trunc(a/2));
     Form1.Canvas.Pen.Color:=Form1.Color;
     Form1.Canvas.Arc(trunc(XM/2)+R,trunc(YM/2)-trunc(a/2),trunc(XM/2)+b+R,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2)+R,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2)+R,trunc(YM/2)-trunc(a/2));
     R:=R+4;
     Form1.Canvas.Pen.Color:=ClBlue;
     Form1.Canvas.Arc(trunc(XM/2)+R,trunc(YM/2)-trunc(a/2),trunc(XM/2)+b+R,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2)+R,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2)+R,trunc(YM/2)-trunc(a/2));
      end;
      if ((XM/2)+b+R=XM) and (XM>0) then begin
      Form1.Canvas.Pen.Color:=Form1.Color;
      Form1.Canvas.Arc(trunc(XM)-trunc(b/2),trunc(YM/2)-trunc(a/2),trunc(XM)+trunc(b/2),trunc(YM/2)+trunc(a/2),trunc(XM),trunc(YM/2)-trunc(a/2),trunc(XM),trunc(YM/2)+trunc(a/2));
      Form1.Canvas.Pen.Color:=Form1.Color;
      Form1.Canvas.Arc(trunc(XM)-trunc(b/2)-R,trunc(YM/2)-trunc(a/2),trunc(XM)+trunc(b/2)-R,trunc(YM/2)+trunc(a/2),trunc(XM)-R,trunc(YM/2)-trunc(a/2),trunc(XM)-R,trunc(YM/2)+trunc(a/2));
      R:=R+4;
      Form1.Canvas.Pen.Color:=ClBlue;
      Form1.Canvas.Arc(trunc(XM)-trunc(b/2)-R,trunc(YM/2)-trunc(a/2),trunc(XM)+trunc(b/2)-R,trunc(YM/2)+trunc(a/2),trunc(XM)-R,trunc(YM/2)-trunc(a/2),trunc(XM)-R,trunc(YM/2)+trunc(a/2));
Но дойдя до правого края, вместо того, чтобы отразиться посередине формы возникает вторая дуга(хотя направленная влево). Подскажите, пожалуйста, что не так.
detalik вне форума Ответить с цитированием
Старый 19.04.2011, 13:14   #13
detalik
Форумчанин
 
Регистрация: 05.04.2011
Сообщений: 115
По умолчанию

Переделал так
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
X1:=10; Y1:=10;
kx:=1; b:=40; a:=40; c:=900;
  end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
   XM:=Form1.Width;
   YM:=Form1.Height;

     if i<XM  then begin
     Form1.Canvas.Pen.Color:=Form1.Color;
     Form1.Canvas.Arc(trunc(XM/2),trunc(YM/2)-trunc(a/2),trunc(XM/2)+b,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2),trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2),trunc(YM/2)-trunc(a/2));
     Form1.Canvas.Pen.Color:=Form1.Color;
     Form1.Canvas.Arc(trunc(XM/2)+R,trunc(YM/2)-trunc(a/2),trunc(XM/2)+b+R,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2)+R,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2)+R,trunc(YM/2)-trunc(a/2));
     R:=R+4;
     Form1.Canvas.Pen.Color:=ClBlue;
     Form1.Canvas.Arc(trunc(XM/2)+R,trunc(YM/2)-trunc(a/2),trunc(XM/2)+b+R,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2)+R,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2)+R,trunc(YM/2)-trunc(a/2));
     i:=trunc(XM/2)+b+R;
      end;
      if   c>0 then begin
      Form1.Canvas.Pen.Color:=Form1.Color;
      Form1.Canvas.Arc(trunc(XM)-trunc(b/2),trunc(YM/2)-trunc(a/2),trunc(XM)+trunc(b/2),trunc(YM/2)+trunc(a/2),trunc(XM),trunc(YM/2)-trunc(a/2),trunc(XM),trunc(YM/2)+trunc(a/2));
      Form1.Canvas.Pen.Color:=Form1.Color;
      Form1.Canvas.Arc(trunc(XM)-trunc(b/2)-R,trunc(YM/2)-trunc(a/2),trunc(XM)+trunc(b/2)-R,trunc(YM/2)+trunc(a/2),trunc(XM)-R,trunc(YM/2)-trunc(a/2),trunc(XM)-R,trunc(YM/2)+trunc(a/2));
      R:=R+4;
      Form1.Canvas.Pen.Color:=ClBlue;
      Form1.Canvas.Arc(trunc(XM)-trunc(b/2)-R,trunc(YM/2)-trunc(a/2),trunc(XM)+trunc(b/2)-R,trunc(YM/2)+trunc(a/2),trunc(XM)-R,trunc(YM/2)-trunc(a/2),trunc(XM)-R,trunc(YM/2)+trunc(a/2));
       c:=trunc(XM)-trunc(a/2)-R;
     //X:=XX+kx*hx; YY:=YY+ky*hy;
end;
Но дуги начинают движение навстречу друг другу одновремено, хотя вторая должна начинать лишь после того как первая достигнет правого края формы. Спасибо.
detalik вне форума Ответить с цитированием
Старый 19.04.2011, 13:20   #14
detalik
Форумчанин
 
Регистрация: 05.04.2011
Сообщений: 115
По умолчанию

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   XM:=Form1.Width;
   YM:=Form1.Height;
   i:=trunc(XM/2);
     while i<XM  do begin
     Form1.Canvas.Pen.Color:=Form1.Color;
.........бла бла бла
i:=trunc(XM/2)+b+R;
Так тоже не помогло теперь дуга до правого края вообще не движется, она там сразу откуда-то возникает.
detalik вне форума Ответить с цитированием
Старый 19.04.2011, 13:23   #15
detalik
Форумчанин
 
Регистрация: 05.04.2011
Сообщений: 115
По умолчанию

Я сейчас заплачу, уже и вот так попробовал
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   XM:=Form1.Width;
   YM:=Form1.Height;
   i:=trunc(XM/2)+b+R;
   c:=trunc(XM)+trunc(b/2);
     while i<XM  do begin
     Form1.Canvas.Pen.Color:=Form1.Color;
     Form1.Canvas.Arc(trunc(XM/2),trunc(YM/2)-trunc(a/2),trunc(XM/2)+b,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2),trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2),trunc(YM/2)-trunc(a/2));
     Form1.Canvas.Pen.Color:=Form1.Color;
     Form1.Canvas.Arc(trunc(XM/2)+R,trunc(YM/2)-trunc(a/2),trunc(XM/2)+b+R,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2)+R,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2)+R,trunc(YM/2)-trunc(a/2));
     R:=R+4;
     Form1.Canvas.Pen.Color:=ClBlue;
     Form1.Canvas.Arc(trunc(XM/2)+R,trunc(YM/2)-trunc(a/2),trunc(XM/2)+b+R,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2)+R,trunc(YM/2)+trunc(a/2),trunc(XM/2)+trunc(b/2)+R,trunc(YM/2)-trunc(a/2));
     i:=trunc(XM/2)+b+R;
      end;
      while   c>0 do begin
      Form1.Canvas.Pen.Color:=Form1.Color;
      Form1.Canvas.Arc(trunc(XM)-trunc(b/2),trunc(YM/2)-trunc(a/2),trunc(XM)+trunc(b/2),trunc(YM/2)+trunc(a/2),trunc(XM),trunc(YM/2)-trunc(a/2),trunc(XM),trunc(YM/2)+trunc(a/2));
      Form1.Canvas.Pen.Color:=Form1.Color;
      Form1.Canvas.Arc(trunc(XM)-trunc(b/2)-R,trunc(YM/2)-trunc(a/2),trunc(XM)+trunc(b/2)-R,trunc(YM/2)+trunc(a/2),trunc(XM)-R,trunc(YM/2)-trunc(a/2),trunc(XM)-R,trunc(YM/2)+trunc(a/2));
      R:=R+4;
      Form1.Canvas.Pen.Color:=ClBlue;
      Form1.Canvas.Arc(trunc(XM)-trunc(b/2)-R,trunc(YM/2)-trunc(a/2),trunc(XM)+trunc(b/2)-R,trunc(YM/2)+trunc(a/2),trunc(XM)-R,trunc(YM/2)-trunc(a/2),trunc(XM)-R,trunc(YM/2)+trunc(a/2));
       c:=trunc(XM)-trunc(a/2)-R;
     //X:=XX+kx*hx; YY:=YY+ky*hy;
end;
не получается......
detalik вне форума Ответить с цитированием
Старый 19.04.2011, 13:35   #16
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте
А нельзя так
Код:
...
Image1: TImage;
...
procedure TForm1.Button1Click(Sender: TObject);
Var
X1,Y1,kx,ky,b,a:integer;
begin
X1:=10; Y1:=10;
kx:=1;ky:=1; b:=40; a:=40;
   Image1.Canvas.Font.Color:=ClBlack;
   Image1.Canvas.Arc(X1,Y1,X1+b,Y1+a,X1+trunc(b/2),Y1+a,X1+trunc(b/2),Y1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Image1.Left :=Image1.Left +1; // Алгоритм перемещения сами пишите (или вопрос в новой теме), это только для демонстрации
end;
До свидания
P.S. Для Image1 установить Transparent в True

Последний раз редактировалось OlegVE; 19.04.2011 в 13:47.
OlegVE вне форума Ответить с цитированием
Старый 19.04.2011, 13:50   #17
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
Так тоже не помогло теперь дуга до правого края вообще не движется, она там сразу откуда-то возникает.
Код:
// вот здесь (до начала цикла) дуга слева
  while i<XM  do begin
// вот здесь (внутри цикла) мы ее много=много раз стираем-рисуем потихоньку сдвигая 
// НО НА ЭКРАН показать ЕЩЕ НЕ МОЖЕМ! НАША ПРОЦЕДУРА ЕЩЕ НЕ ЗАКОНЧИЛАСЬ
end;
// вот здесь (после цикла) мы наконец закончили двигать и вот 
//ТОЛЬКО теперь сможем  ее ПОКАЗАТЬ.
Советую почитать "похожие темы". ссылки на аналогичные темы внизу страницы.

УБЕРИ ЦИКЛ

чтобы дуга меняла направление достаточно
Всегда ПОМНИТЬ текущее направление и в нужный момент его(направление) менять.

изменение координат переписываем так
R:=R+dR;
и по достижении границы делаем
dR:=-dR;
dR это будем наше текущее направление
А при задании НАчаЛЬНОЙ позиции еще задаем и нач. скорость с направлением
dR:=4;
советую почитать "похожие темы" внизу страницы
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 19.04.2011 в 14:09.
evg_m вне форума Ответить с цитированием
Старый 19.04.2011, 14:11   #18
detalik
Форумчанин
 
Регистрация: 05.04.2011
Сообщений: 115
По умолчанию

Если я уберу цикл, как в программе задать, чтобы дуга дошла до правого края и форма, а затем отразилась и до левого, как прописать эти условия?
detalik вне форума Ответить с цитированием
Старый 19.04.2011, 14:35   #19
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Вам моё предложение не понравилось? Тогда прощайте.
OlegVE вне форума Ответить с цитированием
Старый 19.04.2011, 14:45   #20
detalik
Форумчанин
 
Регистрация: 05.04.2011
Сообщений: 115
По умолчанию

Дело не в том, что не понравилось, задание так построено, т.е. дуга должна начинать движение сразу после запуска приложения...а не после нажатия кнопки, спасибо большое за совет!!!!
detalik вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
отражение в форме, всех данных из подчиненной таблицы stbo Microsoft Office Access 1 17.01.2011 15:58
Delphi7 Как осуществить движение объекта? -ushёl- Компоненты Delphi 3 10.05.2010 22:01
Движение полукруга malir Помощь студентам 0 14.12.2009 17:50
Движение по эллипсу в delphi7 GaLiof Помощь студентам 16 15.11.2009 14:06