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