2017-11-03 6 views
-2

デルファイ10でグラフを作成する必要があります。グラフの値はマウスで変更できます。私は、マウスカーソルでグラフの値を押し、その値を変更するためにドラッグしたいと思います。有効にする必要のあるプロパティはありますか、それに対して特定のチャートコンポーネントがありますか?デルファイのマウスカーソルでグラフの値を変更

I saw another similar question @KenWhiteで示されていますが、このトピックではC#が使用されていて、TeeChartコンポーネントがDelphiで異なって動作するため、理解できませんでした。

誰かが私にその使い方を教えてもらえますか?

ありがとう

+0

@KenWhite(例えば、隣人値などによって水平シフトを制限する)いくつかの制限が必要でしょうか? – wBB

+0

他の投稿を調べた後、質問を再開しました。あなたは正しい。そのバージョンはかなり異なっています。チュートリアルを見て、https://www.steema.com/downloads/vclからダウンロードできるガイドをお探しですか? –

+0

はい、C#のようなDelphiのコンポーネントの属性は見つかりません。 – wBB

答えて

3

ドラッグの簡単な例。

enter image description here

私は、自由にラインシリーズをマウスの右ボタンを使用してFalseにAllowPanningチャートを設定して、ポイントスタイルはサイズ= 4の円で、単純なリストトラバーサルで触れたポイントを求めて(ないことを確認Stdがカーソルに最も近い点を取得するメソッドを持っているかどうか)。

は、おそらくあなたは、あなたが私の編集した質問で助けることができる

DragIdx: integer = -1; 

procedure TForm1.Button18Click(Sender: TObject); 
var 
    i: Integer; 
begin 
    for i := 0 to 19 do 
    Series1.AddXY(i, Sin(i/2)); 
end; 

procedure TForm1.Chart1MouseDown(Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Integer); 
var 
    i, xx, yy: Integer; 
begin 
    if Button = mbRight then begin 
    DragIdx := -1; 
    for i := 0 to Series1.Count - 1 do begin 
     xx := Series1.CalcXPos(i); 
     yy := Series1.CalcYPos(i); 
     if Sqr(xx - x) + Sqr(yy - y) <= 5 * 5 then begin 
     DragIdx := i; 
     Break; 
     end; 
    end; 
    Memo1.Lines.Add(Format('grab %d', [DragIdx])); 
    end; 
end; 

procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X, 
    Y: Integer); 
var 
    xx, yy: Double; 
begin 
    if (ssRight in Shift) and (DragIdx >=0) then begin 
    Series1.GetCursorValues(xx, yy); 
    Memo1.Lines.Add(Format('change %d to %f %f', [DragIdx, xx, yy])); 
    Series1.XValues[DragIdx] := xx; 
    Series1.YValues[DragIdx] := yy; 
    Chart1.Repaint; 
    end; 
end; 
+0

完璧!非常に@MBoありがとうございます。それは本当に助けになりました。私は、2011年にプログラマーになるのを止め、今や趣味として再起動するのが難しいため、プログラミングでいくつかの問題があることを認めています。この機能をチャート上で最後に使用したのは、2003年、Delphi 7でした。もう一度感謝します。 – wBB

関連する問題