Es geht um 2 Sachen.
Erstens: Wenn man die Maus an einen Kurvenpunkt hinbewegt erscheint ja das CrosshairTool (wenns richtig konfiguriert ist). Wenn man dann die Maus im "Einzugsbereich" weiter bewegt, kommt es zum Flackern vom CrosshairTool. Das hat mich immer gestört und ich habe mir jetzt mal den Source angeschaut und meine das Problem gefunden zu haben. Kurz gesagt wird im "MouseMove"-Handler als erste Aktion immer das Crosshairtool gelöscht um dann gleich wieder gezeichnet zu werden. Unten der Versuch, das zu beheben, bei kurzen Tests hat das auch funktioniert. Das CrosshairTool wird darin nur noch gelöscht, wenn sich die Series oder der Index geändert haben. Die Funktion scheint mir aber etwas sperrig, vielleicht kann man das noch optimieren.
Code: Alles auswählen
procedure TDataPointCrosshairTool.MouseMove(APoint: TPoint);
var
id: IChartDrawer;
LastSeries,CurrentSeries: TBasicChartSeries;
LastIndex: Integer;
begin
//original version (flickering)
{id := GetCurrentDrawer;
if Assigned(id) then
DoHide(id);
FindNearestPoint(APoint);
if FSeries = nil then exit;
FPosition := FNearestGraphPoint;
if (EffectiveDrawingMode = tdmXor) and Assigned(id) then begin
id.SetXor(true);
DoDraw(id);
id.SetXor(false);
end;}
id := GetCurrentDrawer;
LastSeries:= fSeries;
fSeries:= nil;
LastIndex:= fPointIndex;
FindNearestPoint(APoint);
if (fSeries = LastSeries) and (fPointIndex = LastIndex) then EXIT;
CurrentSeries:= fSeries;
fSeries:= LastSeries;
if assigned(id) then DoHide(id);
fSeries:= CurrentSeries;
if FSeries = nil then EXIT;
FPosition := FNearestGraphPoint;
if (EffectiveDrawingMode = tdmXor) and Assigned(id) then begin
id.SetXor(true);
DoDraw(id);
id.SetXor(false);
end;
end;
Viele Grüße!