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

Delphi Sources



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

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

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

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
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, время: 22:00.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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