|
|
|
2015/6/2(Tue) 17:47:58|NO.69612
タブブラウザを作っているのですが、次のようなことがわかりません。
・タブつまみの名前変更
・タブつまみの削除
下にスクリプトを載せておいたので教えてください。
http://hsp.tv/play/pforum.php?mode=pastwch&num=41867より(一部改良)
#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)
// タブコントロール作成
InitCommonControls
pos 40,0:winobj "systabcontrol32", "", 0, WS_CLIPSIBLINGS|WS_CHILD|WS_VISIBLE, ginfo_sx-40,30, 0, 0
hTab = objinfo_hwnd(stat)
if hTab == 0 : end
//タブ操作ボタン
objsize 20,20
pos 0,0:button gosub"+",*newtab
pos 20,0:button gosub"-",*clausetab
// タブアイテム追加
dim tci, 7
sdim buf, 10, 5
buf = "TAB", "TAB"
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", ginfo_sx-rect.0, ginfo_sy-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オブジェクト
comevent ie_event, activeIE, "{34A715A0-6587-11D0-924A-0020AFC7AC4D}",*event//アクティブブラウザにイベントを設定する
oncmd gosub *lb_OnNotify, WM_NOTIFY
title "読み込み中..."
*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)
comevent ie_event, activeIE, "{34A715A0-6587-11D0-924A-0020AFC7AC4D}",*event//アクティブブラウザにイベントを設定する
if activeIE("readyState") = 4 {//読み込みを終えたときにタイトルを取得する
pDoc= activeIE("Document")
title pDoc("Title")
}else{
}
}
return
*event
dispid = comevdisp(ie_event)
if dispid=252{
pDoc = activeIE("Document")
title pDoc("Title")
//アクティブのつまみ名を変更する命令
return
}
return
*newtab
//タブを追加する命令
return
*clausetab
//アクティブのタブを閉じる命令
return
| |
|
2015/6/2(Tue) 20:42:58|NO.69614
・閉じる(クローズ)はcloseなんじゃ?
・とりあえずタブを5つまで生産できるようにした
・とりあえず閉じられるようにした
ただ、comobj型が何故かコピー出来ないから、ieコンポーネントの配列を
どう処理すればいいかわからないんだぜ……
#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)
#const TCM_DELETEITEM $1308
// タブコントロール作成
InitCommonControls
pos 40,0:winobj "systabcontrol32", "", 0, WS_CLIPSIBLINGS|WS_CHILD|WS_VISIBLE, ginfo_sx-40,30, 0, 0
hTab = objinfo_hwnd(stat)
if hTab == 0 : end
//タブ操作ボタン
objsize 20,20
pos 0,0:button gosub"+",*newtab
pos 20,0:button gosub"-",*clausetab
// タブアイテム追加
dim tci, 7
sdim buf, 10, 5
buf = "TAB", "TAB"
repeat 2
tci = TCIF_TEXT, 0, 0, varptr(buf.cnt), strlen(buf.cnt)
sendmsg hTab, TCM_INSERTITEMA, cnt, varptr(tci)
loop
tabcount = 2
// ボタン作成
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"), 5
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\" target=\"_blank\">http://www.google.co.jp/webhp?sourceid=navclient&hl=ja&ie=UTF-8</a>"
repeat 2
pos rect.0, rect.1+bth
axobj ie.cnt, "Shell.Explorer.2", ginfo_sx-rect.0, ginfo_sy-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オブジェクト
comevent ie_event, activeIE, "{34A715A0-6587-11D0-924A-0020AFC7AC4D}",*event//アクティブブラウザにイベントを設定する
oncmd gosub *lb_OnNotify, WM_NOTIFY
title "読み込み中..."
*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
gosub *clausetab
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)
comevent ie_event, activeIE, "{34A715A0-6587-11D0-924A-0020AFC7AC4D}",*event//アクティブブラウザにイベントを設定する
if activeIE("readyState") = 4 {//読み込みを終えたときにタイトルを取得する
pDoc= activeIE("Document")
title pDoc("Title")
}else{
}
}
return
*event
dispid = comevdisp(ie_event)
if dispid=252{
pDoc = activeIE("Document")
title pDoc("Title")
//アクティブのつまみ名を変更する命令
return
}
return
*newtab
//タブを追加する命令
tab__ = "タブ"
tci = TCIF_TEXT, 0, 0, varptr(tab__), strlen(tab__)
sendmsg hTab, TCM_INSERTITEMA, tabcount, varptr(tci)
pos rect.0, rect.1+bth
axobj ie.tabcount, "Shell.Explorer.2", ginfo_sx-rect.0, ginfo_sy-bth-rect.1
tmp = ie.tabcount // ie.cnt->"navigate"だとエラー???
urls.tabcount = "http://www.google.co.jp/"
tmp->"navigate" "http://www.google.co.jp/"
delcom tmp
tabcount++
return
*clausetab
//アクティブのタブを閉じる命令
sendmsg hTab, TCM_DELETEITEM, ieID, 0
/*for k, ieID, tabcount - 1
ie(k) = ie(k + 1)
next
delcom ik(tabcount - 1)
tabcount--*/
return
| |
|
2015/6/2(Tue) 21:30:24|NO.69616
おっとこれはやってしまったか……
No.69612とNo.69614は言うまでもなく別人ですごめんなさい
まさか空白だけ入れて書き込んだらこうなると思わなかった……
|
|
2015/6/4(Thu) 19:28:36|NO.69664
おお!ありがとうございます。
追加、削除できてます。
あと、つまみの名前変更は属性変更メッセージで出来ました。
#define TCM_SETITEM 0x1306
#define TCM_GETCURSEL 0x130B
Tab_name=<つまみの名前>
TCITEM = $1, 0, 0, varptr(Tab_name), strlen(Tab_name)
sendmsg <タブのハンドル>,TCM_GETCURSEL, 0, 0
sendmsg <タブのハンドル>,TCM_SETITEM,stat,varptr(TCITEM)
|
|
2015/6/4(Thu) 19:29:08|NO.69665
解決し忘れ
|
|