ツリービューのテキストを取得したい

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
llby
記事: 11
登録日時: 2006年12月22日(金) 13:02
お住まい: 東京

ツリービューのテキストを取得したい

#1 投稿記事 by llby »

はじめての投稿です。

ツリービューを作成しようとしています。
クリックした時に、それがアイテムだったら・・
という所までは、取得出来てるのですが
そのアイテムのテキストの取得方法が分かりません。

現在のコードはこんな感じです。

コード: 全て選択


Const TVM_GETITEM       = &H110C

Dim cPoint As POINTAPI
Dim sTVHT As TVHITTESTINFO
Dim itm As TVITEM

GetCursorPos(cPoint)
sTVHT.pt.x=cPoint.x
sTVHT.pt.y=cPoint.y
ScreenToClient(hTree1,sTVHT.pt)

itm.mask = TVIF_TEXT
itm.cchTextMax = 255

itm.hItem = 
    SendMessage(hTree1,TVM_HITTEST,NULL,VarPtr(sTVHT) As LPARAM)

If sTVHT.flags = TVHT_ONITEMLABEL Then
    SendMessage(hTree1,TVM_GETITEM,0,VarPtr(itm) As LPARAM)
    MessageBox(hMainWnd,itm.pszText,0,0)  /* 取得出来ない */
End If

自分なりに色々調べて、
もう少しのような気もしますが、取得出来ません。

もしかしたら、方向性も違っているかもしれません。
どなたか、ご存知の方がいましたら
ご教授をお願い致します。
yama
記事: 58
登録日時: 2005年5月31日(火) 21:11
お住まい: 新潟市
連絡する:

#2 投稿記事 by yama »

直接返答できませんが

Sinryow ActiveBasic Center

http://ab.sinryow.net/よりBackSearchABを落としてみてください

解決策が見つかりそうですよ
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: ツリービューのテキストを取得したい

#3 投稿記事 by 7 »

> はじめての投稿です。
初めまして。

TVM_GETITEMを使ってツリービューのアイテムに設定されている文字列を取得する場合、TVITEM構造体のpszTextメンバに文字列バッファのアドレスを指定する必要があります。

コード: 全て選択

Const TVM_GETITEM       = &H110C

Dim buf[255] As Byte
Dim cPoint As POINTAPI
Dim sTVHT As TVHITTESTINFO
Dim itm As TVITEM

	GetCursorPos(cPoint)

	sTVHT.pt.x=cPoint.x
	sTVHT.pt.y=cPoint.y
	ScreenToClient(hTree1,sTVHT.pt)

	itm.mask = TVIF_TEXT
	itm.pszText = buf
	itm.cchTextMax = Len(buf)
	itm.hItem = SendMessage(hTree1,TVM_HITTEST,NULL,VarPtr(sTVHT) As LPARAM)

	If sTVHT.flags = TVHT_ONITEMLABEL Then
		SendMessage(hTree1,TVM_GETITEM,0,VarPtr(itm) As LPARAM)
		MessageBox(hMainWnd,itm.pszText,0,0)
	End If
試してないのですけど、こんな感じではないでしょうか?
llby
記事: 11
登録日時: 2006年12月22日(金) 13:02
お住まい: 東京

#4 投稿記事 by llby »

ありがとうございます。

yama さん、7 さん
ありがとうございます。

今、ちょっと環境がなく
来週の月曜日に試してみます。

ちょっと別の質問ですが、
みなさんは、開発で不明な事があった時、
何処で調べていますか?

自分はネットやヘルプとか
activebasic内にあるソースとかも見たりするのですが、
いつも時間がかかってしまい、苦労しています。

この間は何故か、C++のサイトを見ていて解決しました。

なかなか要領を得ないので、
みなさんの御意見を聞いてみたいです。

書籍でこれはいい、というものはありますか?
やはり、C言語の知識などが必要ですか?
Win32Apiは、MSDNとかで調べるんですか?
MSDNを調べて、解決した事は、まだありません。

情報がちらばっていると、解決までに時間がかかります。
「これを調べれば、確実に答えがみつかる」
というものは、ありますか?

今回は、最終的にこの質問版に投稿するを手段を選んでみました。
しかし、すぐに回答を頂いて・・・
この質問版を充実させるというのも、1つの手段なのかもしれませんね・・・

でも、掲示板形式だと即座に答えが引き出せるかというと
微妙な感じがしますね・・・

掲示板から、解決したものに関しては、
もっと整理されたものに変換するとか駄目ですかね?

ヘルプと掲示板の間のような感じで、
Wikiのように、編集とか出来たりして・・・
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#5 投稿記事 by konisi »

僕の場合は、分からない時はどんな言語でもいいからサンプルがあるか探して、あれば移植、なければ人に聞くようにしています。
聞かぬは一生の恥って言いますしね。

あるいは、不明な部分を単品テストしてみて動くかどうか実験、うまくいったら結合しなおしてバグを探す とかしてます。
ネットにデータを送信するようなプログラムだとそうも行かないのですがw

という事で、いろんな言語が「とりあえず読める」ようになれば人に聞くほど迷う事も少なくなると考えます。


参考

主な言語のコメント文字

コード: 全て選択

//C系、Java系は殆どがこれで1行コメント。
;PureBasic、アセンブリ言語等、一部の言語ではこれで1行コメント。
'AB、VBなどのBASIC処理系は殆どがこれで1行コメント。
他に、C系やJava系では文末に;を置く必要があるものが多いです。

> 掲示板から、解決したものに関しては、
> もっと整理されたものに変換するとか駄目ですかね?

