Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Geschwindigkeit einer Komponente, Eure Erfahrungen

  Alt 17. Feb 2015, 14:53
Der Ansatz: Hintergrund in separatem Bitmap vorhalten und bem Neuzeichnen diesen erst auf das Ausgabebild malen und danach die veränderlichen Daten zeichnen absolut richtig. Was es dabei aber unbedingt zu vermeiden gilt, ist die Verwendung von TCanvas.Pixels[]. Das ist nämlich grotten lahm. Kopieren von Bildern mit BitBlt() dagegen ist super flott, und die Zeichenroutinen, die TCanvas sonst noch bereitstellt sind auch in der Regel ausreichend schnell.
Und wenn alle Stricke reissen, bleibt auch noch die Nutzung der Graphics32 Lib, die insgesamt schneller ist als TBitmap und allem was da so zu gehört.

Mal so Pseudocodig:
Delphi-Quellcode:
// Bei Programmstart:
  DrawBackgroundImageTo(BackgroundBitmap);

// Im OnPaint:
  BitBlt(BackgroundBitmap.Canvas.Handle, DisplayBitmap.Canvas.Handle, SRCCOPY);
  DrawDynamicDataTo(DisplayBitmap);
  BitBlt(DisplayBitmap.Canvas.Handle, AnzeigePaintbox.Canvas.Handle, SRCCOPY);
Und damit das Neuzeichnen immer bei Eintreffen neuer Daten gemacht wird, musst du nur noch im Handler für den Empfang am Ende ein DeinAnzeigeFormular.Invalidate; machen (Wodurch OnPaint automatisch ausgelöst wird.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat