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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0907
名無しF1キーヘルプみたいなもの8未解決


名無し

リンク

2014/9/7(Sun) 20:17:50|NO.64743

こんばんは。
いまHSPスクリプトエディタのカーソル(キャレット)位置のキーワードを取得したいと思っているのですが、
全く方法がわかりません。F1キーヘルプのようにしたいです。よろしくお願いします。



この記事に返信する


kei

リンク

2014/9/7(Sun) 22:43:50|NO.64745

「hsp カーソル位置」と検索すれば何番目かに参考になるページがありましたよ。
検索しても分からなかったのならば、どこが分からなかったのかを教えてください。



名無し

リンク

2014/9/8(Mon) 18:45:06|NO.64764

説明が足りなくてすみません。
このサイトが参考になるかと思ってやって見たのですが、全く動きませんでした。
http://hspnext.com/hspkura/hspkura08.htm#contents05
他のサイトはsendmsgでやっていて、hsedsdkでハンドルを取得しようかと思ったのですがsendmsgとかは詳しくないので全くわかりませんでした。



さくら

リンク

2014/9/8(Mon) 21:11:36|NO.64774

修正版を載せます。確認して見て下さい。


;***** カーソル位置のトークンを取得 (strmod04.hsp) ***** #module #deffunc gettoken var prm1,str prm2,int prm3 strText = prm2 : ls=strlen(strText) : if ls==0 : return -1 nIndex = prm3 : if nIndex<0 : nIndex=0 sdim strCharSet,256 strCharSet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_#" nStart = nIndex repeat if nStart<=0 : nStart=0: break strChar=strmid(strText,nStart,1) nFoundIndex=instr(strCharSet,0,strChar) if nFoundIndex<0 : nStart++ : break nStart-- loop nLength=strlen(strText) nEnd = nIndex repeat if nEnd>=nLength : nEnd=nLength : break strChar=strmid(strText,nEnd,1) nFoundIndex=instr(strCharSet,0,strChar) if nFoundIndex<0 : break nEnd++ loop if nStart>=nEnd : prm1 = "" : return 0 prm1=strmid(strText,nStart,nEnd-nStart) return 0 #global ;***** Sample ***** ;▼必要となるAPIや定数の定義 #uselib "user32.dll" #cfunc PostMessage "PostMessageW" int,int,int,int #cfunc SendMessage "SendMessageW" int,int,int,int #define EM_LINEFROMCHAR $000000C9 #define EM_GETSEL $000000B0 #define EM_LINEINDEX $000000BB ;▼HSP Script Sourceを選択 dialog "hsp",16 : if stat=0 : stop buf="" notesel buf : noteload refstr ;▼mesboxを作成 font "MS ゴシック",14 : objmode 2 mesbox buf,ginfo(10)-4,ginfo(11)-24,5 : objectID=0 objsel objectID : hCld=objinfo(0,2) ret=PostMessage(hCld,EM_SETMARGINS,3,6) objprm objectID,buf ;▼キー割り込み onkey *k_event stop ;▼F1キー取得 *k_event ;割り込み判定 if wparam=112 : goto *tokunget ;F1 stop ;▼トークン(キーワード)を取得 *tokunget ;▼行番号を取得 lno=SendMessage(hCld,EM_LINEFROMCHAR,-1,0) ;▼行位置を取得 ret=SendMessage(hCld,EM_GETSEL,varptr(i),0) ret=SendMessage(hCld,EM_LINEINDEX,lno,0) : linepos=i-ret sdim st,1024 : sdim outtoken,MAX_PATH ;▼現在カーソル位置の行の文字列を読みこむ noteget st,lno : len=strlen(st) ;▼先頭のタブを除去 t=peek(st,0) if t==$09 : st=strmid(st,1,len-1) : linepos-=1 ;▼トークンを取得 gettoken outtoken,st,linepos ;▼取得したキーワードを表示 dialog " 取得されたキーワード : "+outtoken,0 stop



さくら

リンク

2014/9/8(Mon) 21:19:59|NO.64775

