AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Grafiken performant über Form bewegen
Thema durchsuchen
Ansicht
Themen-Optionen

Grafiken performant über Form bewegen

Ein Thema von CalganX · begonnen am 24. Dez 2004 · letzter Beitrag vom 26. Dez 2004
Antwort Antwort
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

Grafiken performant über Form bewegen

  Alt 24. Dez 2004, 21:12
Hi,
ich würde gerne vom Programm gesteuert einige Dinge über das Formular bewegen lassen. Soweit funktioniert das auch, allerdings ruckelt das Programm wie sonst was und frisst ordentlich CPU-Leistung.
Im Moment mache ich das mit einfachen TImages, die ich über das Formular bewege. Aber es flackert dabei extrem und frisst halt Leistung. Kann mir jemand kurz erklären, wie ich das Flackern wegbekomme (danke, aber DoubleBuffered kenne ich schon, das auf true setzen bewirkt erstmal nichts) und wie das etwas performanter (sprich mit weniger Leistungs-Fraß) geht?

Chris
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Grafiken performant über Form bewegen

  Alt 25. Dez 2004, 02:01
Ich würde da keine Images nehmen, sondern einzelne Bitmaps, die du dann entsprechend verschoben auf ein Hintergrundbitmap zeichnest, und dieses dann OnPaint des Formulars auf dessen Canvas Zeichnest (BitBlt z.B.). Dann sollte es a) nicht flimmern, und b) evtl. etwas performanter sein.
Und noch was, was Punkt b) betrifft: Graphics32-Lib 8)
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Grafiken performant über Form bewegen

  Alt 25. Dez 2004, 13:09
Hi,
die genannte Bibliothek ist schonmal genau das, was ich suche.
Aber kannst du deine Erklärung vielleicht mit ein wenig Source erläutern, irgendwie bin ich da noch nicht ganz durchgestiegen, wie du das meinst.

Chris
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Grafiken performant über Form bewegen

  Alt 25. Dez 2004, 15:51
Im Grunde einfach alles was sich auf dem Formular bewegen soll im Vorfeld auf einem Bitmap zusammenkopieren, und das dann komplett auf's Form zeichnen.
Mal etwas Pseudocode (ich nehme an, dass die zu bewegenden Teile einzeln in Bitmaps vorliegen, und die Graphics32 mitspielt ):
Delphi-Quellcode:
uses
  ..., GR32, ...;
.
.
.
var
  Sprites: array of TBitmap32; // mal angenommen für die zu bewegenden Teile...
.
.
.
procedure TForm1.OnPaint(...);
var
  BackBMP: TBitmap32;
begin
  BackBMP := TBitmap32.Create;
  BackBMP.SetSize(Form1.ClientWidth, Form1.ClientHeight);
  BackBMP.Clear(Color32(Form1.Color));

  Sprites[0].DrawTo(BackBMP, PosX1, PosY1);
  Sprites[1].DrawTo(BackBMP, PosX2, PosY2);
  .
  .

  BackBMP.DrawTo(Form1.Canvas.Handle);
  BackBMP.Free;
end;
Noch schneller dürfte es sein, wenn das BackBMP Member der Formklasse ist, so dass du es nicht jedes Mal neu instanziieren musst, sondern nur "Clear"-en.

Hoffe das hilft!
Grüzli,
Fabian


\\edit: Was da u.U. noch viel besser wäre, wäre ein TImage32 im Hintergrund auf deiner Form, und dann mit der "Layers"-Eigenschaft zu arbeiten. Das ist im ersten Moment etwas ungewohnt, aber die Hilfe zur G32 ist da echt nicht übel .
Das dürfte dann nochmals viiiiel Schneller sein, und im Endeffekt auch komfortabler!

\\edit2: @Chistian: Jupp genau das meinte ich mit dem ersten Edit 8)
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Grafiken performant über Form bewegen

  Alt 25. Dez 2004, 15:52
Moin Chris,

bei der Graphics 32 ist doch eine Sprite-Demo dabei.
Schau Dir die doch mal an.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Grafiken performant über Form bewegen

  Alt 25. Dez 2004, 16:30
Hi,
klasse.
Die Demos habe ich mir angesehen, aber bei der Sprites-Demo hat wohl mein Gehirn ausgesetzt. Hängt vielleicht mit dem vielen ... Tee und O-Saft zusammen.

Danke euch beiden, werde mir das mal zu Gemüte führen,
Chris
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#7

Re: Grafiken performant über Form bewegen

  Alt 26. Dez 2004, 01:04
Ich hab das mal ganz einfach mit der BitBlt-Funktion der Winapi gelöst. Die ist sehr schnell, und sehr einfach anzuwenden.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Grafiken performant über Form bewegen

  Alt 26. Dez 2004, 11:20
Hi,
naja. Ich mache das jetzt mit der G32-Bibliothek. Das andere sieht mir zu anstregend aus. *g*

Ich habe mir jetzt die Sprites-Demo angesehen und bei das genaus gemacht, weil in der Demo, allerdings ist die CPU-Belastung bei 100 Layern bei gut 100%. Und angesichts der größe der einzelnen Layer ist das noch relativ wenig.
Bei der Sprites-Demo ist das aber genauso. Ich meine: zwar wird nichts anderes laufen, während mein Programm läuft, aber das kann schon einige Stunden laufen. Stört das nicht, wenn die CPU dann die ganze Zeit so ausgelastet ist?

Chris
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Grafiken performant über Form bewegen

  Alt 26. Dez 2004, 12:32
Die sind eigentlich so gebaut, dass sie das locker flockig wegstecken. Wäre ja auch nen Dingen wenn nicht ^^
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 Uhr.
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