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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0215
vineタブコントロール内では、IEコンポーネントのリサイズは不可能でしょうか?9解決


vine

リンク

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 が必要です。



inovia

リンク

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



inovia

リンク

2009/2/15(Sun) 22:42:11|NO.23419

あと、この辺を見ておくと勉強になるかもです。

http://lhsp.s206.xrea.com/command/objinfo.html



vine

リンク

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



vine

リンク

2009/2/15(Sun) 23:31:35|NO.23421

P.S.は撤回します;

起動時にウィンドウにバーが表示されるようになりますが、
ウィンドウサイズ変更時に、変更されなくなったため、上記P.S.の「←」は消しました...
(解決策があるとうれしいです...



vine

リンク

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 が必要。



inovia

リンク

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回つけてみただけです。



vine

リンク

2009/2/16(Mon) 07:23:40|NO.23428

詳しい解説、どうもありがとうございますm(__)m



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