あっ!少し回答を外したかも(^^;
>いまHSPスクリプトエディタのカーソル(キャレット)位置のキーワードを取得
hsedsdkでハンドルを取得して、上記のスクリプトのhCldに渡しても、うまくいかないと
思います。もう少し具体的にどんなものを作成しょうとしているのかを書いたら、誰かが
答えてくれるかも・・・(もうずいぶんHSPをやっていないので他力本願)



tds12

リンク

2014/9/8(Mon) 21:37:10|NO.64776

スクリプトエディタから選択されている位置の取得だけでも
専用の関数等はなく、荒業を使うしかなさそうです。

キーワード取得もモジュール化もコメントもないスクリプトですが
このようになりました。


#include "hsedsdk.as" hsed_exist if stat == 0:end hsed_getacttabid nTabID hsed_getfootyid nFootyID,nTabID hsedtextlen = 0 hsed_gettextlength hsedtextlen,nFootyID sdim buf if stat == 0:hsed_gettext buf,nFootyID sIns = "スクリプトエディタに送る文字列" hsed_sendstr sIns sdim buf2 if stat == 0:hsed_gettext buf2,nFootyID hsed_undo nFootyID repeat strlen(buf) + 1 if peek(buf,cnt) != peek(buf2,cnt):footyselstart = cnt:break loop mes "選択開始位置:" + footyselstart sellen = -( - strlen(sIns) - strlen(buf) + strlen(buf2)) mes "選択バイト数:" + sellen

自由に使ってよいことを明示しておきます。



名無し

リンク

2014/9/13(Sat) 17:56:08|NO.64889

返信遅くなってすみません。
>>さくらさん
>>tds12さん
ありがとうございます。コード確認しました。
コード補完ソフトを作りたいと思っています。
tds12さんのコードでキャレット位置を取得->hsedsdkで全体の文字列取得->さくらさんのコードでトークン取得
でできないか試しています…



名無し

リンク

2014/9/13(Sat) 21:07:10|NO.64895


;***** カーソル位置のトークンを取得 ***** #module #deffunc gettoken var prm1,str prm2,int prm3 ;p1=トークンが代入される変数 ;p2=取得する文字列 ;p3=取得する行数? strText = prm2 : ls=strlen(strText) : if ls==0 : return -1 nIndex = prm3 : if nIndex<0 : nIndex=0 sdim strCharSet,256 strCharSet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_#" nStart = nIndex repeat if nStart<=0 : nStart=0: break strChar=strmid(strText,nStart,1) nFoundIndex=instr(strCharSet,0,strChar) if nFoundIndex<0 : nStart++ : break nStart-- loop nLength=strlen(strText) nEnd = nIndex repeat if nEnd>=nLength : nEnd=nLength : break strChar=strmid(strText,nEnd,1) nFoundIndex=instr(strCharSet,0,strChar) if nFoundIndex<0 : break nEnd++ loop if nStart>=nEnd : prm1 = "" : return 0 prm1=strmid(strText,nStart,nEnd-nStart) return 0 #global #include "hsedsdk.as" footyid=0 hsedtextren=0 hsed_getactfootyid footyid hsed_gettextlength hsedtextlen,footyid buf="" hsed_gettext buf,footyid sIns = "スクリプトエディタに送る文字列" hsed_sendstr sIns sdim buf2 if stat == 0:hsed_gettext buf2,footyid hsed_undo footyid repeat strlen(buf) + 1 if peek(buf,cnt) != peek(buf2,cnt):footyselstart = cnt:break loop title ""+footyselstart stop ;▼トークン(キーワード)を取得 *tokunget ;▼行番号を取得 val=strmid(buf,0,footyselstart) notesel val footyline=notemax noteunsel ;▼行位置を取得 ;▼現在カーソル位置の行の文字列を読みこむ ;▼先頭のタブを除去 t=peek(footyline,0) if t==$09 : st=strmid(footyid,1,len-1) : linepos-=1 ;▼トークンを取得 gettoken outtoken,footyline,linepos ;▼取得したキーワードを表示 dialog " 取得されたキーワード : "+outtoken,0 stop

トークン取得のところがわかりませんでした…



skyblue

リンク

2014/9/15(Mon) 09:02:20|NO.64958

F1キーヘルプのhelpmanはソースが公開されていますので参考にしてはどうですか?



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