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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2010, 17:19   #1
Space91
Пользователь
 
Регистрация: 25.05.2010
Сообщений: 13
По умолчанию Анимация в Delphi

Здравствуйте, делаю анимацию которая до ужаса простая осталось закрасить мою ёлку в зелёный цвет. (сейчас окрашивается в цвет фона)

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;

    procedure elka(x,y:integer;Color:TColor);
    procedure Timer1Timer(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   x,y:integer;
implementation

{$R *.dfm}

procedure tform1.elka(x,y:integer;Color:TColor);
const dx=25; dy=25;
var
buf:TColor;
begin
with form1.Canvas do
 begin

 pen.Color:=Color;
  MoveTo(x,y);
  LineTo(x+1*dx,y+1*dy);
  LineTo(x-1*dx,y+1*dy);
  LineTo(x,y);


    MoveTo(x,y+1*dy);
    LineTo(x+2*dx,y+3*dy);
    LineTo(x-2*dx,y+3*dy);
    LineTo(x,y+1*dy);

     MoveTo(x,y+3*dy);
     LineTo(x+3*dx,y+6*dy);
     LineTo(x-3*dx,y+6*dy);
     LineTo(x,y+3*dy);

      MoveTo(x,y+6*dy);
      LineTo(x+4*dx,y+10*dy);
      LineTo(x-4*dx,y+10*dy);
      LineTo(x,y+6*dy);

        MoveTo(x+1*dx,y+10*dy);
        LineTo(x+1*dx,y+12*dy);
        LineTo(x-1*dx,y+12*dy);
        LineTo(x-1*dx,y+10*dy);
        LineTo(x+1*dx,y+10*dy);

          //Он закрашивает область текущей кистью, начиная с точки, передаваемой в него в качестве параметра.
        //Берем кисть

 Form1.Canvas.Brush.Color:=RGB(200, 100, 50);

            //Закрашиваем
Form1.Canvas.FloodFill(0, 2, RGB(0, 0, 0), fsBorder);

 end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
 begin
form1.Color:=clLime;
elka(x,y,form1.Color);
if x < form1.ClientWidth
then x:=x+5
else
   begin
x:=0;
y:=random(10)+100
   end;
elka(x,y,ClWhite);
 end;

procedure TForm1.FormActivate(Sender: TObject);
begin
form1.Color:=clLime;
x:=0;
y:=100;
Timer1.interval:=50
end;
end.
Space91 вне форума Ответить с цитированием
Старый 14.10.2010, 17:45   #2
WhiteSpirit
Пользователь
 
Регистрация: 28.05.2010
Сообщений: 82
По умолчанию

А не проще ли нарисовать эту ёлку один раз, на TImage, а потом этот Image двигать?
WhiteSpirit вне форума Ответить с цитированием
Старый 14.10.2010, 18:35   #3
Space91
Пользователь
 
Регистрация: 25.05.2010
Сообщений: 13
По умолчанию

Хм, я ее 1 раз и нарисовал,потом двигаю через определённый промежуток времени. там 4 треугольника(типа ёлка) горизонтально расположенные. которые хочу закрасить в зелёный цв.
Space91 вне форума Ответить с цитированием
Старый 15.10.2010, 11:24   #4
WhiteSpirit
Пользователь
 
Регистрация: 28.05.2010
Сообщений: 82
По умолчанию

Да нет же, у тебя каждый раз по таймеру ёлка стирается и перерисовывается по-новому. Кинь на форму TImage, той же процедурой elka нарисуй на Image ёлку, а потом по таймеру изменяй координаты

Примерно вот так:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Image1: TImage;
    procedure Timer1Timer(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Image1.Left:=Image1.Left + 4;
if Image1.Left >= Width then Image1.Left:=0;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
Timer1.Interval:=50;
Color:=RGB(200, 100, 50);
with Image1.Canvas do begin
    Brush.Color:=Form1.Color;
    FillRect(ClipRect);
    Pen.Color:=clWhite;

    MoveTo(108, 1);
    LineTo(158, 80);
    LineTo(58, 80);
    LineTo(108, 1);

    MoveTo(108, 81);
    LineTo(183, 160);
    LineTo(28, 160);
    LineTo(108, 81);

    MoveTo(108, 161);
    LineTo(208, 240);
    LineTo(3, 240);
    LineTo(108, 161);

    Brush.Color:=clGreen;
    FloodFill(108, 3, clWhite, fsBorder);
    FloodFill(108, 83, clWhite, fsBorder);
    FloodFill(108, 163, clWhite, fsBorder);
    end;
end;

end.

Последний раз редактировалось Stilet; 17.10.2010 в 13:05.
WhiteSpirit вне форума Ответить с цитированием
Старый 15.10.2010, 12:15   #5
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Писать так

Код:
with xxx do begin
// ...
end;

if xxx then begin
// ...
end;
и т.п. быдлокодство. Переносить трудно, что за сишная привычка, не переносить. Читать-разбирать НЕ удобно.

Правильно будет:

Код:
with xxx do
begin
// ...
end;

if xxx then
begin
// ...
end;
накипело
Alter вне форума Ответить с цитированием
Старый 15.10.2010, 12:47   #6
WhiteSpirit
Пользователь
 
Регистрация: 28.05.2010
Сообщений: 82
По умолчанию

Цитата:
Писать так
и т.п. быдлокодство
Всегда так пишу. Наверное, я быдлокодер
WhiteSpirit вне форума Ответить с цитированием
Старый 16.10.2010, 08:05   #7
Space91
Пользователь
 
Регистрация: 25.05.2010
Сообщений: 13
По умолчанию

Image1.Left:=Image1.Left + 4; - не компилирется

[Error] Unit1.pas(30): Undeclared identifier: 'Image1'
Space91 вне форума Ответить с цитированием
Старый 16.10.2010, 09:16   #8
shodlik
Новичок
Джуниор
 
Регистрация: 03.09.2010
Сообщений: 2
По умолчанию

Надо в форму выложить Image1: Timage
shodlik вне форума Ответить с цитированием
Старый 17.10.2010, 11:20   #9
Space91
Пользователь
 
Регистрация: 25.05.2010
Сообщений: 13
По умолчанию

О_о скомпелировалось! и передомной чистый лист формы, ничего не отображается.
какое заклинание произнести что бы вернуть елку?
Space91 вне форума Ответить с цитированием
Старый 18.10.2010, 09:58   #10
WhiteSpirit
Пользователь
 
Регистрация: 28.05.2010
Сообщений: 82
По умолчанию

Для Image1 задать размеры: Width=217, Height=411
WhiteSpirit вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
анимация в delphi 7 Ignessa Общие вопросы Delphi 19 15.06.2010 00:33
Анимация в Delphi Haskell Помощь студентам 0 06.12.2009 12:27
Анимация, Delphi xMass Помощь студентам 9 21.06.2009 18:17
Анимация Delphi elta Помощь студентам 20 21.06.2009 16:55
Анимация в Delphi yulia Помощь студентам 7 29.11.2007 16:55