ツリービュー

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: ツリービュー

...

by 雷電 » 2006年1月19日(木) 18:15

意味がわからなくなってきた。
途中で、ぐしゃぐしゃになりました。

あ~、プログラムできるのかな?
>SendMessage()関数、PostMessage()関数でメッセージを送ることが出来ます。
どうやるのー?
http://yokohama.cool.ne.jp/chokuto/uraw ... index.html
見ても、余計にわからなくなった。

下にやりたいことを書きますので、そちらのほうに合うコードを書いてください。よろしくお願いします。

1、ツリービューに"エディットボックス"に書いてある内容で、アイテムを出す。

2、変数で、(~×変数)のようにする{ツリービューの中の内容を}

その他多数。

すいません、なんでも人に頼ってしまって

Re: できました2

by 7 » 2006年1月18日(水) 21:18

> TVM_INSERTITEMやTVM_DELETEITEMのメッセージの送り方は、ヘルプにもかかれてないんですが、教えていただけますか?
SendMessage()関数、PostMessage()関数でメッセージを送ることが出来ます。
これはヘルプにしっかり書かれています。

指定するべき値や戻り値は、http://yokohama.cool.ne.jp/chokuto/uraw ... index.htmlが参考になります。

できました2

by 雷電 » 2006年1月18日(水) 18:13

えと、

コード: 全て選択

Const TVI_ROOT = &HFFFF0000
Const TVI_SORT = (TVI_ROOT+3) 
は、入力済みでした。

後は作っていくだけーーー、何ですが、ツリービューの中の内容をアップデートするコード、TVM_INSERTITEMやTVM_DELETEITEMのメッセージの送り方は、ヘルプにもかかれてないんですが、教えていただけますか?

Re: すいません

by 淡幻星 » 2006年1月17日(火) 22:22

雷電さん さんが書きました:> またも、無効な識別子と出ました。
ちょっと気になったので。横レスです(というか、放置しててすいません)。
「無効な識別子」というエラーメッセージの意味を理解しておられますでしょうか?
「定義されていない変数、定数、構造体(その他もろもろ)ですよ!」という意味になります。
変数であれば定義忘れor記述ミスを調べる、定数や構造体であればその定義を探してきて記述する、と解決への手段をとります。

・・・理解しておられるのでしたら、大変失礼いたしましたm(_ _)m。
ははは。意味の分からないエラーメッセージほど頭にくる(イライラさせられる)ものはないですよね~、と共感したものでして、つい^^;

と、これだけで終わるのは大変失礼ですね(^^;)
えっと。これを記述してみてください。

コード: 全て選択

Const TVI_ROOT = &HFFFF0000
Const TVI_FIRST = (TVI_ROOT+1)
Const TVI_LAST = (TVI_ROOT+2)
Const TVI_SORT = (TVI_ROOT+3)
「"~"は既に定義されています」とかエラーが出ましたら、その行を削除してください。


