Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bild fällt ... nicht (https://www.delphipraxis.net/103502-bild-faellt-nicht.html)

Poring 16. Nov 2007 15:16


Bild fällt ... nicht
 
Huhu,
ich möchte das Bild gerne immer schneller fallen lassen:
Delphi-Quellcode:
var
  Form1: TForm1;
  Fallen: real;
  Höhe: integer;
...
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Fallen:= 1;
with Image1 do
repeat
Höhe:= Image1.Top;
Fallen:= Fallen*1.1;
Image1.Top:=Image1.Top - Fallen;
until ( Image1.Top = Höhe - 250 );
end;
Nur ich bekomme dann die Fehlermeldung:
[Fehler] Unit1.pas(36): E2010 Inkompatible Typen: 'Integer' und 'Extended'

Was muss ich den dort machen :gruebel:

mfg

Luckie 16. Nov 2007 15:21

Re: Bild fällt ... nicht
 
Wenn du von einem Gnazzahltypen einen Fließkommadatentyp abziehst, ist das Ergebnis auch ein Fließkommadatentyp. Der Ganzzahldatentyp wird bei dieser Operation entsprechend erweitert. Die Eigenschaft Top benötigt aber einen Ganzzahldatentyp, da es keine Bruchteile von Pixel gibt. Du musst also aus deinem Fließkommadatentyp mit Delphi-Referenz durchsuchenRound oder Delphi-Referenz durchsuchenTrunc, je nachdem was besser passt, wieder einen Ganzzahldatentyp machen.

Apollonius 16. Nov 2007 15:22

Re: Bild fällt ... nicht
 
Eine Höhe ist eine Ganzzahl, Fallen eine Gleitkommazahl. Zum Umwandeln kannst du z.B. round() oder trunc() nehmen.
Aber mal ernsthaft: Genau das steht doch eigentlich in der Fehlermeldung. Wir nutzen hier doch kein C++. :gruebel:

Außerdem muss in die Schleife noch ein Application.ProcessMessages, sonst siehst du nichts.

Poring 16. Nov 2007 15:26

Re: Bild fällt ... nicht
 
Delphi-Quellcode:
round(Fallen);
so müsste es laut delphihelp sein:
Delphi-Quellcode:
For the last two cases, the result of calling the round() function is not the same as the result of adding 0.5 and then calling the floor() function because positive zero will be returned in such cases.

The following function call returns 3.

round(2.6)
The following function call returns 2.

round (2.4)
geht aber nicht:
[Fehler] Unit1.pas(36): E2014 Anweisung erforderlich, aber Ausdruck vom Typ 'Int64' gefunden

- Ich wusste nur nich ob sich die meldung auf Top oder auf Fallen bezieht ;)

EDIT:
ok richtig lesen muss man:
Delphi-Quellcode:
Fallen:=round(Fallen);
nun kommt jedoch trozdem die Fehlermeludng:
[Fehler] Unit1.pas(37): E2010 Inkompatible Typen: 'Integer' und 'Extended'
bei Image1.Top:=Image1.Top - Fallen; :gruebel:

RavenIV 16. Nov 2007 16:13

Re: Bild fällt ... nicht
 
Wenn Du richtig gelesen hättest, wäre Dir aufgefallen, dass Du es so machen sollst:
Delphi-Quellcode:
Image1.Top:=round(Image1.Top - Fallen);

Poring 16. Nov 2007 16:34

Re: Bild fällt ... nicht
 
Ahso danke.
Nur rennt das jetzt innerhalb von 2 sec ins unendliche ... will das eigentlich langsam fallen lassen. Gibts da ne möglichkeit?

DeddyH 16. Nov 2007 16:44

Re: Bild fällt ... nicht
 
Du benutzt doch einen Timer. Also entweder dessen Interval höher stellen oder den Faktor (1.1) verkleinern.

Poring 16. Nov 2007 16:50

Re: Bild fällt ... nicht
 
Sollte ja auch noch flüssig sein. Was mich wundert:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Fallen:= 1;
with Image1 do
repeat
Höhe:= Image1.Top;
Fallen:= Fallen*1.01;
Image1.Top:=round(Image1.Top + Fallen);
until ( Image1.Top = 50 );
end;
(Interval=2000)
Wenn es bei Top=50 bleibt es kurz stehen und dann rennt es ins unendliche nach unten. Warum? :(

DeddyH 16. Nov 2007 16:53

Re: Bild fällt ... nicht
 
Zitat:

Zitat von Poring
Delphi-Quellcode:
until ( Image1.Top = 50 );

Und was, wenn Image1.Top > 50? ;)

Sergej 16. Nov 2007 16:57

Re: Bild fällt ... nicht
 
Zitat:

Zitat von Poring
Wenn es bei Top=50 bleibt es kurz stehen und dann rennt es ins unendliche nach unten. Warum? :(

Schau die mal den Unterschied zwischen einer while-Schleife und deiner repeat-until-Schleife an. Vielleicht kommst du selbst auf die Lösung ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:38 Uhr.
Seite 1 von 3  1 23      

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