AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi TImage Top stimmt nicht...
Thema durchsuchen
Ansicht
Themen-Optionen

TImage Top stimmt nicht...

Ein Thema von TitanNano · begonnen am 15. Nov 2011 · letzter Beitrag vom 16. Nov 2011
Antwort Antwort
TitanNano
(Gast)

n/a Beiträge
 
#1

TImage Top stimmt nicht...

  Alt 15. Nov 2011, 16:39
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
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TImage Top stimmt nicht...

  Alt 15. Nov 2011, 17:39
Image1.Top wird vermutlich stimmen, aber setz mal Image1.Picture.Bitmap.Width bzw. Height := Image1.Width bzw. Height.

Geändert von Bjoerk (15. Nov 2011 um 17:41 Uhr)
  Mit Zitat antworten Zitat
TitanNano
(Gast)

n/a Beiträge
 
#3

AW: TImage Top stimmt nicht...

  Alt 15. Nov 2011, 17:52
Delphi-Quellcode:
layer.Height:= 170;
layer.Picture.Bitmap.Height:= layer.Height;
layer.Width:= 100;
layer.Picture.Bitmap.Width:= layer.Width;
bringt nichts
  Mit Zitat antworten Zitat
TitanNano
(Gast)

n/a Beiträge
 
#4

AW: TImage Top stimmt nicht...

  Alt 16. Nov 2011, 11:04
ich hab noch ein kleines Problem:
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??
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#5

AW: TImage Top stimmt nicht...

  Alt 16. Nov 2011, 11:07
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.
Lars
  Mit Zitat antworten Zitat
TitanNano
(Gast)

n/a Beiträge
 
#6

AW: TImage Top stimmt nicht...

  Alt 16. Nov 2011, 11:27
danke dir klappt jetzt super
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 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