ツリービューのノード間に線を引くには?


エレクトリックトーマス  2005-06-17 02:04:51  No: 122737

度々すみませんが、VB6のツリービューに関して質問です。

マウスドラッグによりツリービュー上のあるノードを別の場所へ移動したいと
考えています。
そこで、ノードをクリックしてドラッグしたときに現在のマウスポインタの位置
によりノードとノードの間にラインを入れたいのですが、やり方が分かりません。

ラインを入れるのはドラッグしたノードが移動する場所を示したいからです。

アイテム1
    |_アイテム11
------------------------    ←  こんな感じにラインを引きたい
    |_アイテム12

他にも目的が簡単に実現できる手法があるのであれば線を引くという
手段でなくても良いと思っています。

よろしくお願いします。


特攻隊長まるるう  2005-06-17 20:10:10  No: 122738

>ノードとノードの間にラインを入れたいのですが、やり方が分かりません。
分かりませんというか、そんな方法があらかじめ用意されているわけは無い
でしょう?。自分で考え出さないと回答なんて無いですよ。

TreeView1_MouseMove イベントで HitTest メソッドを駆使すれば
出来そうな感はありますが…。できるかどうかの保証は出来ません。

>他にも目的が簡単に実現できる手法があるのであれば線を引くという
>手段でなくても良いと思っています。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200506/05060104.txt
関連した別スレがあっても読んでる人には分かりません。スレッドのアドレスを
書き込めばリンクが貼れますので、貼って下さい。
…Node の入れ替えだけが目的なら、[上へ移動][下へ移動]ボタンを用意して
押下時に現在選択状態にある Node をその1つ上(または下)のものと入れ替える
だけなら現在の知識で出来ると思うけど?。


エレクトリックトーマス  2005-06-21 21:50:53  No: 122739

回答ありがとうございました。

上、下移動であればできそうなんですが、やはりマウスドラッグでの移動
を行いたいと考えています。
あれからいろいろとWEB検索しまして、HitTestメソッドを用いてマウスポインタ下の
アイテムの矩形枠を取得するところまで出来ましたが、やはりライン描画と
いうところで行き詰っています。

何かヒントがあればよろしくお願いします。


特攻隊長まるるう  2005-06-21 23:11:35  No: 122740

バカ正直にラインを描画しないといけないってワケでもありませんし、
例えば PictureBox を1つ貼り付けておいて↓のように設定すれば…
[VB6.0]
    With Me.Picture1
        .Top = 矩形枠下端のY座標
        .Left = 矩形枠下端のX座標
        .Width = 矩形枠のWidth
        .Height = 10
        .BackColor = vbRed
        .ZOrder
    End With


DD  2005-06-22 01:17:56  No: 122741

> ドラッグしたノードが移動する場所を示したいからです。
単に、DropHighlightプロパティじゃダメなの?


エレクトリックトーマス  2005-06-26 22:13:27  No: 122742

返答が遅くなり申し訳ありません。
特攻隊長まるるうさんのPictureBoxを貼り付け、ラインに見せることにより
希望の動作を実現することができました。

しかし、TreeView内でマウスダウンしてTreeView内でマウスアップしてくれる
場合はちゃんと動作するのですが、TreeView外でマウスアップされると、その
イベントが現在の処理では拾うことが出来ないため、次にマウスカーソルが
TreeView内に入って来たときに処理がおかしくなってしまいます。

原因はTreeView外でマウスアップされるとMouseUpイベントが発生しないこと
によるものだと考えますが、こういう場合はどのようにして対処すれば良いのでしょうか?

よろしくお願いします。


エレクトリックトーマス  2005-06-26 22:16:56  No: 122743

>DDさん
提案ありがとうございました。
DropHighlightだと、個人的にドラッグしたノードが、ハイライトしている
ノードの子ノードへ移動するイメージがあるのでライン描画の方が分かり
安いかなと考えた次第です。


DD  2005-06-27 04:07:53  No: 122744

OLEDrag&Dropを使用して
MouseUpイベント --> OLECompleteDragイベント
にしてみたら如何でしょうか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加