Hallo und guten Tag nochmal an euch alle,
Habe wieder mal eine Konzeptfrage. Ich möchte auf meiner Paintbox folgendes Fadenkreuz (siehe Bild) dastellen, ohne Informationsverlust oder Flackern im Bild zu erzeugen.
http://www.dkvermessung.com/images/head/fadenkreuz.gif
Ok zur Situation (kann sich im Anhang als Projekt runtergeladen werden): Ich will einen Oszilloskopen programmieren. Es funktioniert eigentlich auch schon recht gut und nun soll die Optik angepasst werden. Ein Timer schickt zufällige Daten (simuliert derzeit den Signaleingang), welche aufgezeichnet werden. Wenn man auf die Paintbox klickt, wird der Timer gestoppt oder gestartet. Wenn der Timer gestoppt wird, ändert sich der Cursor von crHandpoint in crCross. (soweit funktioniert alles).
Jetzt zum Problem: Wenn der Timer gestoppt ist und der Cursor = crCross, sollen durch das Cross Linien gehen wir im Bild dargestellt(im Bild stellt der rote Punkt sozusagen mein crCross dar). Diese Linien sollen mit ihrem Schnittpunkt immer im crCross bleiben (hierfür werde ich sicherlich die WM_MouseMove-Message verwenden). Meine bisherigeren Versuche führten immer zu einem Löschen meines in der Paintbox-gezeichneten Graphen oder zum leichten Flackern in der Paintbox. Leichtes Flackern ist ebenfalls zu sehen, wenn der Graph gezeichnet wird.
Deswegen hier die Frage, welches Konzept würdet ihr wählen, um eine solche Darstellung zu ermöglichen. Sicherlich geht es hier in erster Linie um die Darstellung des Fadenkreuz in der Paintbox, aber ich habe den Eindruck, dafür sollte ich die gesamte Darstellung (auch wärend des Aufzeichnens des Graphen) verbessern, um das leichte Flackern zu beseitigen. Kenne aus meiner
TP-Zeit noch eine Technik, bei der eine aktive Zeichnung (Darstellung) und inaktive Zeichnung (im Hintergrund) genutzt wurden. Wärend die aktive Zeichnung gezeigt wurde, konnten Änderungen in der inaktiven vorgenommen werden und am Ende wurde lediglich die Bilder gewechselt. Somit konnte das Flackern im GraphikModus verhindert werden konnte. Ist das schon im Doublebuffered drin? Oder gibt es dort noch vergleichbare Techniken?
Vielen Dank
BAMatze
[Edit1]Hier mal die Procedure, die ich bisher genommen hab, für das darstellen des Fadenkreuzes:
Delphi-Quellcode:
procedure TOszilloskop.PaintBoxMouseMove(Sender: TObject);
begin
if not Zeitschleife.Enabled then
begin
InitBitmap;
FBitmap.Canvas.Pen.Color := FCMask;
FBitmap.Canvas.MoveTo(FPB_Display.xPos, 0);
FBitmap.Canvas.LineTo(FPB_Display.xPos, FiDisplayHeight);
FBitmap.Canvas.MoveTo(0, FPB_Display.yPos);
FBitmap.Canvas.LineTo(FiDisplayWidth, FPB_Display.yPos);
FPB_Display.Refresh;
end;
end;
Problem hierbei, beim Bewegen sieht man ebenfalls die Maus flakernd und wenn sie nicht bewegt wird, verschwindet sie hinter dem gezeichneten Kreuz.[/Edit]
2. Account Sero