• 締切済み

delphiにてみたび、ノードの間隔

お世話になっております。 みたび(いつまで続くのか?)TreeViewについてです。 ツリーの項目をドラッグドロップで順番入れ替えたりできるようにしている最中です。 とりあえず簡単な移動は何とかできたのですが、そのテストをしている最中にはたと 気づきました。フォルダをつかんでフォルダの列の中に 移動させようとすると、フォルダの中に入ってしまいます。 で、そうならないように、つまりあるフォルダのひとつ上のノードにもうひとつの フォルダを移動させたいのです。 そこで、ツリーのノードとノードの間を取得すればできるのではないかと思ったのですが、その取得方法 (なのか、それともツリーのノード同士の間隔を広げる方法なのか?なのですが) まだ見付けられずにいます。 どなたかdelphi使いの先輩がた、教えてください。よろしくお願いいたします。

みんなの回答

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

こんにちは。 GetHitTestInfoAtでどの状態か調べて、naAddChild、naAdd、naInsertを分岐します。 procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); var Mode: TNodeAttachMode; Hit : THitTests; begin  Mode := naInsert;  Hit := TreeView1.GetHitTestInfoAt(x,y);  if htOnItem in Hit then Mode := naAddChild  else if htNowhere in Hit then Mode := naAdd  else if [htOnIndent,htOnButton] >= Hit then Mode := naInsert; TreeView1.Selected.MoveTo(TreeView1.GetNodeAt(x,y),Mode); end; アイテム上でドロップすると、子になります。

yo-ya
質問者

お礼

ありがとうございました。 要は選択したノード以下に作成されなければ いいので、上の記述を参考に考えてみます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • TreeViewで複数ノードの選択は可能ですか?

    VisualBasic2005でwindowsアプリの開発をしています。 今回希望として、複数のノードを一度にドラッグするというのがあるのですが、 TreeViewで複数ノードの選択は可能なのでしょうか? そして、もし可能な場合、それらを一気にドラッグということは可能でしょうか? ドロップ先では、ドラッグ中のノードのtextが取れればよいです。 よろしくお願いします。

  • ツリービューのノードをダブルクリックしたことを判断させるには

     VBにて、ツリービューのノードをダブルクリックしたときにこうする、というような処理をさせるにはそうすればいいんでしょうか。  TreeView1_NodeClickというのはありますが、ダブルクリックに関してはDblClickだけしか存在せず、どのノードを選択したかを取得できません。  どなたか、TreeView1_NodeClickのようにノードをダブルクリックした時に限り、そのノードを取得して処理をさせるというような方法を教えてください。  よろしくお願いします。

  • VB2005 TreeViewの任意ノード選択

    お世話になっております。 VB2005でWinアプリを開発中です。 ルートノードは1つで、 そこから子、孫、ひ孫・・・と階段状になるTreeViewを作っています。 親   L子      L孫         Lひ孫             ・・・・ このようなツリーに対し、プログラムで任意のノードを選択状態にしたいのですが、 ノードの名称などで一発で指定する方法はありますでしょうか?? 上の例で、「孫」を選択状態にしたい場合、 TreeView1.SelectedNode = TreeView1.Nodes(0).Nodes(0).Nodes(0) と書けば、できることはできるのですが。 他にもっとよい方法があるはずと思うのですが、見つけられませんでした。 VB6.0なら、下記に方法があったのですが・・・ http://oshiete1.goo.ne.jp/qa732490.html よろしくお願いします。

  • TreeViewのノードを選択 右メニュー変更

    こんにちは。添付画像にあるような事をしたいと思っています。 左側のメニューはtreeviewコントロールで作られていると思います。ツリーの各ノードを選択すると、右側の領域が変更されるようにしたいと思っているのですが、どういった方法を使えば実現できるのかお教え頂けませんでしょうか? コントロールを色々調べてみたのですが、該当するものがありませんでした。よろしくお願いいたします!

  • delphiのヘルプの使い方.

    delphiで分からないことがあったら、どうやって調べていますか? できれば、ネットにつなげられない場合で、お願いします. Borland Delphi 6 Personal版の標準のヘルプは、今一つ使いにくいので、本があればいいのですが. 調べ方が悪かったのでしょうか? 今回は勉強のため、フォルダの中の一覧を表示し、フォルダがあればその中のファイル名・フォルダ名を再帰させて、処理させようとしたのですが、フォルダの中の一覧を表示させるヘルプではメソッドが分かりませんでした. linuxでいう、treeコマンドのようなソフトを作りたかったのですが. 勘違いがあるかもしれませんので、ただ単にフォルダの一覧させるソフトや一覧を調べるメソッドを聞いているのではありません. ヘルプの使い方や調べる効果的な方法を教えてください. ただ、通勤の合間の時間つぶしのdelphiのプログラミングなので、ネット以外での電子データでの効果的な調べ方がいいのですが.やはり難しいでしょうか?

  • VB.net TreeViewコントロール

    VB.net(2010 Express)でTreeViewコントロールを使用し、子ノードと子ノードの間にドラックアンドドロップする際に線を表示したいのですが、どのようにすれば良いのか分かりません。 単純に子ノードのドラッグアンドドロップはできるのですが、子ノード同士の間に線を表示する方法が分からずにハマっています!! 添付しました画像の様な線を表示できる方法など分かる方がいましたら、お力をお貸しください。 宜しくお願い致します。

  • ノードの削除

    フォームから送信した内容に対応するノードを DOMツリーから削除する方法が思いつかず困ってます。 var kekka = root.selectNodes(XPath); のようにして直接ノードリストを取得しています。 ●.removeChild(▲)を利用してノードが削除できることはわかるのですが、 今回の場合の、●▲に入る変数がまったく検討がつきません。

  • ドラッグ&ドロップについて

    現在、Webブラウザ上でJavaScriptを使ったツリー表示をしており、 ツリー内のフォルダに対してドラッグ&ドロップを実装したいと思っています。 そこで質問なのですが、マウスの座標を取得して実装する様な方法では無く、ドラッグ・ドロップ対象のIDを取得して実装する方法はあるのでしょうか? ブラウザはIE6対応のみを想定しています。 ご存知でしたら、どうぞ宜しくお願いします。

  • VB2008.netのTreeViewについて質問です。

    VB2008.netのTreeViewについて質問です。 質問させて頂きます。 VB2008で作業をしています。 TreeViewで子ノードを選択します。 この時、選択されている子ノードの、親ノードを取得したいのですが 方法がわかりません。 わかる方教えていただけないでしょうか。

  • 「お気に入り」にあるフォルダの順番を変更したいのですが

    ブラウザはIE8を使っていますが、 「お気に入り」に結構フォルダが溜まってきました。 このフォルダの順番を変更したいのですが、 フォルダをドラッグして行って好きなところでドロップしても、 このフォルダが別のフォルダの中に入ってしまってうまく行きません。 なにか方法があるのでしょうか。 よろしくお願いいたします。