Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Image bewegen (https://www.delphipraxis.net/129644-image-bewegen.html)

stylerkorn 23. Feb 2009 08:32


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]

Bernhard Geyer 23. Feb 2009 08:34

Re: Image bewegen
 
sleep(1); <- Hiermit wird der ganze Prozess lahm gelegt. Also nix mit neuzeichnen.

_frank_ 23. Feb 2009 12:33

Re: Image bewegen
 
versuchs mal so:

Delphi-Quellcode:
  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;
HTH Frank

Neutral General 23. Feb 2009 13:45

Re: Image bewegen
 
Zitat:

Zitat von _frank_
versuchs mal so:

Delphi-Quellcode:
  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;
HTH Frank

100 dürfte zu lang sein :mrgreen:

400*100 = 40000 = 40 Sekunden für 400 Pixel :stupid:

himitsu 23. Feb 2009 13:56

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.

Cyf 23. Feb 2009 14:26

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.

Noedel 23. Feb 2009 14:33

Re: Image bewegen
 
Zitat:

Zitat von himitsu
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.

schon rein technisch/optisch geht das nich :D
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...

himitsu 23. Feb 2009 14:55

Re: Image bewegen
 
Sleep arbeitet intern mit GetTickCount und das hat keine Auflösung im Millisekundenbereich (meißt nur so 8ms-intervall)

_frank_ 24. Feb 2009 02:49

Re: Image bewegen
 
Zitat:

Zitat von Neutral General
100 dürfte zu lang sein :mrgreen:
400*100 = 40000 = 40 Sekunden für 400 Pixel :stupid:

ist schon richtig, aber war ja nur ein Beispiel
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:
procedure TMyForm.Timer1Timer(...);
begin
  if image.left>=400 then
    timer1.enabled:=false
  else
  begin
    image1.Left:=image1.left+1;
  end;
end;
Gruß Frank


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