Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TImage Top stimmt nicht... (https://www.delphipraxis.net/164495-timage-top-stimmt-nicht.html)

TitanNano 15. Nov 2011 16:39

TImage Top stimmt nicht...
 
Hallo,

Ich habe diese kleine Funktion:
Delphi-Quellcode:
procedure TChar.walkTimerRun(Sender :TObject);
begin
  if(self.walkPos.X < self.finalPos.X) and not(self.X = 'r')then
  begin
    self.walkPos.X:= self.walkPos.X+4;
    self.layer.Left:= self.walkPos.X;
    TCObjectControler.walk_rigth(self);
    self.X:= 'l';
    end else if(self.walkPos.X > self.finalPos.X) and not(self.X = 'l')then
    begin
      self.walkPos.X:= self.walkPos.X-4;
      self.layer.Left:= self.walkPos.X;
      TCObjectControler.walk_left(self);
      self.X:= 'r';
      end else if(self.walkPos.Y < self.finalPos.Y) and not(self.Y = 'u') then
      begin
        self.walkPos.Y:= self.walkPos.Y+4;
        self.layer.Top:= self.walkPos.Y;
        TCObjectControler.walk_down(self);
        self.Y:= 'd';
        end else if(self.walkPos.Y > self.finalPos.Y) and not(self.Y = 'd') then
        begin
          self.walkPos.Y:= self.walkPos.Y-4;
          self.layer.Top:= self.walkPos.Y;
          TCObjectControler.walk_up(self);
          self.Y:= 'u';
          end else
          begin
            self.walkTimer.Enabled:= false;
            showmessage(IntToStr(self.layer.Top)+' == '+IntToStr(self.finalPos.Y));
            self.walkTimer.Enabled:= false;
            self.layer.Picture.Bitmap.Assign(nil);
            self.stand.GetBitmap(0, self.layer.Picture.Bitmap);
            self.Y:= '';
            self.X:= '';
            end;
  end;
Also, ich bewege das Bild erst nach rechts oder links und dann nach oben oder nach unten bis es die gewünschte Position erreicht. Die X Koordinaten stimmen auch immer, aber es erreicht nie ganz die Y Koordinate. Das heißt, die Message Box am ende gibt z.b. aus:

405 == 400

also sollte das Bild ja sogar ein bisschen drüber hinaus "fahren" aber sie bleibt immer ca. 20 Pixel vorher stehen :-(
Das Bild ist auf einem Pannel:
Delphi-Quellcode:
tom:= TChar.Create(Form1);
tom.layer.Parent:= Form1.haus;
Die Create Funktion:
Delphi-Quellcode:
constructor Tchar.Create(AOwner: TComponent);
Begin
Inherited Create(AOwner);
//layer
layer:= TImage.Create(AOwner);
layer.Height:= 170;
layer.Width:= 100;
layer.Stretch:= true;
layer.Transparent:= false;
//stand
stand:= TImageList.Create(AOwner);
//walkLeft
walkLeft:= TImageList.Create(AOwner);
//walkRight
walkRigth:= TImageList.Create(AOwner);
//walkUP
walkUp:= TImageList.Create(AOwner);
//walkDown
walkDown:= TImageList.Create(AOwner);
//walkTimer
walkTimer:= TTimer.Create(AOwner);
walkTimer.OnTimer:= walkTimerRun;
walkTimer.Enabled:= false;
walkTimer.Interval:= 100;
//standTimer
standTimer:= TTimer.Create(AOwner);
standTimer.Enabled:= false;
end;
Die Koordinaten bekommen ich von der Mausposition:
Delphi-Quellcode:
self.walkTo(tom, Sender.ScreenToClient(Mouse.CursorPos).X, Sender.ScreenToClient(Mouse.CursorPos).X);
 
procedure TObjectControl.walkTo(objekt : TChar; posX, posY : integer);
begin
  objekt.walkPos.X:= objekt.layer.Left;
  objekt.walkPos.Y:= objekt.layer.Top;
  objekt.finalPos.X:= posX;
  objekt.finalPos.Y:= posY;
  objekt.walkTimer.Enabled:= true;
end;
Hat jemand eine Ahnung was ich falsch gemacht habe oder wieso das so ist??

mfg. TitanNano

Bjoerk 15. Nov 2011 17:39

AW: TImage Top stimmt nicht...
 
Image1.Top wird vermutlich stimmen, aber setz mal Image1.Picture.Bitmap.Width bzw. Height := Image1.Width bzw. Height.

TitanNano 15. Nov 2011 17:52

AW: TImage Top stimmt nicht...
 
Delphi-Quellcode:
layer.Height:= 170;
layer.Picture.Bitmap.Height:= layer.Height;
layer.Width:= 100;
layer.Picture.Bitmap.Width:= layer.Width;
bringt nichts :-(

TitanNano 16. Nov 2011 11:04

AW: TImage Top stimmt nicht...
 
ich hab noch ein kleines Problem:
Delphi-Quellcode:
objekt.finalPos.X:= pos.X-(objekt.layer.Width/2);
er meckert immer:

[Fehler] objectControler.pas(137): E2010 Inkompatible Typen: 'Integer' und 'Extended'

wie löse ich das??

daywalker9 16. Nov 2011 11:07

AW: TImage Top stimmt nicht...
 
X kann nur Integer sein und bei einer Disivion können ja auch Kommazahlen rauskommen. Du musst um den Aufruf der Disivion Delphi-Referenz durchsuchenTrunc aufrufen.

TitanNano 16. Nov 2011 11:27

AW: TImage Top stimmt nicht...
 
danke dir klappt jetzt super :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz