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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2011, 19:36   #1
mickeyclair
Новичок
Джуниор
 
Регистрация: 28.08.2011
Сообщений: 3
По умолчанию Графика в Delphi

Задание - плавная отрисовка пятиугольника с использованием TTimer и TMaskEdit.
У меня получилась только отрисовка по координатам, подскажите, пожалуйста, как сделать так, чтоб линии рисовались плавно.
Код:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    MaskEdit1: TMaskEdit;
    TwilightColorMap1: TTwilightColorMap;
    medt1: TMaskEdit;
    medt2: TMaskEdit;
    medt3: TMaskEdit;
    medt4: TMaskEdit;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  points: Array[0..4] of TPoint;
  counter : Integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  str,str1,str2,str3,str4 : string;
  i : Integer;

begin
  Form1.Repaint;
    str:=MaskEdit1.Text[1] + MaskEdit1.Text[2] + MaskEdit1.Text[3];
    points[0].X:= StrToInt(str);
    str:=MaskEdit1.Text[5] + MaskEdit1.Text[6] + MaskEdit1.Text[7];
    points[0].Y:= StrToInt(str);

     str1:=medt1.Text[1] + medt1.Text[2] + medt1.Text[3];
    points[1].X:= StrToInt(str1);
    str1:=medt1.Text[5] + medt1.Text[6] + medt1.Text[7];
    points[1].Y:= StrToInt(str1);

     str2:=medt2.Text[1] + medt2.Text[2] + medt2.Text[3];
    points[2].X:= StrToInt(str2);
    str2:=medt2.Text[5] + medt2.Text[6] + medt2.Text[7];
    points[2].Y:= StrToInt(str2);

     str3:=medt3.Text[1] + medt3.Text[2] + medt3.Text[3];
    points[3].X:= StrToInt(str3);
    str3:=medt3.Text[5] + medt3.Text[6] + medt3.Text[7];
    points[3].Y:= StrToInt(str3);

     str4:=medt4.Text[1] + medt4.Text[2] + medt4.Text[3];
    points[4].X:= StrToInt(str4);
    str4:=medt4.Text[5] + medt4.Text[6] + medt4.Text[7];
    points[4].Y:= StrToInt(str4);
      counter:=0;
   Canvas.MoveTo(points[0].X,points[0].Y);
   Timer1.Enabled := true; // Включаешь таймер
   Timer1.Interval := 1000;//Одна сикунда

end;
procedure DrawPentagon(i : Integer);
begin
 If  i = 5 then
 begin
 i:=0;
 Form1.Timer1.Enabled := false;
 end;
 Form1.Canvas.LineTo(points[i].X, points[i].Y);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
counter:=counter+1;
DrawPentagon(counter);
end;
end.
mickeyclair вне форума Ответить с цитированием
Старый 28.08.2011, 20:12   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что значит "плавно"? Нужно скруглить углы?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.08.2011, 20:14   #3
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

Цитата:
плавно
25 кадров в сек
Lesha вне форума Ответить с цитированием
Старый 28.08.2011, 20:45   #4
mickeyclair
Новичок
Джуниор
 
Регистрация: 28.08.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А что значит "плавно"? Нужно скруглить углы?
нужно чтоб линия не целиком рисовалась, а... как объяснить...как будто проводишь ее карандашом
mickeyclair вне форума Ответить с цитированием
Старый 28.08.2011, 20:54   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Пунктир что ли? Или пожирней?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 28.08.2011, 21:02   #6
mickeyclair
Новичок
Джуниор
 
Регистрация: 28.08.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Пунктир что ли? Или пожирней?
да нет... ну вот по этому способу линия просто возникает, соединяя две заданные точки, а нужно, чтобы, так сказать, был виден процесс ее рисования
mickeyclair вне форума Ответить с цитированием
Старый 28.08.2011, 21:07   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Ну строй линии отрезками в цикле... Или точками, если скорость понравится... Сделай процедуру которая бы так рисовала одну линию и заставь ее нарисовать нужное тебе число линий.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 28.08.2011, 21:10   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А-а-а... Анимация... Ну тогда тебе придется создать функцию, вычисляющую точки отрезка (y=kx+b - помнишь?). Если формул не знаешь загляни в математический справочник. После нужно написать функцию, вычисляющую угол - k в формуле выше.
Далее в цикле от 0 до 360 градусов запускаешь цикл, вычисляющий y и строишь от точки до точки, разбив каждую сторону на отрезки поменьше.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
3D графика в Delphi vatik Компоненты Delphi 2 21.12.2010 17:54
Графика в Delphi Mik0 Помощь студентам 0 01.12.2010 17:42
3D Графика в Delphi QuadroX Фриланс 14 12.05.2010 23:11
Графика в Delphi Silent_Hell Помощь студентам 2 29.04.2009 13:21