(Borland C++...) Double Buffering
-
Hallo da draußen,
ich habe mich jetzt mal in der FAQ und unter der Suchfunktion nach dem Thema
Duoble Buffering umgeschaut und auch zahlreiche Erklärungen gefunden allerdings
kein Beitrag der mir wirklich geholfen hat. Mein Problem ist das ich ein Image auf meiner Form liegen habe, welches durch das benutzen der Cursortasten in die jeweilige Richtung bewegt wird. Das funzt auch nur tritt halt das altbekannte Problem auf das das wie verückt flimmert. Nun meinen Bitte: Sollte jemand sich mit dieser Sache auskennen, könnte er mir bitte schreiben wie man so ein Double Buffering macht, bzw integriert.
Vielen Dank im Voraus.
-
Hat nix mit Double Buffering zutun. Höchstwahrscheinlich löschst Du erst den Hintergrund.
-
Wo genau ist dein Problem?
Du brauchst hier eigentlich gar kein DoubleBuffering (wenn es sich nur um dieses eine Bitmap handelt).
Einfach in WM_CREATE das Bitmap laden und in einen Memory-DC selektieren. Deine Position speicherst du einfach in einer / zwei Variablen, die du bei den entsprechenden Tasten veränderst und anschließend InvalidateRect aufrufst. In WM_PAINT blittest du jetzt den Memory-DC an die gewünschte Position im richtigen DC. (Bei WM_DESTROY freigeben nicht vergessen)
-
Danke erstmal
Das Bild wird folgendermaßen verschoben:
Image1->Top = Image1->Top + 10;
wie könnte ich da das Beipiel von Flenders anwenden?
-
Willst du jetzt eine VCL oder eine WinAPI Lösung?
-
Eine WinAPI Lösung wenn möglich
-
Die Lösung wäre:
InvalidateRect( NULL, FALSE);
-
Wie würde das dann mit InvalidRect... funktioniere, ich meine wie müsste ich das in meinen Code einbauen?
-
MAl ne kleine Nebenfrage: Ich habe mich vohrher bei bcbarena registriert und wollte mich daraufhin anmelden, aber das ging nicht. Ich bin mir sicher das Name und Passwort richtig eingegeben waren und trotzdem steht nachher noch die Überschrift "Sie sind nicht angemeldet". Woran kann das liegen, muss ich da auf irgendetwas achten?
-
Hast Du Cookies eingeschaltet?
-
Das musst du aufrufen, nachdem du die Variablen fürs Verschieben des Bildes gesetzt hast. Oder wird das VCL-Image automatisch neu gezeichnet, wenn du die Position veränderst?
Dein Programm bishher ist doch VCL, oder sehe ich das falsch. Da kenn ich mich nicht aus. Evtl OnCreate, OnPaint, OnDestroy
-
Vielen Dank an ReneG. Login hat gefunzt als ich die Cookies zugelassen habe.
Kannst du mir auch bei dem oben genannten Problem helfen?
-
Also wenn
InvalidateRect( NULL, FALSE);
net funzt, ist es ein VCL-Problem
-
Wie würde das dann mit InvalidRect... funktioniere, ich meine wie müsste ich das in meinen Code einbauen?
-
Wird denn das Bild verschoben, wenn du nur
Image1->Top = Image1->Top + 10;
aufrufst? Wenn nicht: einfach danach InvalidateRect aufrufen, und in WM_PAINT blitten.
Falls du aber mit VCL arbeiten willst also nicht WndProc, sondern OnPaint etc. bist du im BCB-Forum wohl besser aufgehoben
-
Ja das Bild wird durch die Cursortasten verschoben (VK_Left : I1->Top = I1->Top...)
Wenn das aber ins VCL Forum gehört dann sorry.