|
|
|
2009/2/15(Sun) 22:01:18|NO.23414
初連投、申し訳ありません;;
---
以前のタブサンプルを元に、組み込むことができましたが
どうもタブコントロール内では、IEが動作しないorHSPエラーするようです・・・
以下のソース(サンプル)を実行して、ウィンドウを変更すると
#Error 3 in line 93 (obj.as)
-->パラメータの値が異常です
と、HSPさんのobjに怒られてしまいます。
ご教授をどうぞ、よろしくお願いいたします><
==============基本ソース==============
#include "obj.as"
#uselib "user32"
#func MoveWindow "MoveWindow" int,int,int,int,int,int
#func SetWindowLongA "SetWindowLongA" int, int, int
#cfunc GetWindowLongA "GetWindowLongA" int, int
#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
#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
#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 , ginfo(20),ginfo(21),,,,400,300
SetWindowLongA hwnd, -16, GetWindowLongA( hwnd, -16 ) | $10000 | $40000
syscolor 15 : boxf
pos 0,0
CreateTab ginfo(20),ginfo(21), 1
hTabControl = stat
tab_a="http://hsp.tv/"
/////////////////////////TAB 1//////////////////
InsertTab "ネットにアクセス"
objsize 30,24
pos 0,0:button "←",*go_b_a
pos 30,0:button "R",*go_rel_a
pos 60,0:button "→",*go_f_a
objsize 60,24
pos 90,0:button "Home",*go_home_a
pos 0,24
axobj iean,"Shell.Explorer.2",ginfo_winx,ginfo_winy-24
ieean=stat//←一応、宣言しないといけないようなのでstatを代入。
iean->"Navigate" tab_a//←IEコンポネができたので、URLを読み込ませる
////////////////////////TAB 2///////////////////
InsertTab "隣のたぶ君"
objsize 30,24
pos 0,24
//axobj iebn,"Shell.Explorer.2",ginfo_winx,ginfo_winy-24
//////////////////////TAB 3////////////////////
InsertTab "たぶにぃ"
objsize 30,24
pos 37,41:mes "さんぷる"
pos 0,24
//axobj iecn,"Shell.Explorer.2",ginfo_winx,ginfo_winy-24
//////////////////////TAb 4////////////////////
InsertTab "タブさん"
objsize 30,24
font msgothic,14,0
pos 37,41:mes "さんぷる"
/////TABの追加はここまで。////
gsel :MoveWindow hTabControl, 0, 0, ginfo(12), ginfo(13), 1
gsel 1, 1
gsel
oncmd gosub *notify, $4E
oncmd gosub *wm_size,$05
stop
*onloadfin
stop
*notify
dupptr nmhdr, lparam, 12
if nmhdr.0 = hTabControl & nmhdr.2 = -551 {
ChangeTab
gsel
}
return
*wm_size
gsel
MoveWindow hTabControl, 0, 0, ginfo(12), ginfo(13), 1
//↑タブをウィンドウにフィットさせる:成功。
prms = ginfo(12),ginfo(13),0,0//ここで、IEの大きさを決定する。
//ginfo_winxも、試みました。
resizeobj ieean,prms,1//ここで、上記で指定した値に、IEコンポネをリサイズしたい・・・のにエラー
///同様にして、上の//で無効化しているIEコンポネもリサイズしたいです。
return
*go_home_a
iean->"Navigate" tab_a:goto *onloadfin
*go_f_a
iean->"GoForward":goto *onloadfin
*go_b_a
iean->"GoBack":goto *onloadfin
*go_rel_a
iean->"Refresh2" 3:goto *onloadfin
*OnClose
gsel 0,-1
delcom iean
end
| |
|
2009/2/15(Sun) 22:16:49|NO.23417
あなたがスペースアレルギーでないことを願います。
というのはおいといて……
obj.asの93行目にある objinfo(v2, 2) でエラーが起こっています。
この v2 は resizeobj の v1 と同じ値のようなので、
オブジェクトID ieean が存在しません。
この時 gselで選択されているウィンドウは ID 0 ですが、
ID 0 には、オブジェクトID0のタブコントロールがあるだけです。
axobj は ウィンドウID 1 に置かれているので、
resizeobj の前に gsel 1 が必要です。
|
|
2009/2/15(Sun) 22:38:51|NO.23418
resizeobj ieean,prms,1
のところを以下のものに置き換え。
gsel 0:gx=ginfo(12):gy=ginfo(13):gsel 1
MoveWindow objinfo(ieean,2), 0, 24, gx-5, gy-24-24, 1
|
|
2009/2/15(Sun) 22:42:11|NO.23419
|
|
2009/2/15(Sun) 23:29:12|NO.23420
コメント有難うございます。
>レノスさん
なるほど、ウィンドウ1に作成されていたので、0にまだ移っていなかった
だからエラー、ということですね。
>inoviaさん
書き換えたところ、動作しました。
だけど、疑問があります:
○MoveWindow objinfo(ieean,2), 0, 24, gx-5, gy-24-24, 1
・gyなどの値を代入によって作り、ginfoを使用しないこと
・-48ではなく、-24-24としていること(書き換えて動作したものの、怖いので-24-24にします
よろしければ、教えてくれるとうれしいです^^
P.S. バーが表示されていなかったので、上記ソースの一部に「←」を追加して、表示されるようにしました
gsel
gosub *wm_size //←
oncmd gosub *notify, $4E
oncmd gosub *wm_size,$05
stop
|
|
2009/2/15(Sun) 23:31:35|NO.23421
P.S.は撤回します;
起動時にウィンドウにバーが表示されるようになりますが、
ウィンドウサイズ変更時に、変更されなくなったため、上記P.S.の「←」は消しました...
(解決策があるとうれしいです...
|
|
2009/2/15(Sun) 23:42:09|NO.23422
連投申し訳ありません。
---
ソースを次の通りに修正しました:
(変更部分のみ//<<<<<< しています
このソースを実行し、ウィンドウをリサイズした場合
・「←」ボタンがウィンドウいっぱいに表示されてしまいました。
・2番目のタブのバーがありません
どうしてなのでしょうか...
(環境:Vista Ultimate SP1/Aeroはオン)
#include "obj.as"
#uselib "user32"
#func MoveWindow "MoveWindow" int,int,int,int,int,int
#func SetWindowLongA "SetWindowLongA" int, int, int
#cfunc GetWindowLongA "GetWindowLongA" int, int
#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
#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
#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 , ginfo(20),ginfo(21),,,,400,300
SetWindowLongA hwnd, -16, GetWindowLongA( hwnd, -16 ) | $10000 | $40000
syscolor 15 : boxf
pos 0,0
CreateTab ginfo(20),ginfo(21), 1
hTabControl = stat
tab_a="http://hsp.tv/"
//////
InsertTab "ネットにアクセス"
objsize 30,24
pos 0,0:button "←",*go_b_a
pos 30,0:button "R",*go_rel_a
pos 60,0:button "→",*go_f_a
objsize 60,24
pos 90,0:button "Home",*go_home_a
pos 0,24
axobj iean,"Shell.Explorer.2",ginfo_winx,ginfo_winy-24
ieean=stat
iean->"Navigate" tab_a
////
InsertTab "隣のたぶ君"
objsize 30,24
pos 0,24
axobj iebn,"Shell.Explorer.2",ginfo_winx,ginfo_winy-24//<<<<<<<<<<<<
ieebn=stat//<<<<<<<<<<<<
tab_b="http://www.yahoo.co.jp"//<<<<<<<<<<<<
iebn->"Navigate" tab_b//<<<<<<<<<<<<
///
InsertTab "たぶにぃ"
objsize 30,24
pos 37,41:mes "さんぷる"
pos 0,24
//axobj iecn,"Shell.Explorer.2",ginfo_winx,ginfo_winy-24
///
InsertTab "タブさん"
objsize 30,24
font msgothic,14,0
pos 37,41:mes "さんぷる"
///
gsel :MoveWindow hTabControl, 0, 0, ginfo(12), ginfo(13), 1
gsel 1, 1
gsel
oncmd gosub *notify, $4E
oncmd gosub *wm_size,$05
stop
*onloadfin
stop
*notify
dupptr nmhdr, lparam, 12
if nmhdr.0 = hTabControl & nmhdr.2 = -551 {
ChangeTab
gsel
}
return
*wm_size
gsel
MoveWindow hTabControl, 0, 0, ginfo(12), ginfo(13), 1
gsel 0:gx=ginfo(12):gy=ginfo(13):gsel 1
MoveWindow objinfo(ieean,2), 0, 24, gx-5, gy-24-24, 1
MoveWindow objinfo(ieebn,2), 0, 24, gx-5, gy-24-24, 1//<<<<<<<TAB 2のIEを動かしてみる
return
*go_home_a
iean->"Navigate" tab_a:goto *onloadfin
*go_f_a
iean->"GoForward":goto *onloadfin
*go_b_a
iean->"GoBack":goto *onloadfin
*go_rel_a
iean->"Refresh2" 3:goto *onloadfin
*OnClose
gsel 0,-1
delcom iean
end
| |
|
2009/2/16(Mon) 00:47:49|NO.23423
> ← がでかくなる件
2つめのタブのaxobjは、ウィンドウID 2 にあります。1 ではありません。
ieebn は(おそらく) 0 なので、ウィンドウID 1 のオブジェクトID 0 である「←」ボタンが
MoveWindow でサイズ変更されます。
つまり gsel 2 が必要。
|
|
2009/2/16(Mon) 01:18:52|NO.23426
>gyなどの値を代入によって作り、ginfoを使用しないこと
ginfoは現在操作されているウィンドウの情報を取得するものです。
メインのウィンドウ(ID=0)と
実際にIEコンポが貼り付けられているウィンドウ(ID=1)の操作IDが違う為、
別の変数に代入して実行しているわけです。
gsel 0:gx=ginfo(12):gy=ginfo(13):gsel 1
MoveWindow objinfo(ieean,2), 0, 24, gx-5, gy-24-24, 1
>-48ではなく、-24-24としていること(書き換えて動作したものの、怖いので-24-24にします
別に-48でも構いません。
axobj iean,"Shell.Explorer.2",ginfo_winx,ginfo_winy-24
と配置されていたので、なんとなく-24を2回つけてみただけです。
|
|
2009/2/16(Mon) 07:23:40|NO.23428
詳しい解説、どうもありがとうございますm(__)m
|
|