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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.05.2012, 18:39
Brons14 Brons14 вне форума
Прохожий
 
Регистрация: 22.04.2012
Сообщения: 40
Репутация: 10
По умолчанию графика

Помогите пожайлуста сделать программу с TImage и таймером, вообщем я не знаю как рисовать произвольные линии по нажатию на таймер, но начало всегда в (0, Height), цвет тоже random.

Код:
procedure TForm4.Timer1Timer(Sender: TObject);
var
x,y,i: integer;
begin
x:=0;
y:=Image1.Height;
Image1.Canvas.LineTo(x,y);
Timer1.Enabled:=true;
x:=0;
y:=i;
Image1.Canvas.LineTo(x,y);
Ответить с цитированием
  #2  
Старый 12.05.2012, 18:54
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
произвольные линии по нажатию на таймер,
На него нельзя нажимать. Это не "нажимабельный" компонент.
Цитата:
но начало всегда в (0, Height)
Чтобы рисовать произвольные линии ИЗ (0;Height), надо туда сначало переместиться. Для этого есть метод MoveTo(x,y).
Чтобы координаты "куда рисовать" были рандомными, надо им присвоить рандом:
Код:
 x:= random(Image1.Width);
 y:= random(Image1.Height);
Только перед использованием random нужно вызвать в начале программы Randomize для инициализации генератора случайных чисел.
Рандомный цвет делается как-то так:
Код:
 Image1.Canvas.Pen.Color:=Random($FFFFFF);
(если не перепутал ничего).
Timer1.Enabled:=true в Вашем коде лишнее. Он и так будет включен постоянно.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Bargest за это полезное сообщение:
Brons14 (12.05.2012), OTVET (18.01.2013)
  #3  
Старый 12.05.2012, 18:58
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

i у вас нигде не задается, и будет нулем. Тогда у вас линии будут все по левому краю.

Зачем в функции таймера включать таймер еще раз?

Вы рисуете две линии - одну вверх, а вторую вниз по левому краю. линии будут толщиной в 1 пиксель
Ответить с цитированием
Этот пользователь сказал Спасибо ChinYan за это полезное сообщение:
Brons14 (12.05.2012)
  #4  
Старый 12.05.2012, 19:11
Brons14 Brons14 вне форума
Прохожий
 
Регистрация: 22.04.2012
Сообщения: 40
Репутация: 10
По умолчанию

Сделал так
Код:
procedure TForm4.Timer1Timer(Sender: TObject);
var
x,y: integer;
begin
Image1.Canvas.MoveTo(0,Height);
Randomize;
 x:= random(Image1.Width);
 y:= random(Image1.Height);
 Image1.Canvas.LineTo(x,y);
 Image1.Canvas.Pen.Color:=Random($FFFFFF);

end;
спасибо, все работает но линии выходят из точки которая не в Image а где то ниже и рамки нет никакой просто белый фон, так должно быть? (просто первый раз разбираюсь с Image)
Ответить с цитированием
  #5  
Старый 12.05.2012, 19:29
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Randomize нужно в начале программы (например, в Form4Show). Это довольно медленная функция, и делать её каждый раз по таймеру бессмысленно.
Линии выходят из точки чуть за краем, да. Я ошибся, надо брать MoveTo(0,Height-1);
Рамки никакой нет, разумеется. Может быть и есть какие-то свойства в TImage для задания стандартных рамок, но я ими в жизни не пользовался.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
Brons14 (12.05.2012)
  #6  
Старый 12.05.2012, 19:58
Brons14 Brons14 вне форума
Прохожий
 
Регистрация: 22.04.2012
Сообщения: 40
Репутация: 10
По умолчанию

если сделать так
Код:
procedure TForm4.Timer1Timer(Sender: TObject);
var
x,y: integer;
begin
Image1.Canvas.MoveTo(0,Height-1);
 x:= random(Image1.Width);
 y:= random(Image1.Height);
 Image1.Canvas.LineTo(x,y);
 Image1.Canvas.Pen.Color:=Random($FFFFFF);

end;

то без изменений( может MoveTo не там нужно писать, Randomize исправил
Ответить с цитированием
  #7  
Старый 12.05.2012, 20:16
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

Код:
  Image1.Canvas.Pen.Color:=Random($FFFFFF);
  Image1.Canvas.MoveTo(0,Image1.Height-1);
  x:= random(Image1.Width);
  y:= random(Image1.Height);
  Image1.Canvas.LineTo(x,y);
лучше сначала задавать цвет, а потом рисовать
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо cotseec за это полезное сообщение:
Brons14 (12.05.2012), OTVET (18.01.2013)
  #8  
Старый 12.05.2012, 20:19
Brons14 Brons14 вне форума
Прохожий
 
Регистрация: 22.04.2012
Сообщения: 40
Репутация: 10
По умолчанию

все получилось) большое спасибо всем!
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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