OnMouseMoveEventでその時々のY座標をcanvasの右側に表示したいのですが、うまく行きません。たぶん、描画、消すのプログラムがおかしいのではないかと思うのですが、教えてください。
---------------------------
private
YY: integer;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
s: string;
Rct: TRect;
begin
Canvas.Pen.Mode := pmnot;
Canvas.Pen.Style := psDot;
Canvas.Brush.Style := bsClear;
Canvas.MoveTo(0,YY);
Canvas.LineTo(Form1.Width-60,YY);
canvas.Pen.Color := clBtnFace;
Canvas.TextOut(Form1.Width-54,YY-5,IntToStr(YY));
YY := Y;
Canvas.MoveTo(0,YY);
Canvas.LineTo(Form1.Width-60,YY);
canvas.Pen.Color := clBlack;
Canvas.TextOut(Form1.Width-54,YY-5,s);
end;
波線はうまく描けるのですが、その右側に数値が黒塗りで表示されてしまいます。YYの初期値もうまく決められません。
お願いします。
訂正:
var
s: string;
Rct: TREct;
宣言は不要でした。
文字を描く前に、文字を描く領域を背景色で塗りつぶすとよいのでは? 文字の色はペンの色ではなくフォントの色で決まります。
編集 削除うんとさん、ありがとうございました。おかげさまで解決しました。
以下に完成品を表示しておきます。
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
Rct: TRect;
begin
Rct := Rect(Form1.Width-60,0,Form1.Width,Form1.Height);
Canvas.Brush.Color := clbtnface;
Canvas.FillRect(Rct);
Canvas.Pen.Mode := pmnot;
Canvas.Pen.Style := psDot;
Canvas.Brush.Style := bsClear;
Canvas.MoveTo(0,YY);
Canvas.LineTo(Form1.Width-60,YY);
Canvas.Pen.Color := clBtnFace;
YY := Y;
Canvas.MoveTo(0,YY);
Canvas.LineTo(Form1.Width-60,YY);
Canvas.Pen.Color := clBlack;
Canvas.TextOut(Form1.Width-54,YY-5,IntTOStr(YY));
end;