Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.10.19;
Скачать: [xml.tar.bz2];

Вниз

помогите с объектом!   Найти похожие ветки 

 
novai   (2008-09-10 13:56) [0]

не понимаю в чем ошибка
TStar = class(TObject)
   timer:TTimer;
   x,y, width, height:integer;
   oldx, oldy:integer;
   constructor Create;
   destructor Destroy; override;
   procedure OnTimerStar(Sender: TObject); не работает
   procedure SetTo(x,y:integer);
   procedure Draw ;
   procedure Move;
 end;

constructor TStar.Create;
begin
 inherited Create;

 x:=0; y:=0;
 oldx:=x; oldy:=y;

 width:=10;
 height:=10;

 Timer:=TTimer.Create(nil);
 timer.Interval:=100;
 timer.Enabled:=true;
 timer.OnTimer:=OnTimerStar;
end;

Destructor TStar.Destroy;
begin
 timer.Enabled:=false;
 timer.Destroy;

 inherited Destroy;
end;

procedure OnTimerStar(Sender: TObject);
begin
 star.Move;
end;

procedure TStar.SetTo(x,y:integer);
begin
 star.x:=x;
 star.y:=y;
//  star.oldx:=x;
//  star.oldy:=y;
 draw;
end;

procedure TStar.Draw;
begin
 if (oldx<>x) or (oldy<>y) then
 begin
  PatBlt(scene.Canvas.Handle, oldx, oldy, Width, Height, WHITENESS);
  oldx:=x;
  oldy:=y;
 end;

 Scene.Canvas.Rectangle(x,y, x+width,y+height);
 Scene.DrawScene;
end;

procedure TStar.Move;
begin
  inc(star.y,10);
  if star.y+star.height>=scene.Height then star.y:=0;

  Draw;
end;


 
Юрий Зотов ©   (2008-09-10 14:03) [1]

А что за таинственная переменная star?


 
novai   (2008-09-10 14:05) [2]

это type ... когда все отлажу будер рисоваться движужуяся звезда...


 
brother ©   (2008-09-10 14:05) [3]

> движужуяся

она будет что?))))


 
Юрий Зотов ©   (2008-09-10 14:07) [4]

> novai   (10.09.08 14:05) [2]

Eсли star - это type, то "движужуяся звезда будер рисоваться" еще очень не скоро.


 
Германн ©   (2008-09-10 14:07) [5]


> А что за таинственная переменная star?
> <Цитата>
>
> novai   (10.09.08 14:05) [2]
>
> это type

Хм.


 
Германн ©   (2008-09-10 14:08) [6]


> то "движужуяся звезда будер рисоваться" еще очень не скоро.

Опередил, блин. Прям слово в слово :)


 
oldman ©   (2008-09-10 14:08) [7]


> procedure OnTimerStar(Sender: TObject);
> begin
>  star.Move;
> end;
>
> procedure TStar.Move;
> begin
>   inc(star.y,10);
>   if star.y+star.height>=scene.Height then star.y:=0;
>   Draw;
> end;


А почему же не:

procedure OnTimerStar(Sender: TObject);
begin
 inc(star.y,10);
 if star.y+star.height>=scene.Height then star.y:=0;
 Draw;
end;

???


 
Palladin ©   (2008-09-10 14:09) [8]


> procedure OnTimerStar(Sender: TObject);

в ясли...


 
novai   (2008-09-10 14:10) [9]

там я заводил конечно переменную   Star:Tstar;


 
Правильный$Вася   (2008-09-10 14:11) [10]


> procedure OnTimerStar(Sender: TObject); не работает

и че? так и говорит "не работаю"?


 
brother ©   (2008-09-10 14:12) [11]

наверное не компилируется...


 
novai   (2008-09-10 14:13) [12]


> procedure OnTimerStar(Sender: TObject);begin  inc(star.y,
> 10);  if star.y+star.height>=scene.Height then star.y:=0;
>   Draw;end;

да так наверное лучше...

> наверное не компилируется...

да не запускается...


 
Германн ©   (2008-09-10 14:13) [13]


> novai   (10.09.08 14:10) [9]
>
> там я заводил конечно переменную   Star:Tstar;
>

Где там? Прямо в самом классе?


 
oldman ©   (2008-09-10 14:13) [14]


> brother ©   (10.09.08 14:12) [11]
> наверное не компилируется...


движужуяся звезда не движужуется...


 
novai   (2008-09-10 14:18) [15]

вот полный код

unit Unit1;

interface

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

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

 TScene= class(TBitmap)
   procedure DrawScene;
 end;

 TStar = class(TObject)
   timer:TTimer;
   x,y, width, height:integer;
   oldx, oldy:integer;
   constructor Create;
   destructor Destroy; override;
   procedure OnTimerStar(Sender: TObject);
   procedure SetTo(x,y:integer);
   procedure Draw ;
   procedure Move;
 end;

var
 Form1: TForm1;

 Scene:TScene;
 Star:Tstar;

