Announcement

Collapse
No announcement yet.

Image bewegen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Image bewegen

    hallo,<br>
    ich möchte ein Bild über den Bildschirm bewegen.Wenn ich nur ein TImage bewege,flackert es,lege ich ein Panel drunter,läuft es reibungslos.<br>
    Ich benutze Delphi4.<br>
    Hab gehört in Delphi5 gibs ne Property DoubleBuffered.<br>
    Gibs irgendwo Infos wie man Doublebuffering realisiert,und wie ist das mit dem Panel zu erklären?<br>
    Gruß und danke,<br>
    Marko Bischof

  • #2
    Hi

    Panel1.DoubleBuffered := True, ist NICHT published sondern nur public deklariert, muß also im Quelltext geändert werden. Diese Eigenschaft erzwingt das ALLE GraphicControls eines Panels in der Zeichenroutine des Panels erstmal in eine Bitmap gezeichnet werden und diese Bitmap dan in einem Rutsch in das Panel gezeichnet wird. Das ist flickerfree ! Aber ein einzelnes TGraphicControl wie TImage als EINZIGSTES Controls des panels ist im DoubelBuffered Mode sinnlos. In diesem Fall erzielst Du OHNE DoubleBuffering einen besseren Effect !

    Vollständig gepuffert können auch NUR von TGraphicControl abgeleitete Controls, also KEINE von TWinControl abgeleitete Klassen wie TEdit, TButton, TBitBtn, TListBox, TComboBox, TStaticText etc. Ein TImage, TLabel, TPaintBox, TShape, TSpeedButton wiederum sind TGraphicControls.

    Kurz: DoubleBuffered hat nur Sinn wenn mehr als 1 TGraphicControl im Panel liegen, ODER das benutzte TGraphicControl ein schlecht implementiertes Control ist, also ein "flicker-Control" )

    Gruß Hage

    Comment


    • #3
      Hallo Hagen, Marko,

      <p>Es gibt verschiedene Gründe, warum es flackert. Ein Grund ist, daß die Zeichenvorgänge sichtbar werden, dagegen hilft DoubleBuffered. DoubleBuffered steht im Gegensatz zu deinen Aussagen nur in TWinControl zur Verfügung. Dort wird es bei der Message WM_PAINT eingesetzt.<br>Da diese für das Zeichnen der auf dem WinControl liegenden TGraphicControl-Komponenten zuständig ist wird deine Ausage dann wieder richtig :-).</p>
      <p>Eine andere Form von Flackern entsteht dann, wenn vor jedem Zeichenvorgang erst der Hintergrund der TWinControl-Komponente gelöscht wird. Diesen Effekt kann man nicht mit DoubleBuffered beseitigen, da dieses direkt unter Umgehung von WM_PAINT stattfindet. Hier hilft nur das Verhindern des Hintergrundlöschens.</p>
      <p>Wenn es nur um die Anzeige einer Bitmap an einer ganz bestimmten Stelle geht (vermutlich Animation/Spiel) und in der betroffenen Umgebung keine anderen Controls rumliegen, die überdeckt werden, dann würde ich empfehlen ganz auf das TImage zu verzichten und mit einem TBitmap und einer speziellen Paintbox zu arbeiten. Speziell deshalb, weil der Rahmen um das Bild herum auch gelöscht werden muß und es letztlich einfacher ist, alles komplett zu löschen und dann die Bitmap neu auszugeben (z.B. mit Draw), anstatt die einzelnen Bereiche drumherum zu löschen. Es gibt es zwei spezielle Paintboxen, die eine findet man auf Torry (TFlickerFree PaintBox zu finden unter http://www.torry.ru/graphicsother.htm ), sie verhindert das Hintergrundlöschen und enthält gleichzeitig eine Simulation des DoubleBuffering. Die andere Komponente findet sich auf meiner Homepage (http://home.t-online.de/home/PeterJHaas/units.htm) hier muß das DoubleBuffering (ab Delphi 4) aber erst eingeschaltet werden.</p>
      <p>MfG Peter</p&gt

      Comment


      • #4
        Hi Peter

        Richtig erklärt, das selbe meinte ich auch.
        Das DoubleBuffered NUR in TWInControl und deren Derivate verfügbar ist, ist auch logisch, da nur diese Controls ECHTE Controls darstellen. (also ein reguläres Windows-Fensterhandle besitzen).

        Gruß Hage

        Comment

        Working...
        X