Editコンポーネントを使ってオートコンプリートを行いたいのですが、
同じ質問をここで見かけ、ComboBoxを使って試してみたのですが、
質問があります。
同じ質問をしていたいたるさんと同じ例をあげると、
文字列delphi、deepが保存されていて、
delまで入力するとphiが、deeまで入力するとpがハイライトで
補完されるようにしたいのですが、ComboBoxのAutoCompleteを使うと、
最初の d を入力した時点で elphi が補完されます。
どうやらItemの最初に登録されているものを補完するようです。
補完をするのは、文字列が一つに定まってからして欲しいのですが、
解決法はありますでしょうか。 ご存知の方、よろしくです。
http://homepage1.nifty.com/ht_deko/tech001.html#tech020
のソースを使っていますよね。
この中の、
Index := SendMessage(Handle,CB_FINDSTRING,-1,Integer(PChar(ORGText)));
が、'd'を検索して'delphi'のインデックスを得ている場所です。
検索は、若いインデックスから順に探し、最初に見つかったものを返しています。
第3引数で検索開始位置を指定することができます。
今回の場合は、Index := ...の次に、
Index2 := SendMessage(Handle,CB_FINDSTRING,Index,Integer(PChar(ORGText))); // 前に検索した結果より後ろのIndexを検索
if Index <> Index2 then Index := -1; // 最初の結果より後ろに見つかれば、最初の結果はなかったことに
とすれば実現できます。
にしのさん、いつもありがとうございます。
そのソースなんですが、ためしに起動したところ、
確定した文字列として補完されます。
希望としては、ハイライトで補完されたいのですね。
あー表現しにくい・・・;伝わりますか?
それと追加になるのですが、同じ機能をEditコンポーネントで
実現することはできるんでしょうか。
今回もよろしくお願いいたします。
> 文字列delphi、deepが保存されていて、
> delまで入力するとphiが、deeまで入力するとpがハイライトで
> 補完されるようにしたいのですが
これは実現できていると思いますが、できませんでしたか?
> そのソースなんですが、ためしに起動したところ、
> 確定した文字列として補完されます。
ソースが違いませんか?
こちらの環境では、上記URLのソースに、上記2行を追加すると、残りの文字列がハイライト(選択状態)になっています。
# つまり、delで、phiがハイライト。deeで、pがハイライト。
Editでやるには、EditのOnKeyDownとOnChangeを変更して、隠してあるComboBoxから選択、というのが簡単そうです。
隠してあるComboBoxからEditに値を入れ直すとき、OnChangeをnilにしておくと、OnChangeの誤作動を防げます。処理後にOnChangeを戻すことを忘れずに。
うーん、うごかない・・・と思いながらいろいろと触っていたのですが、
AutoCompleteをFalseにすると動きました。
Trueのままだと動作しないんですね;
なんかどういう理由なのかよくわかんないですけど、
とりあえず思い通りの動作をしてくれたので解決です。
Editについては、また試してみます、
ほんとうにありがとうございました!
// あとはソースをしっかり理解したいと思います。
ツイート | ![]() |