HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2023
0802
nennneko5787Footy2でのオートコンプリート機能の実装11解決


nennneko5787

リンク

2023/8/2(Wed) 17:25:12|NO.99843

Footy2でのオートコンプリート機能の実装方法をわかる方がいらっしゃったら教えてもらいたいです。
↓参考画像です。
https://i.imgur.com/KQkrpFv.png



この記事に返信する


nennneko5787

リンク

2023/8/2(Wed) 18:43:40|NO.99844


gosub *GetLineInfo ;CaretLine,CaretPos ;SetWindowPos hwnd1, HWND_TOP, CaretPos, CaretLine(1) + 17, 0, 0, SWP_NOACTIVATE | SWP_SHOWWINDOW | SWP_NOSIZE gsel 1 sdim st,1024 sdim stt,1024 sdim tmp ret=Footy2GetText(nID,varptr(st),LM_CRLF,1024) strrep st,"\t","" split st,"\n",stt logmes ret ab = "" notesel keybuf repeat notemax noteget tempstr,cnt split stt(CaretLine)," ",tmp tmptmp = length(tmp) if tmptmp < CaretPos{ break } ; 命令、関数、システム変数等 ; HSP_CMDCOLOR($0000F081)=EMP_IND_BLANKS | EMP_IND_PARENTHESIS | EMP_IND_OTHER_ASCII_SIGN ; if instr(stt(CaretLine),0,tempstr) != -1{ if (instr(tempstr,CaretPos,tmp(tmptmp)) != -1) or (tempstr == tmp(tmptmp)){ ab += str(tempstr + "\n") logmes "ヒット: "+tempstr //k = cnt }else{ logmes str(tmp(tmptmp)) } loop pos 0,0 objsize 240,220 listbox k,100,ab SetWindowPos hwnd1,0,CaretPos * 10,CaretLine * 20 + 70,240,320,SWP_NOACTIVATE | SWP_SHOWWINDOW
このようにしましたがうまくいきません



zrs90(5さい)

リンク

2023/8/2(Wed) 18:43:51|NO.99845

入力補完で⬇️から検索。

望み通りか知らないけどコレかなぁ...一応、ソースもまだあるみたい
どっかの動画に載ってて、探してたら
製作者本人から、ソースの提供があった
珍しいケース

http://hsp.tv/play/pforum.php?mode=pastwch&num=80482



nennneko5787

リンク

2023/8/2(Wed) 18:45:14|NO.99847

> NO.99844
このコードを実行して文字を入力すると配列の要素が無効というエラーが出ます



zrs90(5さい)

リンク

2023/8/2(Wed) 18:51:31|NO.99848




nennneko5787

リンク

2023/8/2(Wed) 19:00:03|NO.99849

やはり配列の要素が無効というエラーが出ますね...
一度Githubにあげときましたのでそっちを見てください
https://github.com/nennneko5787/SkEditor/



nennneko5787

リンク

2023/8/2(Wed) 19:19:28|NO.99850

こういうやつだとやはりうまく動作しません。
https://i.imgur.com/E5eXRil.png
https://github.com/nennneko5787/SkEditor/



nennneko5787

リンク

2023/8/2(Wed) 19:23:16|NO.99851

一部の語句がうまく動作しません。



名無し

リンク

2023/8/2(Wed) 21:30:10|NO.99853

コードが長いからGitに乗せるのは分からなくもないけど、
1000行超えるコードを見て問題点を見つけ、指摘してくれる人はいるんだろうか...
と、思ったりします。人の書いたソースを理解するのは自分のコードより大変ですし。
という事で最低限に削ったのが99844のソースだったりするのかな?
と思ったけどそういう訳でもないみたいですね。とりあえずgitの見てみてますが、
自分がちんたらしてる間に凄い人がさっと表れてパッと解決してくれるような気もしてます

因みに、99845も99848もエラーが出るという事(を99849で仰ってると認識してます)ですが、
自分の環境では99848は特にエラーも出ず正常に動作しました。



名無し

リンク

2023/8/2(Wed) 22:24:36|NO.99854

うーんと、「うまく動作しない」が具体性無しで良く分からないので具体的に、
現状の動作と期待している動作を教えていただきたいです。
認識に齟齬があるとお互い時間の無駄になりますし。

一応「入力した語句が含まれる候補が存在するのに候補リストに表示されない」
という意味だと認識して調べてみました。
(例えば「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の問題は解消すると見込んでいるので、自分はここまで。お疲れさまでした。



nennneko5787

リンク

2023/8/3(Thu) 17:55:08|NO.99855

> 自分がちんたらしてる間に凄い人がさっと表れてパッと解決してくれるような気もしてます
すみません、2時間も格闘しましたが解決せず、質問した形になります。
解決しました。ありがとうございます。



名無し

リンク

2023/8/3(Thu) 20:17:46|NO.99857

お、問題はやはりその件であってたんですね。解決して良かった。

念の為、引用された一文の「自分」は文字通り「me(自分)」の意味で、要は一人称です。
つまり、私が問題箇所を探している間に他の方があっさり解決してくれるのでは、と言う一文で、
特にnennneko5787さんがちんたらしてる...と言った意味は一切ありませんので
そういった意味ですみませんと仰ったなら、特に気にする必要はありませんよ。



ONION software Copyright 1997-2023(c) All rights reserved.