以下、いつものように蛇足。
ツリービューのマクロ(C/C++のヤツ)を誰か全部移植してくれると嬉しいですね~。
ABでの定義済み/未定義にあわせて、必要な部分だけを記述したファイルの投稿もとむ☆(マテ。
…自分でしろって罠?はい、その通りですね。ま、まぁ、時間が出来たらやります(  ̄▽ ̄;)
てか、NoWest様がかなりの部分を既に移植してくださっているって罠。
http://www.discoversoft.net/forum/viewtopic.php?t=202

すいません

by 雷電 » 2006年1月17日(火) 21:55

何回もすいません。
またも、無効な識別子と出ました。

あ~~~いやだーー。
めんどくさいーー。

コード: 全て選択

MainWnd.sbp(289) - "TVI_LAST" 無効な識別子です
何回出るんだろ。

Re: それでも

by 7 » 2006年1月17日(火) 21:34

> それでも引っかかります。
hWndはツリービューのハンドルをそこに書いて下さいという意味で書いただけなので、ツリービューのハンドルを書いて下さい。
tvHitTestInfoの型については、構造体の扱いを誤ってました。ポインタを渡す必要があるので下のように書き直してください。

コード: 全て選択

SendMessage(hWnd,TVM_HITTEST,NULL,VarPtr(tvHitTestInfo) As LPARAM)
> 下のようにするにはどうしたらいいですか?
>
MISSION
>    Camp1
>      戦闘機
>      軽爆撃機
>      重爆撃機
>      艦船
>      地上部隊
>      地上物
>      SetName
>    Camp2
>      戦闘機
>      軽爆撃機
>      重爆撃機
>      艦船
>      地上部隊
>      地上物
>      SetName
変数の識別名は勝手に変えちゃいました...(_ _) うまいコメントが思い付きません...。
所で、コードの動きをしっかりと理解していますか?
指定すべき値や戻り値をしっかりと把握していればスムーズに行くはずです。
でも、ツリービューは面倒ですよね。自分はフォルダの階層構造をツリービューに表示するのに悪戦苦闘しています...。

それでも

by 雷電 » 2006年1月17日(火) 20:21

それでも引っかかります。
書いときますね。

コード: 全て選択

MainWnd.sbp(389) - "hWnd" 無効な識別子です
MainWnd.sbp(390) - "tvHitTestInfo" 型が違います
です。また、アドバイスお願いします。
それと、今やってるんですが、コードがおかしいのか、何か変なことになるんです。
それも、コードを書いておきます。 こうすると、ツリービューの内容が、
MISSION
   Camp1
   Camp2
     戦闘機
     軽爆撃機
     重爆撃機
     艦船
     地上部隊
     地上物
     SetName
となってしまいます。
下のようにするにはどうしたらいいですか?
MISSION
   Camp1
     戦闘機
     軽爆撃機
     重爆撃機
     艦船
     地上部隊
     地上物
     SetName
   Camp2
     戦闘機
     軽爆撃機
     重爆撃機
     艦船
     地上部隊
     地上物
     SetName

Re: うわーー

by 7 » 2006年1月17日(火) 20:08

定数のことをサラっと忘れてました...。
以下のコードをグローバルな所に書いておけば大丈夫なはずです。

コード: 全て選択

Type TVHITTESTINFO
	pt As POINTAPI
	flags As DWord
	hItem As DWord
End Type

Const TVM_HITTEST=&H1111
Const TVHT_ONITEMBUTTON=&H0010
定数や構造体の定義はインターネットで検索すると大抵説明が見つかりますよ。

うわーー

by 雷電 » 2006年1月17日(火) 18:38

いろんなことが引っかかりましたーー。
無効な識別子とかいろんなのが出てきてしまった。

一応、コードだけ書いときます。

コード: 全て選択

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" 演算子は利用できません
以上のことが、デバックで引っかかった内容です。

Re: できました

by 7 » 2006年1月16日(月) 22:53

> それに付け加えなんですが、ルートのところをダブルクリックするとそのコードが書いてある位置に移動するというのを作ろうと思えば、どうやったら作れますか?
TVM_HITTESTというウィンドウメッセージを使います。
「コントロール内でマウスの左ボタンがダブルクリックされた時に」の場所に、下のように書きます。 テストしてないので上手く行かないかもしれません。
また、質問の意味を汲み取れてないので間違った解答かもしれません。

> また、定期的にそのツリービューの中の内容を更新しようと思えば、どういうコードを付け足さなければいけないですか?
定期的にツリービューの中の内容を描写について更新するならUpdateWindow()関数、
定期的にツリービューの中のアイテムを更新するならTVM_INSERTITEMやTVM_DELETEITEMというメッセージを送ります。

できました

by 雷電 » 2006年1月16日(月) 22:23

できましたよおーーーーー。
感激 (^^)v

それに付け加えなんですが、ルートのところをダブルクリックするとそのコードが書いてある位置に移動するというのを作ろうと思えば、どうやったら作れますか?
というのは、ツリービューの中に編集されているルート(さっきの場合は”る~と”になってましたけど・・・)をダブルクリックするということです。

また、定期的にそのツリービューの中の内容を更新しようと思えば、どういうコードを付け足さなければいけないですか?

by hira » 2006年1月16日(月) 21:02

ProjectEditorの
「表示」メニュー→「プロジェクト オプション」をクリックし、
出てきたダイアログのタブを「Win32API」に切り替えて、「コモン コントロールを使用する」にチェックを入れ、OKをクリックすれば使えるようになるはずです。

....

by 雷電 » 2006年1月16日(月) 20:44

入力してみましたが、

コード: 全て選択

item As TVITEM
のところで、無効な識別子と出るのですが。・・
バグですか?それとも、私が使っているソフトが悪いのでしょうか?

ちゃんとできてるはずなのに、。

ほかの方も、書込みよろしくお願いします。

Re: ツリービュー

by 淡幻星 » 2006年1月16日(月) 01:59

雷電さん さんが書きました:> ツリービューの作成方法を教えてください。
> 手短に教えていただければ幸いです。
>
> コードをそのまま書いてもらったら結構です。
RADの「コントロール」の一番右側、上から2つ目にツリービューがあります。
それを貼り付けて、「TreeViewプロパティ」の「ボタンあり」「線を表示」「ルートにも線を表示」の三つをチェックしてください。
アイテムの追加例はこんな感じです。

コード: 全て選択

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
Ver. 4.10.02で動作確認。
(「'TreeViewで使用する追加定義。」以下の部分は、
 「' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。」の
 部分に書くべきかもしれませんね^^;)

ツリービュー

by 雷電 » 2006年1月15日(日) 18:44

ツリービューの作成方法を教えてください。
手短に教えていただければ幸いです。

コードをそのまま書いてもらったら結構です。

ページトップ