うーんと、「うまく動作しない」が具体性無しで良く分からないので具体的に、
現状の動作と期待している動作を教えていただきたいです。
認識に齟齬があるとお互い時間の無駄になりますし。
一応「入力した語句が含まれる候補が存在するのに候補リストに表示されない」
という意味だと認識して調べてみました。
(例えば「Player」はリストにあるのに「Playe」まで入力しても候補に現れず
「Player」まで入力すれば候補に出る...みたいな感じと認識。)
結論から。402行目
if (instr(tempstr,CaretPos,tmp(tmptmp)) != -1) or (tempstr == tmp(tmptmp)){
これの「CaretPos」を「0」に置き換えることで上記問題は解消されます。
説明。
402行目が入力内容が候補にあるか判定するコードだと思います。
また、これの「CaretPos」はその行で入力した文字数が入っていると思います。
例えば「p」を入力すると「CaretPos」には「1」が入るのですが、そのせいで
「tempstr」(候補リストから1行取り出したもの)の1文字目から比較確認を行っており、
「p」が最初に含まれる「Player」は、"「p」含まれないから関係ない!"
と誤認しちゃったんですね。
なので、「loop」など、2文字目以降に含まれてる候補はちゃんと表示されたと思います。
雑感
今回は偶然にも思った以上に早くそれっぽい問題点が見つかったので良かったですが、
・どこが候補リストを出力している箇所か分かりにくい
・実行すると内部エラーが出る
(普段デバッグウィンドウ表示してないので「logmes」でエラー出ました)
・「tmp」や「tmptmp」等、変数の中身が何なのか一つずつ確認する必要がある
と言ったところで無駄に時間がかかるので、質問時点で予め
「〇行目以降が該当の個所です」とか「デバッグウィンドウ表示しといてください」とか
「"tmp"は○○の内容が入ってます」とかの説明があればスムーズだったと思います。
(変数についてはソース内にコメントで何の命令か、どういう動作してるか記入するのも良し)
とここまでやって今更気づいた。
>>配列の要素が無効というエラーが出ますね
全く出てない・・・解決済みだったのか、別に問題が潜んでいるのか・・・
とりあえず99850の問題は解消すると見込んでいるので、自分はここまで。お疲れさまでした。