ツリービュー
Posted: 2006年1月15日(日) 18:44
ツリービューの作成方法を教えてください。
手短に教えていただければ幸いです。
コードをそのまま書いてもらったら結構です。
手短に教えていただければ幸いです。
コードをそのまま書いてもらったら結構です。
RADの「コントロール」の一番右側、上から2つ目にツリービューがあります。雷電さん さんが書きました:> ツリービューの作成方法を教えてください。
> 手短に教えていただければ幸いです。
>
> コードをそのまま書いてもらったら結構です。
コード: 全て選択
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim hAny As Long
Dim tvi As TVINSERTSTRUCT
Dim hTreeItem As Long
'ツリービューのハンドルを得る
hAny = GetDlgItem( hMainWnd, TreeView1 )
'ルートの項目(アイテム)を追加する。
tvi.hParent = TVI_ROOT
tvi.hInsertAfter = TVI_SORT
tvi.item.mask = TVIF_TEXT
tvi.item.pszText = "る~と"
hTreeItem = TreeView_InsertItem( hAny , tvi )
'子アイテムを追加する。
tvi.hParent = hTreeItem
tvi.item.pszText = "その次"
hTreeItem = TreeView_InsertItem( hAny , tvi )
tvi.item.pszText = "その次にもう1つ"
hTreeItem = TreeView_InsertItem( hAny , tvi )
'子の子アイテムを追加する。
tvi.hParent = hTreeItem
tvi.item.pszText = "その次の次"
hTreeItem = TreeView_InsertItem( hAny , tvi )
End Sub
'TreeViewで使用する追加定義。
Const TVI_ROOT = &HFFFF0000
Const TVI_SORT = (&HFFFF0003)
Const TV_FIRST = &H1100
Const TVM_INSERTITEM = (TV_FIRST + 0)
Type TVINSERTSTRUCT
hParent As Long
hInsertAfter As Long
item As TVITEM
End Type
Function TreeView_InsertItem( hWnd As Long, ByRef lpis As TVINSERTSTRUCT ) As Long
TreeView_InsertItem = SendMessage( hWnd, TVM_INSERTITEM, 0, VarPtr(lpis) )
EndFunction
コード: 全て選択
item As TVITEM
コード: 全て選択
Dim tvHitTestInfo As TVHITTESTINFO
Dim pointApi As POINTAPI
GetCursorPos(pointApi)
tvHitTestInfo.pt.x=pointApi.x
tvHitTestInfo.pt.y=pointApi.y
'hWndはツリービューのハンドル
ScreenToClient(hWnd,tvHitTestInfo.pt)
SendMessage(hWnd,TVM_HITTEST,NULL,tvHitTestInfo As LPARAM)
If tvHitTestInfo.flags And TVHT_ONITEMBUTTON Then
'ここにそのコードが書いてある位置に移動するコード?を書く
'ダブルクリックされたノードのハンドルはtvHitTestInfo.hItemに格納されている
End If
コード: 全て選択
MainWnd.sbp(279) - "TVHITTESTINFO" 無効な識別子です
MainWnd.sbp(283) - "tvHitTestInfo.pt.x" 無効な識別子です
MainWnd.sbp(284) - "tvHitTestInfo.pt.y" 無効な識別子です
MainWnd.sbp(287) - "tvHitTestInfo.pt" 無効な識別子です
MainWnd.sbp(287) - "hWnd" 無効な識別子です
MainWnd.sbp(288) - "tvHitTestInfo" 無効な識別子です
MainWnd.sbp(288) - "TVM_HITTEST" 無効な識別子です
MainWnd.sbp(290) - "tvHitTestInfo.flags" 無効な識別子です
MainWnd.sbp(290) - "TVHT_ONITEMBUTTON" 無効な識別子です
MainWnd.sbp(290) - 実数に対して "and" 演算子は利用できません
コード: 全て選択
Type TVHITTESTINFO
pt As POINTAPI
flags As DWord
hItem As DWord
End Type
Const TVM_HITTEST=&H1111
Const TVHT_ONITEMBUTTON=&H0010
コード: 全て選択
MainWnd.sbp(389) - "hWnd" 無効な識別子です
MainWnd.sbp(390) - "tvHitTestInfo" 型が違います
コード: 全て選択
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim hAny As Long
Dim tvi As TVINSERTSTRUCT
Dim hTreeItem As Long
'ツリービューのハンドルを得る
hAny = GetDlgItem( hMainWnd, TreeView1 )
'ルートの項目(アイテム)を追加する。
tvi.hParent = TVI_ROOT
tvi.hInsertAfter = TVI_SORT
tvi.item.mask = TVIF_TEXT
tvi.item.pszText = "MISSION"
hTreeItem = TreeView_InsertItem( hAny , tvi )
'子アイテムを追加する。
tvi.hParent = hTreeItem
tvi.item.pszText = "Camp1"
hTreeItem = TreeView_InsertItem( hAny , tvi )
tvi.item.pszText = "Camp2"
hTreeItem = TreeView_InsertItem( hAny , tvi )
'子の子アイテムを追加する。
tvi.hParent = hTreeItem
tvi.item.pszText = "戦闘機"
hTreeItem = TreeView_InsertItem( hAny , tvi )
tvi.item.pszText = "軽爆撃機"
hTreeItem = TreeView_InsertItem( hAny , tvi )
tvi.item.pszText = "重爆撃機"
hTreeItem = TreeView_InsertItem( hAny , tvi )
tvi.item.pszText = "艦船"
hTreeItem = TreeView_InsertItem( hAny , tvi )
tvi.item.pszText = "地上部隊"
hTreeItem = TreeView_InsertItem( hAny , tvi )
tvi.item.pszText = "地上物"
hTreeItem = TreeView_InsertItem( hAny , tvi )
tvi.item.pszText = "SetName"
hTreeItem = TreeView_InsertItem( hAny , tvi )
'子の子アイテムを追加する。
tvi.hParent = hTreeItem
tvi.item.pszText = "戦闘機"
hTreeItem = TreeView_InsertItem( hAny , tvi )
tvi.item.pszText = "軽爆撃機"
hTreeItem = TreeView_InsertItem( hAny , tvi )
tvi.item.pszText = "重爆撃機"
hTreeItem = TreeView_InsertItem( hAny , tvi )
tvi.item.pszText = "艦船"
hTreeItem = TreeView_InsertItem( hAny , tvi )
tvi.item.pszText = "地上部隊"
hTreeItem = TreeView_InsertItem( hAny , tvi )
tvi.item.pszText = "地上物"
hTreeItem = TreeView_InsertItem( hAny , tvi )
tvi.item.pszText = "SetName"
hTreeItem = TreeView_InsertItem( hAny , tvi )
End Sub
となってしまいます。MISSION
Camp1
Camp2
戦闘機
軽爆撃機
重爆撃機
艦船
地上部隊
地上物
SetName
MISSION
Camp1
戦闘機
軽爆撃機
重爆撃機
艦船
地上部隊
地上物
SetName
Camp2
戦闘機
軽爆撃機
重爆撃機
艦船
地上部隊
地上物
SetName
コード: 全て選択
SendMessage(hWnd,TVM_HITTEST,NULL,VarPtr(tvHitTestInfo) As LPARAM)
変数の識別名は勝手に変えちゃいました...(_ _)MISSION
> Camp1
> 戦闘機
> 軽爆撃機
> 重爆撃機
> 艦船
> 地上部隊
> 地上物
> SetName
> Camp2
> 戦闘機
> 軽爆撃機
> 重爆撃機
> 艦船
> 地上部隊
> 地上物
> SetName
コード: 全て選択
Dim hTreeView As HWND
Dim tvi As TVINSERTSTRUCT
Dim hTreeItem As HANDLE
Dim hTreeChildItem As HANDLE
'ツリービューのハンドルを得る
hTreeView=GetDlgItem(hMainWnd,TreeView1)
'ルートの項目(アイテム)を追加する。
With tvi
.hParent =TVI_ROOT
.hInsertAfter =TVI_SORT
.item.mask =TVIF_TEXT
.item.pszText ="MISSION"
End With
hTreeItem=TreeView_InsertItem(hTreeView,tvi)
'子アイテムを追加する。
With tvi
'親(ルート)のハンドルを設定
.hParent =hTreeItem
.item.pszText="Camp1"
hTreeChildItem=TreeView_InsertItem(hTreeView,tvi)
'孫アイテムを追加する。
'親(子)ノードのハンドルを設定
.hParent =hTreeChildItem
.hInsertAfter =TVI_LAST
.item.pszText ="戦闘機"
TreeView_InsertItem(hTreeView,tvi)
.item.pszText ="軽爆撃機"
TreeView_InsertItem(hTreeView,tvi)
.item.pszText ="重爆撃機"
TreeView_InsertItem(hTreeView,tvi)
.item.pszText ="艦船"
TreeView_InsertItem(hTreeView,tvi)
.item.pszText ="地上部隊"
TreeView_InsertItem(hTreeView,tvi)
.item.pszText ="地上物"
TreeView_InsertItem(hTreeView,tvi)
.item.pszText ="SetName"
TreeView_InsertItem(hTreeView,tvi)
End With
'子アイテムを追加する。
With tvi
'親(ルート)のハンドルを設定
.hParent =hTreeItem
.item.pszText="Camp2"
hTreeChildItem=TreeView_InsertItem(hTreeView,tvi)
'孫アイテムを追加する。
'親(子)ノードのハンドルを設定
.hParent =hTreeChildItem
.hInsertAfter =TVI_LAST
.item.pszText ="戦闘機"
TreeView_InsertItem(hTreeView,tvi)
.item.pszText ="軽爆撃機"
TreeView_InsertItem(hTreeView,tvi)
.item.pszText ="重爆撃機"
TreeView_InsertItem(hTreeView,tvi)
.item.pszText ="艦船"
TreeView_InsertItem(hTreeView,tvi)
.item.pszText ="地上部隊"
TreeView_InsertItem(hTreeView,tvi)
.item.pszText ="地上物"
TreeView_InsertItem(hTreeView,tvi)
.item.pszText ="SetName"
TreeView_InsertItem(hTreeView,tvi)
End With
コード: 全て選択
MainWnd.sbp(289) - "TVI_LAST" 無効な識別子です
ちょっと気になったので。横レスです(というか、放置しててすいません)。雷電さん さんが書きました:> またも、無効な識別子と出ました。
コード: 全て選択
Const TVI_ROOT = &HFFFF0000
Const TVI_FIRST = (TVI_ROOT+1)
Const TVI_LAST = (TVI_ROOT+2)
Const TVI_SORT = (TVI_ROOT+3)
コード: 全て選択
Const TVI_ROOT = &HFFFF0000
Const TVI_SORT = (TVI_ROOT+3)
どうやるのー?>SendMessage()関数、PostMessage()関数でメッセージを送ることが出来ます。