Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.08.2012, 15:55
qazwsx qazwsx вне форума
Прохожий
 
Регистрация: 03.08.2012
Сообщения: 10
Репутация: 10
Восклицание Рисуем график

Подскажите пожалуйста как можно построить график не мгновенно, а чтобы график строился "во времени" - т.е. плавное построение графика....
Данная программа строит график мгновенно и несколько раз, подскажите пожалуйста как построить плавно по точкам

Код:
unit Unit1; 

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  ExtCtrls, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  Form1: TForm1; 
  x0, y0 : integer;
  h, w   : integer;
  dx, dy : integer;
  x, y   : integer;
   cross : integer;
  dcross : integer;
  lx, ly : real;
  dlx,dly: real;
  i      : integer;
  a,b: integer;

  xg, yg : array[0..12] of integer;
implementation

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
 randomize;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  timer1.Enabled:=false;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
       x0:=30; y0:=420;
       h:=400; w:=520;
       dx:=40; dy:=40;
       dcross:=1;
       dlx:=1.0; dly:=1.0;
       with form1.Canvas do
         begin
           pen.Color:=clBlack;
           cross:=dcross;
           moveto(x0,y0);           lineto(x0,y0-h);
           moveto(x0,y0);           lineto(x0+w,y0);
           //засечка, сетка и оцифровка по оси Х
           x:=x0+dx;
           lx:=dlx;
           repeat
             moveto(x, y0-3);       lineto(x, y0+3);
             cross:=cross-1;
               if cross = 0 then
                 begin
                   textout(x-8,y0+5,floattostr(lx));
                   cross:=dcross;
                 end;
                 pen.style:=psdot;
                 moveto(x, y0-10);       lineto(x, y0-h);
                 pen.style:=pssolid;
                 lx:=lx+dlx;
                 x:=x+dx;
           until(x>x0+w);

           y:=y0-dy;
           ly:=dly;
           repeat
             moveto(x0-3, y);       lineto(x0+3, y);

                   textout(x0-20,y,floattostr(ly));

                 pen.style:=psdot;
                 moveto(x0+3, y);       lineto(x0+w, y);
                 pen.style:=pssolid;
                 y:=y-dy;
                 ly:=ly+dly;
             until(y<y0-h);
         end;

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

 for i:=0 to 12 do
 begin
 xg[i]:=i;
 yg[i]:=random(10);
 end;
 // построение графика
 with canvas do
 begin
 pen.Style:=psSolid;
 pen.Color:=clRed;
 x:=trunc(x0+xg[0]*dx/dlx);
 y:=trunc(y0-yg[0]*dy/dly);
 moveto(x,y);
 for i:=1 to 12 do
 begin
 x:=trunc(x0+xg[i]*dx/dlx);
 y:=trunc(y0-yg[i]*dy/dly);
 lineto(x,y);
 end;
 end;
 //i:=i+1;
end;

initialization
  {$I unit1.lrs}

end.
Ответить с цитированием
  #2  
Старый 07.08.2012, 16:42
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от qazwsx
Подскажите пожалуйста как можно построить график не мгновенно, а чтобы график строился "во времени" - т.е. плавное построение графика....
Данная программа строит график мгновенно и несколько раз, подскажите пожалуйста как построить плавно по точкам
Вместо рисования на форме, лучше брось на форму компонент TImage и по таймеру рисуй очередную линию (или точку) на нём.
Ответить с цитированием
  #3  
Старый 07.08.2012, 17:33
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

В имидж медленно рисует, лучше уж PaintBox.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 07.08.2012, 19:22
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
В имидж медленно рисует, лучше уж PaintBox.
Ну так ведь и нужно "построить график не мгновенно". Но "медленность" здесь будет обеспечивать таймер, а не TImage. Я бы не сказал, что "В имидж медленно рисует". Вряд ли будет ощутимая разница между TImage и TBitmap который будет "выбрасываться" на TPaintBox.
Ответить с цитированием
  #5  
Старый 07.08.2012, 20:09
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Извиняй, читал по диагонали.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #6  
Старый 08.08.2012, 10:43
qazwsx qazwsx вне форума
Прохожий
 
Регистрация: 03.08.2012
Сообщения: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Вместо рисования на форме, лучше брось на форму компонент TImage и по таймеру рисуй очередную линию (или точку) на нём.

а чем плохо рисовать просто на форме?
Ответить с цитированием
  #7  
Старый 08.08.2012, 11:14
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

тем, что уведи за границу экрана форму и верни назад, рисунок сотрется.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #8  
Старый 08.08.2012, 22:57
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

В таком случае и в PaintBox потеряет картинку, нужно обновлять.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #9  
Старый 08.08.2012, 23:07
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

рисовать в OnPaint
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием
  #10  
Старый 09.08.2012, 08:19
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

рисовать по таймеру на "буферном" битмапе, отрисовывать битмап в OnPaint контрола.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:47.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter