>>hexa.hemiさん
実行したところ落ちる事はなくなりました。
が、今度はエラーが表示されてしまいます。
やはりオブジェクトIDが上手く取得できていないのでしょうか?
以下のソースで再現致しました。
; 超低機能なタブコントロール作成モジュール (by Kpan)
#module
#uselib "user32"
#func GetClientRect "GetClientRect" int, int
#func SetWindowLong "SetWindowLongA" int, int, int
#func SetParent "SetParent" int, int
#uselib "gdi32"
#cfunc GetStockObject "GetStockObject" int
; CreateTab p1, p2, p3, p4
; タブコントロールを設置します。statにタブコントロールのハンドルが
; 返ります。
; p1〜p2=タブコントロールのX/Y方向のサイズ
; p3(1)=タブの項目として貼り付けるbgscr命令の初回ウィンドウID値
; p4=タブコントロールの追加ウィンドウスタイル
#deffunc CreateTab int p1, int p2, int p3, int p4
winobj "systabcontrol32", "", , $52000000 | p4, p1, p2
hTab = objinfo(stat, 2)
sendmsg hTab, $30, GetStockObject(17)
TabID = p3
if TabID = 0 : TabID = 1
dim rect, 4
return hTab
; InsertTab "タブつまみ部分の文字列"
; タブコントロールに項目を追加します。
#deffunc InsertTab str p2
pszText = p2 : tcitem = 1, 0, 0, varptr(pszText)
sendmsg hTab, $1307, TabItem, varptr(tcitem)
GetClientRect hTab, varptr(rect)
sendmsg hTab, $1328, , varptr(rect)
bgscr TabID + TabItem, rect.2 - rect.0, rect.3 - rect.1, 2, rect.0, rect.1
SetWindowLong hwnd, -16, $40000000
SetParent hwnd, hTab
TabItem++
return
; タブ切り替え処理用
#deffunc ChangeTab
gsel wID + TabID, -1
sendmsg hTab, $130B
wID = stat
gsel wID + TabID, 1
return
#global
; 以下、サンプル
screen , 700, 200
syscolor 15 : boxf
; タブコントロールの設置。第3パラはbgscr命令で作成するウィンドウ
; IDの初期値です。たとえば、下のように「1」でタブの項目が4個あると
; すると、1〜4のウィンドウが使われます。「2」でタブの項目が5個とすると、
; 2〜6が使われます。別で使用するウィンドウID値と被らないよう注意。
pos 0, 0
CreateTab 700, 200, 1
; タブつまみ切り替え時に利用するタブコントロールのハンドルを取得
hTabControl = stat
; このサンプル上ではbgscr命令で作成したウィンドウID値「1」が使われ
; ます。
InsertTab "AAA"
buf = "テスト\nHSP\nテステス\nHotSP"
cont = buf
contents = cont;検索結果が入る変数
sel = 0;リストボックスで選択されている行が入る
swd = "";検索する文字列
rombuf = "";一時的に使う変数
bwd = "x";inputの内容が変更されたか取得するためのもの
flag1=1
notesel cont;contの変数をメモリノートパッドのバッファに設定
objsize 620,51
pos 5,5
syscolor 15 : boxf
listbox sel, 60, cont;リストボックス配置
pos 5,100
oncmd gosub *Search, $111
input swd , 620 , 20,-1
hinput = objinfo(stat, 2)
; タブの項目追加が終わったら、タブ内に貼り付けたbgscr命令が非表示
; 状態になっているので、表示されるようgsel命令を指定。CreateTab命令で
; 指定したウィンドウIDの初期値と同じ値を指定します。
gsel 1, 1
; 元々のscreen命令のウィンドウID 0に描画先を戻します。
gsel
; タブ項目切り替え処理時のメッセージ (WM_NOTIFY)
oncmd gosub *notify, $4E
stop
; タブ項目切り替え処理部分です。
*notify
dupptr nmhdr, lparam, 12
if nmhdr.0 = hTabControl & nmhdr.2 = -551 {
ChangeTab
; 元々のscreen命令のウィンドウID 0に描画先を戻します。
gsel
}
return
*Search
if swd != bwd {;inputの内容が変更されたら
bwd = swd;inputの内容が変更されたか取得するための変数の内容を変更する。
contents = "";検索結果が入る変数を初期化
if swd != "" {;検索文字列が空欄以外の場合
repeat noteinfo(0);リストボックスの内容の行数分ループをする。
noteget rombuf, cnt;bufにその行の内容を入れる。
if instr(rombuf, 0, swd) != -1 : contents += rombuf + "\n";検索する。
loop
} else : contents = cont;空欄の場合はすべて表示
redraw 0
objprm 0, contents
redraw 1
}
return