|
|
|
2012/3/8(Thu) 19:31:22|NO.45285
タイトルどおり、タブに画像をつけたいです。
ジョークソフトでタブのつまみに部分に画像等で色をつけたくて・・・
objimageでは意味がないとわかったので、別の方法を模索中です。
何かいい手段はないものでしょうか?
buffer 4
picload "vscan2.jpg"
gsel 0
#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 , 427*2, 365*2
syscolor 15 : boxf
pos , 300
CreateTab 427*2, 170*2, 1
hTabControl = stat
objimage 4,492,265
InsertTab " 結果の概略 "
pos 50, 50 : mes "A"
InsertTab " 要注意 "
pos 50, 50 : mes "B"
InsertTab " 結果の詳細 "
pos 50, 50 : mes "C"
gsel 1, 1
gsel
oncmd gosub *notify, $4E
stop
*notify
dupptr nmhdr, lparam, 12
if nmhdr.0 = hTabControl & nmhdr.2 = -551 {
ChangeTab
gsel
}
return
| |
|
2012/3/8(Thu) 21:30:45|NO.45289
wm_drawitem メッセージを使用します。
winobj に TCS_OWNERDRAWFIXED を指定して、コントロールを作成。
oncmd gosub *drawitem , /*WM_DRAWITEM*/ 0x2B
のサブルーチンで、背景とテキストの描画を行います。
背景の描画方法は bitblt で hsp ウィンドウ から コピーするか、あるいは、
FillRect で ブラシを指定して塗りつぶします。
テキストは DrawText を使用することが一般的です。
余り良い例とは言えませんが即興で書いたスクリプトも載せておきます。
#include "gdi32.as"
#include "user32.as"
buffer 4
picload "vscan2.jpg"
gsel 0
#module
#deffunc CreateTab int p1, int p2, int p3, int p4
winobj "systabcontrol32", "", , $52000000 | p4, p1, p2
hTab = objinfo(stat, 2)
GetStockObject 7
sendmsg hTab, $30, stat
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 , 427*2, 365*2
syscolor 15 : boxf
pos , 300
#define TCS_OWNERDRAWFIXED $00002000
oncmd gosub *drawitem , /*WM_DRAWITEM*/ 0x2B
CreateTab 427*2, 170*2, 1 , TCS_OWNERDRAWFIXED
hTabControl = stat
objimage 4,492,265
InsertTab " 結果の概略 "
pos 50, 50 : mes "A"
InsertTab " 要注意 "
pos 50, 50 : mes "B"
InsertTab " 結果の詳細 "
pos 50, 50 : mes "C"
gsel 1, 1
gsel
oncmd gosub *notify, $4E
stop
#define BS_NULL $00000001
#define DT_CENTER $00000001
#define DT_VCENTER $00000004
#define TRANSPARENT $00000001
#if 0
typedef struct tagDRAWITEMSTRUCT { // dis
UINT CtlType;
UINT CtlID;
UINT itemID;
UINT itemAction;
UINT itemState;
HWND hwndItem;
HDC hDC;
RECT rcItem;
DWORD itemData;
} DRAWITEMSTRUCT;
#endif
*drawitem
#define ODS_SELECTED $00000001
// DRAWITEMSTRUCT
dim di,12
dupptr di,lparam,12*4,vartype("int")
if (di.4 & ODS_SELECTED){
tx = "inactive!!"
GetSyscolorBrush 29 : hb = stat
}else{
tx = "active!!"
GetSyscolorBrush 2:hb = stat
}
FillRect di.6 , varptr(di.7) , hb
SetBkMode di.6,TRANSPARENT
DrawText di.6,varptr(tx),-1,varptr(di.7),DT_CENTER|DT_VCENTER
return 0
*notify
dupptr nmhdr, lparam, 12
if nmhdr.0 = hTabControl & nmhdr.2 = -551 {
ChangeTab
gsel
}
return
| |
|
2012/3/9(Fri) 17:05:05|NO.45304
>>ヂオンさん
ありがとうございます。
背景の変更ができました。
よろしければ、Inserttabで作った文字列をそのまま表示させておきたいのですが、
できるでしょうか?
あともう一つよければ、bitbltが調べてもよくわからないので、
ご教授願えるでしょうか。
押しつけがましくてすみませんm(_ _)m
|
|
2012/3/9(Fri) 20:04:56|NO.45313
BitBltは提示されたサンプルでは使われていないぞ。
あまりスレッドの主題と関係のない事を聞かないほうがいい。
気になるのなら新しくスレッドを立てろ。
んで、BitBltは言わばgcopyみたいなもんで、
あるDC(Device Context)の画像情報をさまざまなオプションをつけて別のDCにコピーしたりできる。
Inserttabで作った文字列を……云々は別の人に聞いてくれ。
|
|
2012/3/10(Sat) 13:58:09|NO.45332
>>checkさん
ありがとうございます。BitBlt使ってみます。
|
|
2012/3/13(Tue) 05:32:43|NO.45403
すみません、すっかり忘れていました。
まだ見ているか解りませんが、投稿します。
変更点は
GetTabText 命令を追加した事と、それの戻り値を
DrawText 関数に 送る様にした事です。
#include "gdi32.as"
#include "user32.as"
buffer 4
picload "vscan2.jpg"
gsel 0
#module
#deffunc CreateTab int p1, int p2, int p3, int p4
winobj "systabcontrol32", "", , $52000000 | p4, p1, p2
hTab = objinfo(stat, 2)
GetStockObject 7
sendmsg hTab, $30, stat
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
#defcfunc GetTabText int ht_ , int idx_ , int len_
sdim pszText,len_
tcitem = 1, 0, 0, varptr(pszText),len_ , 0,0
sendmsg ht_,0x1305,idx_,varptr(tcitem)
return pszText
#global
screen , 427*2, 365*2
syscolor 15 : boxf
pos , 300
#define TCS_OWNERDRAWFIXED $00002000
oncmd gosub *drawitem , /*WM_DRAWITEM*/ 0x2B
CreateTab 427*2, 170*2, 1 , TCS_OWNERDRAWFIXED
hTabControl = stat
objimage 4,492,265
InsertTab " 結果の概略 "
pos 50, 50 : mes "A"
InsertTab " 要注意 "
pos 50, 50 : mes "B"
InsertTab " 結果の詳細 "
pos 50, 50 : mes "C"
gsel 1, 1
gsel
oncmd gosub *notify, $4E
stop
#define BS_NULL $00000001
#define DT_CENTER $00000001
#define DT_VCENTER $00000004
#define TRANSPARENT $00000001
#if 0
typedef struct tagDRAWITEMSTRUCT { // dis
UINT CtlType;
UINT CtlID;
UINT itemID;
UINT itemAction;
UINT itemState;
HWND hwndItem;
HDC hDC;
RECT rcItem;
DWORD itemData;
} DRAWITEMSTRUCT;
#endif
*drawitem
#define ODS_SELECTED $00000001
// DRAWITEMSTRUCT
dim di,12
dupptr di,lparam,12*4,vartype("int")
if (di.4 & ODS_SELECTED){
//tx = "inactive!!"
GetSyscolorBrush 29 : hb = stat
}else{
//tx = "active!!"
GetSyscolorBrush 2:hb = stat
}
FillRect di.6 , varptr(di.7) , hb
SetBkMode di.6,TRANSPARENT
logmes strf("%d,%d,%d",di.5,di.2,0xFF)
DrawText di.6,GetTabText(di.5,di.2,0xFF),-1,varptr(di.7),DT_CENTER|DT_VCENTER
return 0
*notify
dupptr nmhdr, lparam, 12
if nmhdr.0 = hTabControl & nmhdr.2 = -551 {
ChangeTab
gsel
}
return
| |
|
2012/3/31(Sat) 14:30:57|NO.45666
>>ヂオンさん
ありがとうございます!
本当に役に立ちました!
|
|