キーボードの入力カーソルの位置を得るには?

解決


DBOX  2003-09-06 11:18:31  No: 4678

Memoのコンポーネントからキーボードの入力カーソルの位置を得るには
どうすればよいでしょうか?
Formからfunction GetCaretPos(var lpPoint: TPoint):LongBool;と
ClientToScreenを使えばできるのですが
TCustomMemoからでは上手く受け取れず  function GetCaretPos: TPoint;
では(0,0)以外の時では、ずれてしまうのです。
よろしくお願いします。


DBOX  2003-09-09 11:14:49  No: 4679

質問が良くなかったようです。

procedure TkkHintMemo.Click;
var P: TPoint;
begin
    p := GetCaretPos();
    ShowMessage('('+IntToStr(P.X)+','+IntToStr(P.Y)+')');
end;

procedure TForm1.FormClick(Sender: TObject);
var P: TPoint;
begin
    GetCaretPos(P);
    ShowMessage('('+IntToStr(P.X)+','+IntToStr(P.Y)+')');
end;

この二つを比べてみると"ずれ"が生じているのがわかります。
TMemo::CaretPosの記述の誤り
http://www2.justnet.ne.jp/~tyche/bcbbugs/reports/help003.html
ではないかと思われます。
デフォルトでは
       MemoCaret := GetCaretPos; // (カーソルでなく)キャレット位置を取得
       MemoCaret.X:= MemoCaret.X *4+8;//この8は見やすくするため
       MemoCaret.Y:= MemoCaret.Y * (-Font.Height) ;
でなんとかうまく行きましたがFontに依存するのであれば
他に対策を練る必要があります。
これに悩んでおられる方々も多いのではないでしょうか?


えび  2003-09-09 11:22:39  No: 4680

ちょっと違うのでは?
記述されたコードで呼び出しているのは
メモコンポーネントのGetCaretPosではなく
APIのGetCaretPosでは?


DBOX  2003-09-09 12:25:40  No: 4681

そうですね失礼しました。
procedure TForm1.FormClick(Sender: TObject);
var P: TPoint;
begin
    P := kkHintMemo.CaretPos;// GetCaretPos(P);
    ShowMessage('('+IntToStr(P.X)+','+IntToStr(P.Y)+')');
end;
であれば上の方と同じようになります。
>GetCaretPos();
で引数不要が出ていたのはそのためですね。
普通にGetCaretPos;で返り値がTPoint型になります。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加