TEditorで、Focusを失ったときでもCaretを表示するには?

解決


risa  2010-11-13 06:23:31  No: 39526

いつもお世話になります。
  作者さんのHPで質問するかどうか迷ったのですが、作者さんが最近あまり
掲示板を覗いていらっしゃらないようでしたので、こちらで質問させていた
だきます。

  フォームが2つあり、1つはTEditorが貼り付けてあるフォーム、もう一つが
入力作業を行うためのフォームで、ListBoxやEditが貼り付けてあります。
  この入力作業を行うフォームで、特定の入力を行うと、TEditorに文字列が
自動で入力されていくのですが、TEditorが非アクティブになっているため、
キャレットが隠れてしまっていて、挿入位置が分かりにくくなってしまって
います。
  そのため、非アクティブ状態であっても、キャレットを表示したいです。
どのようにすればよいでしょうか。

  なお、ShowCaret等の命令があるのは分かったのですが、何回か実行して
みても、うまく表示できませんでした。


risa  2010-11-13 06:46:30  No: 39527

抜けてしまっていましたので、追記させてください。
TEditorは、有名なエディタコンポーネントのことで、本田さんという方が
作られたものです。次のURLで公開されています。

://homepage3.nifty.com/~katsuhiko/delphi.html

また、私が使用している環境は、Delphi6 + Windows XPです。


monaa  2010-11-13 22:15:37  No: 39528

とりあえずダメ元で作者にメールしてみるのは手です。
シェアウエアですし、入金が可能なら返事も来ると思います。
私も遠い昔に使ったことがありますが、今はソースすらありませんので、確認はしてません。

非アクティブになったときにキャレットを消すという動作をしているはずなので。
HideCaretをコメントアウトすればキャレットは消えません。
WM_KILLFOCUSからHideCaretを探せば見つかるかと思いますよ。


risa  2010-11-19 03:41:44  No: 39529

あれから、この問題に集中してたので、ようやく解決できました。

>monaa様。
ヒントありがとうございました。
そのキーワードだけで全部の解決につながりました。
後はイベントがどの順番で処理されるのか、ShowMessageなどで
確認し、タイミングを間違わないように
CreateCaret, ShowCaret, HideCaret, DestroyCaretを実行する
だけでいけました。


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

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






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