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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
1015
そいやタブブラウザのウィンドウサイズ可変について教えてください。2未解決


そいや

リンク

2011/10/15(Sat) 16:28:17|NO.42400

前回こちらの掲示板にて、タブブラウザのタブ切り替えで戻る、進む、戻るなどのボタンの機能反映について教えてもらいましたが、
今回+ウィンドウサイズ可変の機能をつけたいのですが、
デフォルトのタブ ヤフーの画面はウィンドウサイズを変更できるのですが、
ヤフーの画面のウィンドウサイズ変更後に、グーグルのタブをクリックしても、
グーグルの画面はウィンドウに合わせてCOMオブジェクトのサイズに合ってくれません。
修正箇所を宜しければ教えてください。

下記にソース張ります。

#include "user32.as"
#include "comctl32.as"

#define WS_CLIPSIBLINGS 0x04000000
#define WS_CHILD 0x40000000
#define WS_VISIBLE 0x10000000
#define TCIF_TEXT 0x0001
#define TCM_FIRST 0x1300
#define TCM_INSERTITEMA (TCM_FIRST + 7)
#define TCM_GETCURSEL (TCM_FIRST + 11)
#define TCM_ADJUSTRECT (TCM_FIRST + 40)
#define SW_HIDE 0
#define SW_SHOW 5
#enum BTID_BACK = 0
#enum BTID_REFRESH
#enum BTID_FORWARD
#enum BTID_HOME
#enum BTID_CLOSE
#define WM_NOTIFY 0x004E
#define TCN_FIRST (-550)
#define TCN_SELCHANGE (TCN_FIRST - 1)
#define WM_SIZING 0x0214

screen 0, ginfo(20), ginfo(21),0,-2,0
width 900,700 : title "Web Browser"

Window_X = ginfo(10) : Window_Y = ginfo(11)

GetWindowLong hwnd, -16
SetWindowLong hwnd, -16, stat | $10000 | $40000

// タブコントロール作成
InitCommonControls
winobj "systabcontrol32", "", 0, WS_CLIPSIBLINGS|WS_CHILD|WS_VISIBLE, Window_X - 20 , Window_Y - 100
hTab = objinfo_hwnd(stat)
if hTab == 0 : end

// タブアイテム追加
dim tci, 7
sdim buf, 10, 5
buf = "yahoo", "google"
repeat 2
tci = TCIF_TEXT, 0, 0, varptr(buf.cnt), strlen(buf.cnt)
sendmsg hTab, TCM_INSERTITEMA, cnt, varptr(tci)
loop

// ボタン作成
dim rect, 4
sendmsg hTab, TCM_ADJUSTRECT, 0, varptr(rect)
btw = 50
bth = 24
buf = "戻る", "更新", "進む", "HOME", "閉じる"
pos rect.0, rect.1
repeat 5
if cnt == 3 : btw = 60
objsize btw, bth
button buf.cnt, *lb_button
if cnt == 0 : btFirst = stat //最初のボタンIDを保存
pos ginfo_cx+btw, rect.1
loop

// IEオブジェクト作成
dimtype ie, vartype("comobj"), 2
sdim urls, 1024, 2
urls.0 = "http://www.yahoo.co.jp/"
urls.1 = "http://www.google.co.jp/webhp?sourceid=navclient&hl=ja&ie=UTF-8"
repeat 2
pos rect.0, rect.1+bth
axobj ie.cnt, "Shell.Explorer.2",Window_X - 20-rect.0, Window_Y - 100-bth-rect.1
if cnt == 0 : ieFirst = stat // 最初のIEのオブジェクトIDを保存
if cnt == 1 : ShowWindow objinfo_hwnd(stat), SW_HIDE // 二つ目のIEを非表示に
tmp = ie.cnt // ie.cnt->"navigate"だとエラー???
tmp->"navigate" urls.cnt
delcom tmp
loop
ieID = 0 //アクティブなタブID
activeIE = ie.ieID //アクティブなIEオブジェクト
oncmd gosub *lb_OnNotify, WM_NOTIFY
oncmd gosub *sizing, WM_SIZING
stop

*lb_button
// ボタンが押された
switch stat-btFirst
case BTID_BACK
activeIE->"GoBack"
swbreak
case BTID_REFRESH
activeIE->"Refresh2" 3
swbreak
case BTID_FORWARD
activeIE->"GoForward"
swbreak
case BTID_HOME
activeIE->"Navigate" urls.ieID
swbreak
case BTID_CLOSE
delcom activeIE
end
swbreak
swend
stop

*lb_OnNotify
dupptr nmhdr, lparam, 12

// タブが変更された
if nmhdr.0 = hTab & nmhdr.2 = TCN_SELCHANGE {
ShowWindow objinfo_hwnd(ieID+ieFirst), SW_HIDE // アクティブだったタブのIEを非表示に
sendmsg hTab, TCM_GETCURSEL, 0, 0 // アクティブになったタブのID取得
ieID = stat
ShowWindow objinfo_hwnd(ieID+ieFirst), SW_SHOW // アクティブになったタブのIEを表示
// activeIEも変更する
delcom activeIE
activeIE = ie(ieID)
}
return

*sizing
if (Window_Y ! ginfo (11)) or (Window_X ! ginfo (10)):{
Window_X = ginfo(10) : Window_Y = ginfo(11):clrobj 6,6
pos 5,55 : axobj ie.cnt, "Shell.Explorer.2", Window_X - 25 , Window_Y - 100
tmp = ie.cnt // ie.cnt->"navigate"だとエラー???
tmp->"navigate" urls.cnt

}

redraw 1 : redraw 0

return



この記事に返信する


ORZ

リンク

2011/10/15(Sat) 19:32:36|NO.42424

前回誰も指摘しなかったのなら言うが、ソースコードは<pre>タグで囲う事。
ソースコードはコメントとインデントをふんだんに盛り込むこと。



pizza

リンク

2011/10/16(Sun) 03:54:37|NO.42439

*sizingの中身をみると配列変数やcntの理解が足りない印象をうけます。
配列、cntの使い方をヘルプや講座で確認してください。

サイズ変更についてはリサイズのたびオブジェクトを作り直すのはどうかとおもうので、
objinfo_hwndで取得したハンドルに対してSetWindowPosでリサイズしてください。

またはobj.asのresizeobj命令でもできます。

※私がここに張ったサンプルやモジュールは自由に使ってかまいませんが、
理解せずに部分的にコピペで使うのはバグの元です。



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