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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0610
らーんメッセージボックス内の文字列検索2解決


らーん

リンク

2018/6/10(Sun) 16:54:19|NO.84587

HSPでテキストエディターを作っています。
そのテキストエディターにメモ帳やHSPスクリプトエディタみたいな
文字列を検索する機能をつけたいと思っています。
全くやり方が分からなかったので質問させていただきました。
メモ帳みたいな文字列が見つかるとそこまでスクロールする機能もつけたいです。
よろしくお願いします。



この記事に返信する


あらや

リンク

2018/6/11(Mon) 00:13:31|NO.84588

未完成ですが……、
一応こんな感じでできると思います。

半角英数字だけならこれで出来たのですが、全角文字があると失敗します。


#define EM_GETSEL 0x00B0 #define EM_SETSEL 0x00B1 #define EM_SCROLLCARET 0x00B7 // メッセージボックス pos 0, 0; text = ""; mesbox text, ginfo_sx, ginfo_sy-30, 1, 65536; obj1 = stat; hobj1 = objinfo(obj1, 2); pos 3, ginfo_sy-28; mes "検索文字列: "; // 検索用入力ボックス pos 100, ginfo_sy-28; objsize 300, 25; words = ""; input words,,, 100; obj2 = stat; // 検索ボタン pos 450, ginfo_sy-28; objsize 40, 25; button gosub "検索", *serch; obj3 = stat; stop; // 文字列の検索処理 *serch sendmsg hobj1, EM_GETSEL, varptr(pStart), varptr(pEnd); // 現在のカーソル位置取得 // 検索文字列が何もない場合 if(words = "") { dialog "検索文字列に何も入力されていません。", 1, "エラー"; return; } idx = instr(text, pEnd, words); // 現在のカーソル位置(末尾)から後ろを検索 if(idx == -1) { // 文字列が見つからなかった場合 dialog "文字列が見つかりませんでした。", 0, "検索終了"; return; } else { // 文字列を見つけた場合 pStart = pEnd + idx; pEnd = pStart + strlen(words); objsel obj1; sendmsg hobj1, EM_SETSEL, pStart, pEnd; // カーソル位置を見つけた文字列の箇所に設定する sendmsg hobj1, EM_SCROLLCARET, 0, 0; // カーソル位置を表示するようににスクロール } return;



らーん

リンク

2018/6/12(Tue) 18:34:29|NO.84596

>あらや様
ウィンドウメッセージでできるのですね!
勉強になりました。
回答ありがとうございました。



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