Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekte "schnell" bewegen (https://www.delphipraxis.net/159239-objekte-schnell-bewegen.html)

Delphi-Narr 19. Mär 2011 11:39

Delphi-Version: 6

Objekte "schnell" bewegen
 
Hallo,

ich bin dabei mir ein Programm mit mehreren, den Bildschirm füllenden Komponenten zu schreiben.
Um zwischen diesen Komponenten umzuschalten, möchte ich keine verschiedenen Formulare benutzen, sondern eine Art "Slice-Effekt" verwenden.

Dafür verwende ich im Moment einfach eine Schleife (Zum Testen eine For-Schleife, später wirds wohl eine while-Schleife).

Delphi-Quellcode:
for i:=0 to Screen.width do
begin
     Objekt1.left:=Objekt1.left-1
     Objekt2.left:=Objekt2.left-1;
     Objekt1.refresh;
     Objekt2.refresh;
end;
Ich habe es auch mal mit Application.processmessages versucht, doch leider auch ohne Besserung, denn die Bewegung soll relativ schnell sein (knapp 1 Sekunde), ist aber seeeehr langsam.

Ich habe auch mal 5 pixel Schritte probiert, es geht zwar schneller, ruckelt aber...

Wie kann ich das ändern?

Viele Grüße!

alfold 19. Mär 2011 11:52

AW: Objekte "schnell" bewegen
 
Zitat:

Zitat von Delphi-Narr (Beitrag 1089599)
...
ich bin dabei mir ein Programm mit mehreren, den Bildschirm füllenden Komponenten zu schreiben.
Ich habe es auch mal mit Application.processmessages versucht, doch leider auch ohne Besserung, denn die Bewegung soll relativ schnell sein (knapp 1 Sekunde), ist aber seeeehr langsam.

Ich habe auch mal 5 pixel Schritte probiert, es geht zwar schneller, ruckelt aber...

Wie kann ich das ändern?

Viele Grüße!

Hast Du mal überlegt, bei einer Auflösung von H=1024,
nun von 0 to 1024 ein Objekt bewegen und neuzeichen, bleibt nun mal 1024durchläufe plus die Zeit des neuzeichnen. Wie schnell muss da ein Prozessor sein der das in < 1 sek macht :gruebel:
Ohne auf Direktx oder ander GEngine zu zugreifen dürfte dies wohl nicht gehen.

alfold

mkinzler 19. Mär 2011 11:55

AW: Objekte "schnell" bewegen
 
Vielleicht, wenn man nicht die Objekte selbst, sondern nur ein Abbild deren bewegt

Delphi-Narr 19. Mär 2011 12:02

AW: Objekte "schnell" bewegen
 
Hallo,
danke für die schnelle Antwort.
Natürlich ist das ziemlich viel für eine Sekunde. Aber 20 Sekunden find ich ist auch etwas viel...
Außerdem liegt die Prozessorauslastung nicht bei 100%, sondern zwischen 50 und 70%.

Ich habe mir mal vor einiger Zeit zum Testen hier einen Code runtergeladen, wo mehrere Kugeln kollidieren und abprallen (Masse und Winkel berücksichtigt). Das läuft mit bis zu 100 Kugeln auch sehr flüssig...

Ich guck mal, wie das mit DirectX funktionieren könnte.

Viele Grüße!

@mkinzler: Könntest du das etwas näher beschreiben, bitte?

Bummi 19. Mär 2011 12:52

AW: Objekte "schnell" bewegen
 
Was sind das für Objekte?
Wenn es nur darum geht Beispielsweise mehrere PNG's zu animieren:
http://www.delphipraxis.net/156716-g...-und-zoom.html

Delphi-Narr 19. Mär 2011 12:59

AW: Objekte "schnell" bewegen
 
Bisher ist es ein TImage (wird später ersetzt durch eine eigene Komponente, Tochterkomponente von TImage) und eine TLMDListBox.

Viele Grüße!

Edit:
Ich habe mal ein bisschen rumprobiert:
Wenn ich das Image mit gedrückter Maustaste verschieben lasse, geht das schnell und relativ flüssig...

Vielleicht noch zum allgemeinen Verständnis:
Das soll sowas wie horizontales Scrollen sein...

Bummi 19. Mär 2011 13:23

AW: Objekte "schnell" bewegen
 
wenn Du eh eine eigene Komponente erstellen willst, findest Du in o.G. Link vielleicht die eine oder andere Anregung (ich würde von TGraphicControl ableiten).

Delphi-Narr 19. Mär 2011 13:38

AW: Objekte "schnell" bewegen
 
Ich möchte ja nur eine von mehreren erstellen...

Helmi 19. Mär 2011 13:46

AW: Objekte "schnell" bewegen
 
Hallo,

schau dir doch mal AnimateWindow an.
Habs mit einem Memo getestet - geht wunderbar.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  AnimateWindow(Memo1.Handle, 200, AW_BLEND or AW_HIDE);
end;
[Edit]
Mist - geht doch nicht!
Wirkt wie ein Memo1.Hide - egal welche Zeit angegeben wird.

Delphi-Narr 19. Mär 2011 15:00

AW: Objekte "schnell" bewegen
 
Hallo,

ja ich habs auch ausprobiert. Ich möchte es aber auch nicht ausblenden, sondern verschieben...
Also eher AW_SLIDE?!
Problem 2:
TImage hat kein Handle...

Viele Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 Uhr.
Seite 1 von 4  1 23     Letzte »    

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