オートコンプリートするには?

解決


げん  2002-11-24 11:16:23  No: 2191

Editコンポーネントを使ってオートコンプリートを行いたいのですが、
同じ質問をここで見かけ、ComboBoxを使って試してみたのですが、
質問があります。

同じ質問をしていたいたるさんと同じ例をあげると、
文字列delphi、deepが保存されていて、
delまで入力するとphiが、deeまで入力するとpがハイライトで
補完されるようにしたいのですが、ComboBoxのAutoCompleteを使うと、
最初の d を入力した時点で elphi が補完されます。
どうやらItemの最初に登録されているものを補完するようです。

補完をするのは、文字列が一つに定まってからして欲しいのですが、
解決法はありますでしょうか。  ご存知の方、よろしくです。


にしの  2002-11-24 19:14:35  No: 2192

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; // 最初の結果より後ろに見つかれば、最初の結果はなかったことに

とすれば実現できます。


げん  2002-11-25 09:00:19  No: 2193

にしのさん、いつもありがとうございます。

そのソースなんですが、ためしに起動したところ、
確定した文字列として補完されます。
希望としては、ハイライトで補完されたいのですね。
あー表現しにくい・・・;伝わりますか?

それと追加になるのですが、同じ機能をEditコンポーネントで
実現することはできるんでしょうか。

今回もよろしくお願いいたします。


にしの  2002-11-25 18:08:22  No: 2194

> 文字列delphi、deepが保存されていて、
> delまで入力するとphiが、deeまで入力するとpがハイライトで
> 補完されるようにしたいのですが
これは実現できていると思いますが、できませんでしたか?

> そのソースなんですが、ためしに起動したところ、
> 確定した文字列として補完されます。
ソースが違いませんか?
こちらの環境では、上記URLのソースに、上記2行を追加すると、残りの文字列がハイライト(選択状態)になっています。
# つまり、delで、phiがハイライト。deeで、pがハイライト。

Editでやるには、EditのOnKeyDownとOnChangeを変更して、隠してあるComboBoxから選択、というのが簡単そうです。
隠してあるComboBoxからEditに値を入れ直すとき、OnChangeをnilにしておくと、OnChangeの誤作動を防げます。処理後にOnChangeを戻すことを忘れずに。


げん  2002-11-26 09:09:48  No: 2195

うーん、うごかない・・・と思いながらいろいろと触っていたのですが、
AutoCompleteをFalseにすると動きました。
Trueのままだと動作しないんですね;
なんかどういう理由なのかよくわかんないですけど、
とりあえず思い通りの動作をしてくれたので解決です。

Editについては、また試してみます、
ほんとうにありがとうございました!

// あとはソースをしっかり理解したいと思います。


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








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