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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0724
さか自動コンパイルチェック0解決


さか

リンク

2020/7/24(Fri) 20:19:14|NO.91067

以前に公開しましたが3.6でhsed_gettextが正しく取得できるようになったので
改めて。
HSPエディタの下部に組み込まれ、自動でリアルタイムにコンパイルチェックし
ます。エラー行のリストをクリックするとエラー行へカーソル移動します。
良かったら自由に改良して使ってみてください。3.6で使用してください。

#include "hsedsdk.as" #include "user32.as" #include "hspcmp.as" #include "kernel32.as" #uselib "psapi.dll" #func GetModuleFileNameEx "GetModuleFileNameExA" sptr , sptr , sptr , sptr #define tl "コンパイルチェック" #packopt name tl #packopt hide 1 onexit goto *終わり ;--- HSPエディタ hwnd取得 --- flg = 0 repeat 10 hsed_getwnd MAIN_HWND, HGW_MAIN: if stat == 0: flg = 1: break wait 10 loop if flg == 0: dialog "HSPエディタを起動してください", 1, "" ;--- 保持用変数 --- WIN_SY = 88 ; 高さ S_SX = -1: S_SY = -1 ; サイズ保持 S_TXT = "" ; テキスト内容保持 S_CMP = "" ; コンパイルメッセージ保持 S_CMPL = -1 ; コンパイルメッセージ行保持 fname = "": objname = "" ;--- HSPインストールディレクトリ取得 --- hspDir = "" pId = 0: GetWindowThreadProcessId MAIN_HWND, varptr( pId ) // プロセスID→プロセス OpenProcess 0x001F0FFF/*PROCESS_ALL_ACCESS*/, 1, pId: prc = stat // ファイル名取得 fileNm = "": GetModuleFileNameEx prc, hMod, varptr( fileNm ), 2048 hspDir = getpath( fileNm, 32 ) ;--- コンパイルウィンドウ --- screen 0, ginfo_dispx, ginfo_dispy ; ウィンドウのスタイルを変更 GetWindowLong hwnd, -16 ;SetWindowLong hwnd, -16, stat - $20000 SetWindowLong hwnd, -16, stat - $800000 title tl SetParent hwnd, MAIN_HWND ;--- コンパイルリストボックス配置 --- font "MS ゴシック", 18: objmode 2 sdim cmpList objsize ginfo_winx: listbox lstbx, ginfo_winy, cmpList: lstNo = stat: hLst = objinfo( stat, 2 ) ; hspエディタをアクティブ SetForegroundWindow MAIN_HWND ;--- メイン無限ループ --- *@ wait 20 hsed_getwnd MAIN_HWND, HGW_MAIN: if stat != 0: dialog "end": stop ; HSPエディタを終了したら終わり gosub *リサイズ gosub *テキスト取得 ; 行選択 if ginfo( 2 ) >= 0: gosub *行選択 ; テキスト変更なし if S_TXT == txt: goto *@b S_TXT = txt gosub *コンパイル goto *@b stop *行選択 wait 10 ; ウェイトを入れないと行取得が遅れる if CmpList != "" and lstbx < 0: goto *@f split CmpList, "\n", istr mmm = istr( lstbx ) gyo = -1: i2 = instr( mmm, 0, "行目)" ): if i2 < 0: goto *@f i1 = i2 - 1 repeat if peek( mmm, i1 ) = '(': break i1 -- loop gyo = int( strmid( mmm, i1+1, i2-i1-1 ) ) // エディット行へ sendmsg hIF@hsedsdk, _HSED_SETCARETLINE@hsedsdk, footyId, gyo - 1 *@ ; hspエディタをアクティブ SetForegroundWindow MAIN_HWND return *テキスト取得 ; アクティブなタブのIDの取得 hsed_getacttabid tabid: if stat == 1: return ; タブのIDからFootyのIDを取得 hsed_getfootyid footyId, tabid ; テキストの文字列長を取得 hsed_gettextlength len, footyId sdim txt, len + 1 ; 編集中のテキストを取得 hsed_gettext txt, footyId return *コンパイル ;-------------------------------------------------------- ; コンパイル用ファイル名 sdim srcFile: hsed_getpath srcFile, tabid srcFile = "" + getpath( srcFile, 32 ): if srcFile = "": srcFile = dir_cur + "\\" srcFile = srcFile +"hspcmptmp" fname = srcFile+".hsp" ; スクリプトファイル名 bsave fname, txt, strlen( txt ) objname = srcFile+".obj" ; オブジェクトファイル名 hsc_ini fname hsc_objname objname hsc_compath hspDir+"\\common\\" hsc_comp 1: res = stat ; コンパイル mesbuf = "" if res != 0{ hsc3_messize sz sdim mesbuf, sz + 1 hsc_getmes mesbuf CmpList = mesbuf } if S_CMP != mesbuf{ objprm 0, mesbuf notesel mesbuf sendmsg hLst, $197, notemax-1 ;LB_SETTOPINDEX sdim mesbuf_s, sz + 1 S_CMP = mesbuf } return *リサイズ ;------------------------------------------------------- ;--- 縦幅取得 --- ; ツールバー hsed_getwnd iHwnd, HGW_TOOLBAR ; ハンドル取得 dim gt, 4: GetWindowRect iHwnd, varptr( gt ): x1 = gt.0: y1 = gt.1: x2 = gt.2: y2 = gt.3 sx = x2 - x1: yy1 = y2 ; ステータスバー hsed_getwnd iHwnd, HGW_STATUSBAR ; ハンドル取得 dim gt, 4: GetWindowRect iHwnd, varptr( gt ): x1 = gt.0: y1 = gt.1: x2 = gt.2: y2 = gt.3 sy = y1 - yy1 ; サイズ変更してなかったらリターン if S_SX == sx and S_SY == sy: return S_SX = sx: S_SY = sy ; エディタサイズ変更 hsed_getwnd iHwnd, HGW_CLIENT ; ハンドル取得 MoveWindow iHwnd, 0, 25, sx, sy-WIN_SY, 1 ; コンパイル ウィンドウ --------- MoveWindow hwnd, 0, sy - WIN_SY + 24, sx - 2, WIN_SY, 1 MoveWindow hLst, 0, 0, ginfo_winx, ginfo_winy, 1 ; x, y, 幅, 高さ, 再描画 return *終わり exist fname: if strsize >= 0: delete fname exist objname: if strsize >= 0: delete objname end



この記事に返信する


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