Entwickler-Ecke
Multimedia / Grafik - Zeigerinstrument programmieren
Papa Bravo - Mi 02.06.04 19:52
Titel: Zeigerinstrument programmieren
Hallo zusammen,
ich möchte gern einen kleinen Instrumentenflugtrainer programmieren. Dazu soll auf einer Bitmap, die den Instrumenthintergrund zeigt mit Canvas ein Zeiger gezeichnet werden, der den aktuellen Wert auf der Bitmap anzeigt (beim Variometer zum Beispiel die Höhenänderung).
Soweit klappt alles, nur bekomme ich den Zeiger nachdem er einmal gezeichnet ist, nicht mehr weg. Bekommt das Instrument einen neuen Wert, erscheint der Zeiger logischerweise daneben dann noch einmal, bis das gesamte Instrument über kurz oder lang von der Farbe des Zeigers bedeckt ist.
Wie bekomme ich den Zeiger wieder weg, nachdem er gezeichnet wurde?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure tzeiger.vario_zeiger; begin with form1.Canvas do begin moveto(x,y); lineto(round(x-dx),round(y+dy)); end; end; |
dx und dy werden jeweils extern berechnet. Meine Versuche, den Zeiger wegzubekommen möchte ich euch gerne ersparen ;) , es ging ja nicht.
Vielen Dank
MfG
Philipp
Killian2004 - Do 03.06.04 11:01
Titel: Zeiger
Du musst das Property Pen deines Canvas modifizieren.
Dazu ändere den Parameter bei "Mode" von pmCopy zu pmXor/pmNotXor. Eines von beiden geht definitiv, weiß jetzt bloß nicht genau welches. Steht aber in der Delphi Hilfe erklärt, was die einzelnen Parameter bewirken. Da noch mal nachlesen.
mfG, Killian
sourcehunter - Fr 04.06.04 20:06
Falls das mit der property nicht klappt, probiermal das Hintergrundbild noch einmal in den Canvas zu schreiben und dann erst den Zeiger. Möglicherweise solltest du das aber vorher in einer unsichtbaren Zeichenfläche, einem sogenannten Framebuffer, schreiben und dann in den Anzeige-Canvas kopieren, sonst könnte es unter Umständen flackern.
Papa Bravo - Mi 16.06.04 15:19
Danke,
das mit dem Neuzeichnen ber Bitmap hat wunderbar geklappt, mit dem flackern hattest du leider recht.
Ich habe in der Delphi-Hilfe den Befehl zum laden in den Arbeitsspeicher gefunden, kann damit aber nichts anfangen.
Zu der Methode mit dem Framebuffer: die Bitmap einfach in ein unsichtbares Image laden? Wenn ich das dann in das richtige kopiere, flackert es nicht mehr?
MfG
Philipp
sourcehunter - Fr 18.06.04 21:24
Eingentlich dürfte es dann nicht mehr flackern, denn diese Technick wird auch bei vielen Spielen eingesetzt (vieleicht sogar bei allen?).
Raphael O. - Fr 18.06.04 23:31
Papa Bravo hat folgendes geschrieben: |
mit dem flackern hattest du leider recht. |
versuchs mal mit
form1.doublebuffered:=true;
Segelflieger - Sa 19.06.04 00:01
@Fiji:
hast du bei WinXP keine Probleme mit DoubleBuffered? Bei mir werden da Panels und Formularhintergründe nicht richtig angezeigt..
Raphael O. - Sa 19.06.04 00:28
nee, hab da keine probleme damit...
hast du XP aufm neuesten SAtnd und auch relativ aktuelle Grafiktreiber?
Papa Bravo - So 20.06.04 19:38
@fiji-fighter
Danke, läuft jetzt alles ohne Flackern :D . Habe auch keine Probleme mit Panels und Formularhintergründen.
Mfg
Philipp
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!