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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2011, 17:57   #1
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию График скорости как в DM

Всем доброго времени суток! Вот код черчения графика,
Код:
var
  Form1: TForm1;
  bmp:Tbitmap;
  p,p2:Tpoint;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
bmp:=Tbitmap.Create;
bmp.Width:=105;
bmp.Height:=105;
randomize;
form1.DoubleBuffered:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
image1.Picture:=nil;
image1.Canvas.Draw(5,0,bmp);
image1.Canvas.MoveTo(p.X+5,p.Y);
p2.X:=random(6);
p2.Y:=random(106);
image1.Canvas.Pen.Width:=3;
image1.Canvas.Pen.Color:=clnavy;
image1.Canvas.LineTo(p2.X,p2.Y);
bmp.Assign(image1.Picture);
p:=p2;
end;
но есть один минус, если на таймере выставить интервал в 100 мили секунд, появляются какие-то блики белые, и график опять с начала начинает двигаться. Что это? И как с эти бороться?
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 27.01.2011, 00:42   #2
Lafeza
Пользователь
 
Аватар для Lafeza
 
Регистрация: 15.09.2009
Сообщений: 20
По умолчанию

Цитата:
Сообщение от dmitriegorovih Посмотреть сообщение
есть один минус, если на таймере выставить интервал в 100 мили секунд, появляются какие-то блики белые, и график опять с начала начинает двигаться.
...да вроде по коду всё работает,данной проблемы не обнаружила...
Lafeza вне форума Ответить с цитированием
Старый 27.01.2011, 10:46   #3
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Отрисовку лучше делать на PaintBox в OnPaint, а координаты хранить в массиве.
так на DM больше похоже:
Код:
const
  h = 105;

var
  Form1: TForm1;
  p: array[0..h-1] of byte;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  DoubleBuffered:=true;
  Randomize;
  with PaintBox1.Canvas do begin
    Pen.Color:=clNavy;
    Brush.Color:=clWhite;
  end;
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  i: byte;
begin
  with PaintBox1.Canvas do begin
    FillRect(ClipRect);
    for i:=0 to h-1 do begin
      MoveTo(i, h);
      LineTo(i, h-p[i]);
    end;
  end;
  Move(p[1], p[0], h-1);
  p[h-1]:=(p[h-2]+Random(h)) shr 1;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  PaintBox1.Repaint;
end;
x128 вне форума Ответить с цитированием
Старый 28.01.2011, 17:00   #4
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Цитата:
Отрисовку лучше делать на PaintBox в OnPaint, а координаты хранить в массиве.
так на DM больше похоже:
Большое спасибо вам, есть один нюанс извините за глупый вопрос но как сделать движение графика в другую сторону?
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 29.01.2011, 11:26   #5
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Нужно копировать массив не с 1 на 0, а наоборот и новое значение добавлять не в конец, а в начало.
Код:
  Move(p[0], p[1], h-1);
  p[0]:=(p[1]+Random(h)) shr 1;
x128 вне форума Ответить с цитированием
Старый 30.01.2011, 08:22   #6
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Цитата:
Сообщение от x128 Посмотреть сообщение
Нужно копировать массив не с 1 на 0, а наоборот и новое значение добавлять не в конец, а в начало.
Код:
  Move(p[0], p[1], h-1);
  p[0]:=(p[1]+Random(h)) shr 1;
А я вот так сделал

Код:
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
n,i:integer;
begin
randomize;
mas[0]:=random(106);
for n:=105 downto 0 do begin
obmen(mas[n-1],mas[n]);
PaintBox1.Canvas.MoveTo(n,105);
PaintBox1.Canvas.LineTo(n,105-mas[n]);
end;
end;

procedure obmen(var per,vtr:integer);
var
j:integer;
begin
j:=per;
per:=vtr;
vtr:=j;
end;
Спасибо всем кто откликнулся! Тему я думмаю можно закрывать.
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ограничение скорости интернета 125874 Работа с сетью в Delphi 4 26.11.2010 16:45
Экономия скорости на массивах saggy Общие вопросы Delphi 15 17.07.2010 21:56
График - как в экселе. Demien Общие вопросы Delphi 5 28.10.2009 12:17
Сравнение скорости компиляторов Umen Обсуждение статей 13 05.10.2009 19:48
Вопросы по оптимизации скорости Иллидан Общие вопросы Delphi 9 11.07.2008 23:46