![]() |
Bild fällt ... nicht
Huhu,
ich möchte das Bild gerne immer schneller fallen lassen:
Delphi-Quellcode:
Nur ich bekomme dann die Fehlermeldung:
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; [Fehler] Unit1.pas(36): E2010 Inkompatible Typen: 'Integer' und 'Extended' Was muss ich den dort machen :gruebel: mfg |
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
![]() ![]() |
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. |
Re: Bild fällt ... nicht
Delphi-Quellcode:
so müsste es laut delphihelp sein:
round(Fallen);
Delphi-Quellcode:
geht aber nicht:
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) [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:
nun kommt jedoch trozdem die Fehlermeludng:
Fallen:=round(Fallen);
[Fehler] Unit1.pas(37): E2010 Inkompatible Typen: 'Integer' und 'Extended' bei Image1.Top:=Image1.Top - Fallen; :gruebel: |
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);
|
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? |
Re: Bild fällt ... nicht
Du benutzt doch einen Timer. Also entweder dessen Interval höher stellen oder den Faktor (1.1) verkleinern.
|
Re: Bild fällt ... nicht
Sollte ja auch noch flüssig sein. Was mich wundert:
Delphi-Quellcode:
(Interval=2000)
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; Wenn es bei Top=50 bleibt es kurz stehen und dann rennt es ins unendliche nach unten. Warum? :( |
Re: Bild fällt ... nicht
Zitat:
|
Re: Bild fällt ... nicht
Zitat:
|
DP-Maintenance
Dieses Thema wurde von "Matze" von "Sonstige Fragen zu Delphi" nach "Multimedia" verschoben.
Das passt hier eigentlich besser hin. |
Re: Bild fällt ... nicht
Delphi-Quellcode:
So?
while Image1.Top<200 do begin
Höhe:= Image1.Top; Fallen:= Fallen*1.01; Image1.Top:=round(Image1.Top + Fallen); Application.ProcessMessages; Naja ok nun hält es wenigstens an ^^ Jedoch sobald es sichtbar anfängt runter zu gehen, ist es slebst bei einem Interval von 5000 innerhlab von paar Millisekunden gleich unten :( |
Re: Bild fällt ... nicht
Moin Poring,
ich denke mal, dass es einfach keine gute Idee ist, dass Du das gesamte Fallen in einer Schleife abarbeitest. Es würde wahrscheinlich besser funktionieren, wenn Du das Image bei jedem Timeraufruf ein Stückchen fallen lässt. |
Re: Bild fällt ... nicht
|
Re: Bild fällt ... nicht
Darf ich fragen, warum du eine Schleife in einen Timer setzt? Wenn die Schleife bereits beim ersten Timer-Aufruf durchlaufen wird, ist Image1.Top natürlich schon größer oder gleich 200. Dann passiert bei weiteren Timer-Aufrufen nichts mehr. Nimm also die Schleife raus.
|
Re: Bild fällt ... nicht
Es sollte ja nicht konstant fallen, sonder auch schneller werden ... aber eben nicht soo! schnell. Sollte vll schon so 5-6 Sekunden dauern von oben bis unten, nur eben immer shcneller werdend.
Delphi-Quellcode:
Interval=500
if Image1.Top<200 then begin
Höhe:= Image1.Top; Fallen:= Fallen*1.1; Image1.Top:=round(Image1.Top + Fallen); Application.ProcessMessages; Ja nun geht das besser, nun ruckelt es aber :gruebel: |
Re: Bild fällt ... nicht
Also die 1,1 und das Timer-Intervall verringern.
|
Re: Bild fällt ... nicht
:-D Nu flackerts :spin:
|
Re: Bild fällt ... nicht
Ist DoubleBuffered gesetzt?
|
Re: Bild fällt ... nicht
:coder2: Nein, wie mache ich das denn? :/
|
Re: Bild fällt ... nicht
Im OnShow (oder OnCreate) die Zeile
Delphi-Quellcode:
einfügen.
DoubleBuffered := true;
|
Re: Bild fällt ... nicht
Danke :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz