![]() |
Image bewegen
Hallo,
Ich möchte das ein Image von links nach rechts einer form wandert udn hab dies hiermait versucht.
Delphi-Quellcode:
begin
for n:=1 to 400 DO begin Image1.left:=n; sleep(1); end; end; leider springt er imemr direkt 400 Punkte nach rechts. :( Wollte mal fragen ob ich das ändern kann oder ob ich anders herangehen soll. [edit=mkinzler]Delphi-Tags eingefügt, bitte in Zukunft verwenden Mfg, mkinzler[/edit] |
Re: Image bewegen
sleep(1); <- Hiermit wird der ganze Prozess lahm gelegt. Also nix mit neuzeichnen.
|
Re: Image bewegen
versuchs mal so:
Delphi-Quellcode:
HTH Frank
for n:=1 to 400 DO
begin Image1.left:=n; application.processmessages;//Nachrichtenschlange abarbeiten (neuzeichnen) sleep(100); //millisekunden :) 1 dürfte zu kurz sein end; |
Re: Image bewegen
Zitat:
400*100 = 40000 = 40 Sekunden für 400 Pixel :stupid: |
Re: Image bewegen
1 gibt es eh nicht ... das würde sich dann vermutlich so bei 4-5 ms einpendeln.
wie wär's mit 10? Was willst du denn bewegen? Womöglich ließe es sich ja auch noch anders/besser lösen. |
Re: Image bewegen
Am elegantesten wäre hier wohl die Verwendung von einem Timer (da Threads und VCL sone Sache sind). Außerdem solltest du, falls du das Bild nur zum Anzeigen brauchst (keine Events wie Anklicken, Drag oder was auch immer), überlegen, ob du es nicht direkt auf die Form zeichnen kannst, statt ein Image zu nehmen.
|
Re: Image bewegen
Zitat:
1) mein Bildschirm hat ne Reaktionszeit von 5 ms :) 2) und wenn ich mich nich irre, macht das Auge eh bloß 26 Bilder * Sek^-1, also alle 38ms... |
Re: Image bewegen
Sleep arbeitet intern mit GetTickCount und das hat keine Auflösung im Millisekundenbereich (meißt nur so 8ms-intervall)
|
Re: Image bewegen
Zitat:
Der Hauptgedanke meines Wertes war, dass er seine Bewegung auch sieht, wie lange das dauert, muss er halt variieren :) ich würde auch kein Image auf dem Form hin und her schieben, aber das ist ne andere Sache. Für Bewegungen gibts offscreen-Bitmaps, die auf ein Canvas geblittet werden oder bei umfangreicheren Geschichten Hardware-gestützte Rendering-Methoden (DirectX, OpenGL). alternativ lässt sich das ganze auch mit einem TTimer machen, dann kann man sich das ProcessMessages auch sparen. mal fix ausm Hut zusammengetippelt :)
Delphi-Quellcode:
Gruß Frank
procedure TMyForm.Timer1Timer(...);
begin if image.left>=400 then timer1.enabled:=false else begin image1.Left:=image1.left+1; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 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 by Thomas Breitkreuz