<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Canvas ohne flimmern...]]></title><description><![CDATA[<p>Hi!<br />
Wollte mit folgendem Code das Flimmern entfernen indem ich das Bild zeichne:</p>
<pre><code>void __fastcall TMain::Shuttlebewegung(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
Graphics::TBitmap *Shuttle = new Graphics::TBitmap;
Shuttle-&gt;LoadFromFile(&quot;.\\Bilder\\Shuttle.bmp&quot;);

Shuttle-&gt;TransparentColor=clBlack;
Shuttle-&gt;Transparent=true;

Image1-&gt;Canvas-&gt;Draw(X,Y,Shuttle);
}
</code></pre>
<p>Das Flimmern ist weg, nur lässt die Canvas Funktion das vorherige Bild immer stehen. Das will ich vermeiden. Habe es schon mit folgendem Code ausprobiert dieses Problem zu beheben:</p>
<pre><code>Image1-&gt;Picture = NULL;
Image1-&gt;Canvas-&gt;Draw(X,Y,Shuttle);
</code></pre>
<p>Nur habe ich dann wieder ein Flimmern.<br />
Wie kann ich das beheben?</p>
<p>MfG<br />
Andi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/93888/canvas-ohne-flimmern</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 15:55:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/93888.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 03 Dec 2004 17:34:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Canvas ohne flimmern... on Fri, 03 Dec 2004 17:34:48 GMT]]></title><description><![CDATA[<p>Hi!<br />
Wollte mit folgendem Code das Flimmern entfernen indem ich das Bild zeichne:</p>
<pre><code>void __fastcall TMain::Shuttlebewegung(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
Graphics::TBitmap *Shuttle = new Graphics::TBitmap;
Shuttle-&gt;LoadFromFile(&quot;.\\Bilder\\Shuttle.bmp&quot;);

Shuttle-&gt;TransparentColor=clBlack;
Shuttle-&gt;Transparent=true;

Image1-&gt;Canvas-&gt;Draw(X,Y,Shuttle);
}
</code></pre>
<p>Das Flimmern ist weg, nur lässt die Canvas Funktion das vorherige Bild immer stehen. Das will ich vermeiden. Habe es schon mit folgendem Code ausprobiert dieses Problem zu beheben:</p>
<pre><code>Image1-&gt;Picture = NULL;
Image1-&gt;Canvas-&gt;Draw(X,Y,Shuttle);
</code></pre>
<p>Nur habe ich dann wieder ein Flimmern.<br />
Wie kann ich das beheben?</p>
<p>MfG<br />
Andi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/665356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/665356</guid><dc:creator><![CDATA[neobanz.]]></dc:creator><pubDate>Fri, 03 Dec 2004 17:34:48 GMT</pubDate></item><item><title><![CDATA[Reply to Canvas ohne flimmern... on Fri, 03 Dec 2004 17:43:22 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>ich verstehe dein Programm so, das du ein Hintergrund hast, über den du ein kleines Sprite (Shuttle) bewegen läßt.<br />
Ich denke dein Problem ist einfach, das ganze neu laden, überzeichnen und neu zeichnen zu lange dauert, als das eine flüssige Bewegung rauskommt.<br />
Vielleicht hilft es ja wenn du so vorgehst:<br />
-Initialisierung : Hintergrund und alle Sprites in einzelne Bitmaps laden, die Elemente des Forms sind, desweitern ein Buffer-Bitmap von der Größe des Hintergrunds<br />
-Neues Bild erstellen : Du kopierst den Inhalt des Hintergrunds in Buffer, dann alle Sprites an die aktuelle Position in den Buffer, zum Schluß Hintergrund in Canvas des Forms kopieren<br />
-Schließen : alle eigenen Bitmaps löschen</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/665367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/665367</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 03 Dec 2004 17:43:22 GMT</pubDate></item><item><title><![CDATA[Reply to Canvas ohne flimmern... on Fri, 03 Dec 2004 18:17:48 GMT]]></title><description><![CDATA[<p>Sorry aber ich verstehe dich nicht ganz. Ich habe jetzt die Bilder am Anfang eingelesen:</p>
<pre><code>//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop

#include &quot;Quelltext.h&quot;
//==============================================================================
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;

Graphics::TBitmap *Shuttle = new Graphics::TBitmap;
Graphics::TBitmap *Background = new Graphics::TBitmap;

TMain *Main;
//==============================================================================
__fastcall TMain::TMain(TComponent* Owner)
        : TForm(Owner)
{
Shuttle-&gt;LoadFromFile(&quot;.\\Bilder\\Shuttle.bmp&quot;);
Background-&gt;LoadFromFile(&quot;.\\Bilder\\Space.bmp&quot;);

Shuttle-&gt;TransparentColor=clBlack;
Shuttle-&gt;Transparent=true;

}
//==============================================================================

void __fastcall TMain::Shuttlebewegung(TObject *Sender, TShiftState Shift,
      int X, int Y)
{

Image1-&gt;Canvas-&gt;Draw(0,0,Background);
Image1-&gt;Canvas-&gt;Draw(X-35,Y-30,Shuttle);

}
//==============================================================================
</code></pre>
<p>bringt aber trotzdem nichts, es ist immer noch zu langsam.<br />
Oder wie hast du das gemeint?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/665390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/665390</guid><dc:creator><![CDATA[neobanz.]]></dc:creator><pubDate>Fri, 03 Dec 2004 18:17:48 GMT</pubDate></item><item><title><![CDATA[Reply to Canvas ohne flimmern... on Fri, 03 Dec 2004 18:32:12 GMT]]></title><description><![CDATA[<p>Akari meint sicher:</p>
<p>1 Hintergrund und Shuttle in ein (unsichtbares) Bitmap zeichnen - nacheinander.<br />
2 Inhalt des 'gemischten ' Bildes in Bitmat mit EINEM Draw in FImage drawen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/665405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/665405</guid><dc:creator><![CDATA[DerAltenburger]]></dc:creator><pubDate>Fri, 03 Dec 2004 18:32:12 GMT</pubDate></item><item><title><![CDATA[Reply to Canvas ohne flimmern... on Fri, 03 Dec 2004 18:35:25 GMT]]></title><description><![CDATA[<p>Gibt es keine einfachere Lösung?<br />
Mit der Methode zeichnet er mir immer den Hintergrund, d.h. Geschwindigkeit geht verloren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/665409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/665409</guid><dc:creator><![CDATA[neobanz.]]></dc:creator><pubDate>Fri, 03 Dec 2004 18:35:25 GMT</pubDate></item><item><title><![CDATA[Reply to Canvas ohne flimmern... on Fri, 03 Dec 2004 18:43:42 GMT]]></title><description><![CDATA[<p>Du kannst nicht alles haben! :p</p>
<p>Schnell flackern oder SCHÖN langsam.</p>
<p>Google mal nach DDraw, damit solls besser gehen - kenn ich aber nicht wirklich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/665413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/665413</guid><dc:creator><![CDATA[DerAltenburger]]></dc:creator><pubDate>Fri, 03 Dec 2004 18:43:42 GMT</pubDate></item><item><title><![CDATA[Reply to Canvas ohne flimmern... on Fri, 03 Dec 2004 18:44:41 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>- ich habe das so gemeint</p>
<pre><code class="language-cpp">TMain.hpp :
class TMain : public TForm
{
...
private:	// Anwender-Deklarationen
...
Graphics::TBitmap *Shuttle;
Graphics::TBitmap *Background;
Graphics::TBitmap *Buffer;

public:
...
};

TMain.cpp
__fastcall TMain::TMain(TComponent* Owner)
        : TForm(Owner)
{
Shuttle = new Graphics::TBitmap;
Background = new Graphics::TBitmap;
Buffer = new Graphics::TBitmap;
Shuttle-&gt;LoadFromFile(&quot;.\\Bilder\\Shuttle.bmp&quot;);
Background-&gt;LoadFromFile(&quot;.\\Bilder\\Space.bmp&quot;);
Buffer-&gt;Height = Background-&gt;Height;
Buffer-&gt;Width = Background-&gt;Width;

...
}

(OnDestroy-Event für TMain per Objectinspektor erstellen lassen)
void __fastcall TMain::FormDestroy(TObject *Sender)
{
  delete Shuttle;
  delete Background;
  delete Buffer;
}

void __fastcall TMain::Shuttlebewegung(TObject *Sender, TShiftState Shift,
      int X, int Y)
{

Buffer-&gt;Canvas-&gt;Draw(0,0,Background);
Buffer-&gt;Canvas-&gt;Draw(X-35,Y-30,Shuttle);
Image1-&gt;Canvas-&gt;Draw(0,0,Buffer);
}
</code></pre>
<p>- Wie oft rufst du den Shuttlebewegung auf? Wahrscheinlich bei jedem KeyEvent, oder? Dann solltest du die Behandlung des Events und das Zeichen des Images entkoppeln, in dem du einen Timer (TTimer, Palette System) einbaust, den du auf 25/Minute (Timer-&gt;Interval = 40) einstellst. Dann erfolgt der Prozeß so :<br />
- Bei KeyEvents bestimmst du die neue Position des Shuttles und gibst die neuen Daten an Member-Variablen des Forms (siehe Bitmaps)<br />
- Im OnTimer-Event des Timers rufst du Shuttlebewegung() mit den Aktuellen Werten aus den Member-Variablen auf</p>
<p>Ich hoffe du verstehst das und es funktioniert...</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/665415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/665415</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 03 Dec 2004 18:44:41 GMT</pubDate></item><item><title><![CDATA[Reply to Canvas ohne flimmern... on Sat, 04 Dec 2004 11:05:40 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>Hallo</p>
<p>- ich habe das so gemeint</p>
<pre><code class="language-cpp">TMain.hpp :
class TMain : public TForm
{
...
private:	// Anwender-Deklarationen
...
Graphics::TBitmap *Shuttle;
Graphics::TBitmap *Background;
Graphics::TBitmap *Buffer;

public:
...
};
</code></pre>
</blockquote>
<p>WOW!!!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
DANKE!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>es geht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/665417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/665417</guid><dc:creator><![CDATA[neobanz.]]></dc:creator><pubDate>Sat, 04 Dec 2004 11:05:40 GMT</pubDate></item><item><title><![CDATA[Reply to Canvas ohne flimmern... on Fri, 03 Dec 2004 19:06:35 GMT]]></title><description><![CDATA[<p>Versuch mal mit</p>
<pre><code>DoubleBuffered = true;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/665426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/665426</guid><dc:creator><![CDATA[T_B__]]></dc:creator><pubDate>Fri, 03 Dec 2004 19:06:35 GMT</pubDate></item></channel></rss>