> ヘルプと掲示板の間のような感じで、
> Wikiのように、編集とか出来たりして・・・
いい案だと思います。掲示板形式のものなら昔ありましたし、山本s(AB開発者)に頼んでみることにします。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#6 投稿記事 by 7 »

> 何処で調べていますか?
MSDN2 ライブラリ : http://msdn2.microsoft.com/ja-jp/library/default.aspx
猫でもわかるプログラミング : http://www.kumei.ne.jp/c_lang/index.html
WinAPI Database for VB Programmer : http://www.winapi-database.com/

ウィンドウメッセージリスト : http://yokohama.cool.ne.jp/chokuto/uraw ... index.html
Win32 API関数リスト : http://yokohama.cool.ne.jp/chokuto/uraw ... index.html
構造体リスト : http://yokohama.cool.ne.jp/chokuto/uraw ... index.html
通知メッセージリスト : http://yokohama.cool.ne.jp/chokuto/uraw ... index.html

あとは検索サイトで調べたい構造体や関数を検索してヒットしたページを参考にしています。

> この間は何故か、C++のサイトを見ていて解決しました。
自分の場合C++言語のサンプルコードばかりを参考にしています。
C++言語自体はほとんど触ったことがないんですけど、Win32 APIを使っている場合ABもC++も大した違いはないと思うんですよね。

> MSDNを調べて、解決した事は、まだありません。
解決することはありますけど、最後の手段といった感じでMSDNは使ってます。大抵は検索サイトで検索してみれば解決しますからね。
llby
記事: 11
登録日時: 2006年12月22日(金) 13:02
お住まい: 東京

#7 投稿記事 by llby »

konisiさん 7さん 有り難うございます。

紹介して頂いたサイトなど、早速お気に入りに登録させて頂きました。

Javaが役に立つ事もあるんですね・・驚きです。



早く試したいのですが、自宅がMac環境なので出来ないんです・・
virtual pcとかを入れる予定ですが、
もうちょっとの我慢です。(誰に言っている?)

早くー!
llby
記事: 11
登録日時: 2006年12月22日(金) 13:02
お住まい: 東京

#8 投稿記事 by llby »

話がまた、TreeViewの方に戻りますが、
TVITEMのテキストを取得する仕組みって、
何か不思議な感じですね・・

最初に、対照のノードのハンドルを貰ってきて
自分で用意しておいた、TVITEM構造体にそのハンドルをセットして
で、TVITEM構造体にもまた、
bufというテキストを受け取る所を用意しておかないと
テキストが取得出来ない・・
(しかもGETITEMを送らないと取得出来ない)

どんな仕組みになってるんですか?
今回の件で、その辺がひっかかって・・
やっぱりそれは、Windowsの仕組みだから
MSDNには、それが書いてあるんだろうと思うのですが
MSDNでの検索の仕方が良く分かりません。
(検索していても、解決にいたりません)
使いづらくないですか?

全然関係ないですが、
PostgreSQLのマニュアルも検索していて解決にいたりません。

それに比べて、
JavaDoc や PHP のドキュメントは、
めちゃめちゃ使い安いですね・・

頭の中が整理出来ていなくて、
2、3個の話題がまざってしまってすいません。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#9 投稿記事 by 7 »

> 最初に、対照のノードのハンドルを貰ってきて
> 自分で用意しておいた、TVITEM構造体にそのハンドルをセットして
> で、TVITEM構造体にもまた、
> bufというテキストを受け取る所を用意しておかないと
> テキストが取得出来ない・・
> (しかもGETITEMを送らないと取得出来ない)
TVM_GETITEMでツリービューのアイテム情報を取得したい場合、TVITEM構造体にあらかじめ必要なデータを設定しておかなければいけない訳なんです、が...。

TVITEM構造体には、アイテムのハンドル(llbyさんの場合クリックされたアイテムのハンドル)と、どんなデータを取得するのかと、取得するデータが文字列ならその受け皿と、その受け皿の大きさを設定した後、実際に情報を取得するという動きをするんですよね。
意味不明かな...。

> MSDNには、それが書いてあるんだろうと思うのですが
> MSDNでの検索の仕方が良く分かりません。
> (検索していても、解決にいたりません)
TVM_GETITEMと検索してみましたか?

コード: 全て選択

char szBuffer[MAXTEXTLEN+1];
TV_ITEM item;

item.hItem = hItem;
item.mask = TVIF_TEXT | TVIF_CHILDREN;
item.pszText = szBuffer;
item.cchTextMax = MAXTEXTLEN;
SendMessage(hWnd, TVM_GETITEM, 0, (LPARAM)&item);
MSDN2でTVM_GETITEMで検索してこのサンプルコードを見つけたんですけど、これで "TVITEM構造体のpszTextメンバには文字列バッファへのアドレスを格納するんだな" って分かるんですけど、難しいでしょうかね?
llby
記事: 11
登録日時: 2006年12月22日(金) 13:02
お住まい: 東京

#10 投稿記事 by llby »

7さん 有り難うございます。
たしかに、ありました・・・
申し訳ありません。

一度聞くと、あーそういう事か・・
と思うのですが、
そこに辿り着くまでのプロセスが
なんか納得いかない感じで・・

konisi さん
PHPのドキュメントのような感じで、お願いします。
llby
記事: 11
登録日時: 2006年12月22日(金) 13:02
お住まい: 東京

#11 投稿記事 by llby »

7さん、有難う御座います。

ちゃんと取得できました。

お世話になりました。
返信する