• ベストアンサー

例えばエクスプローラの様に左と右の幅を自由に変更する方法

教えてください、お願いします。 VBで、2つのコントロール、例えば右にテキストボックス、左に ファイルリストボックスを貼り付け、その境界をつかんで自由に 双方のサイズを変更する方法はありますでしょうか? もちろん、作成中ではなく、実際に起動した状態での話しです。 起動後に動的にコントロールの大きさを変更する、とでも 言えばよいのでしょうか。 例えばWindowsのエクスプローラでは、左にツリー状にフォルダが 表示され、右にその内容が表示されていますが、境界をつかめば 自由にサイズ変更ができますよね。 そんな感じにしてみたいのです。 Form_Resizeイベントに記述した場合は、動的に変更するのではな くなります。 よろしくお願いします!!!

質問者が選んだベストアンサー

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

http://oshiete1.goo.ne.jp/kotaeru.php3?q=399063 過去スレを読んでおいてください。 んでFormのリサイズイベントは変更終了をVBが受けたときに起こります。 エクスプローラのような動きをするためには、変更中を取得する必要があります。 参考URLの837の「ウィンドウサイズが変更中であることを判定する 」を参考にしてください。 あとは、二つの表示幅を毎回算出、サイズ位置変更セットを行うことで、リアルタイムなサイズ変更が可能になります。

参考URL:
http://www.vbvbvb.com/jp/gtips/index0801.html
fujiyama2002
質問者

お礼

ご回答いただき、ありがとうございます。 過去スレも見てみました。 フック?確かに僕もいくつかのソフトを作成するのに 使用しています。 でもほとんど意味が分からずに使用していたようです。 イベントというのは結構複雑なものなのですね。 「ウィンドウサイズが変更中であることを判定する 」というのは とても参考になりそうです。 ぜひ試させていただきます。 ありがとうございます!

その他の回答 (4)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.5

おすすめ

参考URL:
http://www.grapecity.com/japan/support/database/P1_22.htm
fujiyama2002
質問者

お礼

ありがとうございました!!!

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.4

エクスプローラサンプル

参考URL:
http://www.mvps.org/btmtz/vbexplorer/
fujiyama2002
質問者

お礼

ありがとうございます。 DLして見てみましたが、これすごくよくできてますねぇ。 難解なコードばかりでしたが、チャレンジしてみたいと思います!

回答No.3

私も作ってみました。 質問をよく読まなかったので、 【左にテキストボックス、右にファイルリストボックス】 で作ってしまいました。 もう回答が入っていたので、必要なければ読み飛ばしてください。 Option Explicit Dim Hzn_X As Single Dim Hzn_Y As Single Private Sub File1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)   Form1.MousePointer = 0 End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)   If (Button = vbLeftButton And Form1.MousePointer = 9) Then     Hzn_X = X     Hzn_Y = Y   End If End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)   If (Button = 0) Then     If (Y > Text1.Top And Y < Text1.Top + Text1.Height And X > Text1.Left + Text1.Width And X < File1.Left) Then       Form1.MousePointer = 9     Else       Form1.MousePointer = 0     End If   ElseIf (Button = vbLeftButton) Then     If (Text1.Width + (X - Hzn_X) > 500 And File1.Width + (Hzn_X - X) > 500) Then       Text1.Width = Text1.Width + (X - Hzn_X)       File1.Width = File1.Width + (Hzn_X - X)       File1.Left = File1.Left + (X - Hzn_X)       Hzn_X = X     End If   End If End Sub Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)   Form1.MousePointer = 0 End Sub

fujiyama2002
質問者

補足

ご回答いただき、ありがとうございます! 必要ないなんてとんでもない。 すごく参考になります。 このままコピペさせていただいてもいいくらいです。 教えていただいたコードを参考に試行錯誤してみたいと 思います。 詳細なご説明をいただき、ありがとうございます!

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

素人のおもいつきです。他に本格的な方法がありそうですが・・・ 左にファイルリストボックス(File1)、 右にテキストボックス(Text1) このコントロールの間に、イメージ(Image1)を貼り付け、  高さ(Height)はファイルリストボックスの高さくらい、  幅(Width)は極力狭くして、(60くらい)  BorderStyleを1-実線、  MousePointerを9-サイズ(左右) にします。 Image1のイベントを下のようにします。制限等が必要なら書き加えて下さい。 上下も同じように出きますね。ご参考に。 Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, _                        X As Single, Y As Single)   File1.Width = File1.Width + X   Text1.Left = Text1.Left + X   Text1.Width = Text1.Width - X   Image1.Left = Image1.Left + X End Sub

fujiyama2002
質問者

お礼

ご回答いただき、ありがとうございます! なるほどimageを使用するなんて方法があるのですね。 こういうのは僕では思いつかないんですよね。 すごく参考になります。 早速試させていただきます。 ありがとうございます。