implementation

{$R *.dfm}

procedure TScene.DrawScene;
begin
 form1.canvas.Draw(0,0, scene);
end;

constructor TStar.Create;
begin
 inherited Create;

 x:=0; y:=0;
 oldx:=x; oldy:=y;

 width:=10;
 height:=10;

 Timer:=TTimer.Create(nil);
 timer.Interval:=100;
 timer.Enabled:=true;
 timer.OnTimer:=OnTimerStar;
end;

Destructor TStar.Destroy;
begin
 timer.Enabled:=false;
 timer.Destroy;

 inherited Destroy;
end;

procedure OnTimerStar(Sender: TObject);
begin
 star.Move;
end;

procedure TStar.SetTo(x,y:integer);
begin
 star.x:=x;
 star.y:=y;
//  star.oldx:=x;
//  star.oldy:=y;
 draw;
end;

procedure TStar.Draw;
begin
 if (oldx<>x) or (oldy<>y) then
 begin
  PatBlt(scene.Canvas.Handle, oldx, oldy, Width, Height, WHITENESS);
  oldx:=x;
  oldy:=y;
 end;

 Scene.Canvas.Rectangle(x,y, x+width,y+height);
 Scene.DrawScene;
end;

procedure TStar.Move;
begin
  inc(star.y,10);
  if star.y+star.height>=scene.Height then star.y:=0;

  Draw;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
//  star.Draw;
//  canvas.Draw(0,0, scene);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Scene:=TScene.Create;
 scene.Width:=200  ;
 scene.Height:=200  ;

 Star:=Tstar.Create;
 star.SetTo(100,0);

 timer1.Enabled:=true;

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 Star.Destroy;
 scene.Destroy;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
 scene.DrawScene;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
//  FormPaint(Form1);
end;


 
{RASkov} ©   (2008-09-10 14:20) [16]

> procedure OnTimerStar(Sender: TObject);
> begin
> star.Move;
> end;

Почему так?


 
Anatoly Podgoretsky ©   (2008-09-10 14:22) [17]

> novai  (10.09.2008 14:05:02)  [2]

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


 
novai   (2008-09-10 14:23) [18]


> Почему так?

ой и правда... надо procedure TStar.OnTimerStar(Sender: TObject);

спасибо всем! Ну не пинайте новичка!


 
brother ©   (2008-09-10 14:24) [19]

> Ну не пинайте новичка!

мы не сильно ;)


 
Anatoly Podgoretsky ©   (2008-09-10 14:25) [20]

> novai  (10.09.2008 14:18:15)  [15]

Что не работает?
Не жди, что мы будет за тебя проверять код.


 
oldman ©   (2008-09-10 14:26) [21]


> brother ©   (10.09.08 14:24) [19]
> мы не сильно ;)


а мы еще не закончили :)


 
{RASkov} ©   (2008-09-10 14:31) [22]

> [18] novai   (10.09.08 14:23)
> Ну не пинайте новичка!

За код в [15] можно очень сильно испинать :)
Например за неграмотное использование глобальных переменных....
Да и вообще весь код и алгоритм и ООП и... написано не грамотно... Даже для новичка :)


 
{RASkov} ©   (2008-09-10 14:34) [23]

> Не жди, что мы будет за тебя проверять код.

Некоторые вещи видны не вооружонно(ы)м глазом, но для новичков может понадобится оружие - книга например :)


 
brother ©   (2008-09-10 14:36) [24]

> а мы еще не закончили :)

да мы еще и не начинали!)


 
{RASkov} ©   (2008-09-10 14:40) [25]

> да мы еще и не начинали!)

Да его разве теперь догонишь, он уже стартанул отсЕдава быстрее какого-то коллайдера...)


 
brother ©   (2008-09-10 14:42) [26]

> он уже стартанул отсЕдава быстрее какого-то коллайдера...)

ну хоть спасибо сказал)


 
Anatoly Podgoretsky ©   (2008-09-10 14:44) [27]

> brother  (10.09.2008 14:42:26)  [26]

Предусмотрительный.


 
brother ©   (2008-09-10 14:45) [28]

> Предусмотрительный.

не понял???


 
brother ©   (2008-09-10 14:50) [29]

> не понял???

а понял))))) все домой надо сваливать - заработатлся....



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.10.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.006 c
15-1220135516
Eraser
2008-08-31 02:31
2008.10.19
Системный микшер и виста + Delphi


2-1221136125
DJones
2008-09-11 16:28
2008.10.19
Использование многострочных hint в Дельфи


2-1220944731
Кирей
2008-09-09 11:18
2008.10.19
ошибка при работе с экселем OLE error 800A03EC


11-1194543607
Sinko
2007-11-08 20:40
2008.10.19
KOL CE + Lazarus +Иероглифы


15-1219820202
Denis__
2008-08-27 10:56
2008.10.19
МГУ ВМК Языки программирования





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский