- ベストアンサー
例えばエクスプローラの様に左と右の幅を自由に変更する方法
教えてください、お願いします。 VBで、2つのコントロール、例えば右にテキストボックス、左に ファイルリストボックスを貼り付け、その境界をつかんで自由に 双方のサイズを変更する方法はありますでしょうか? もちろん、作成中ではなく、実際に起動した状態での話しです。 起動後に動的にコントロールの大きさを変更する、とでも 言えばよいのでしょうか。 例えばWindowsのエクスプローラでは、左にツリー状にフォルダが 表示され、右にその内容が表示されていますが、境界をつかめば 自由にサイズ変更ができますよね。 そんな感じにしてみたいのです。 Form_Resizeイベントに記述した場合は、動的に変更するのではな くなります。 よろしくお願いします!!!
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
http://oshiete1.goo.ne.jp/kotaeru.php3?q=399063 過去スレを読んでおいてください。 んでFormのリサイズイベントは変更終了をVBが受けたときに起こります。 エクスプローラのような動きをするためには、変更中を取得する必要があります。 参考URLの837の「ウィンドウサイズが変更中であることを判定する 」を参考にしてください。 あとは、二つの表示幅を毎回算出、サイズ位置変更セットを行うことで、リアルタイムなサイズ変更が可能になります。
その他の回答 (4)
- todo36
- ベストアンサー率58% (728/1234)
- TAGOSAKU7
- ベストアンサー率65% (276/422)
エクスプローラサンプル
お礼
ありがとうございます。 DLして見てみましたが、これすごくよくできてますねぇ。 難解なコードばかりでしたが、チャレンジしてみたいと思います!
- taisuke555
- ベストアンサー率55% (132/236)
私も作ってみました。 質問をよく読まなかったので、 【左にテキストボックス、右にファイルリストボックス】 で作ってしまいました。 もう回答が入っていたので、必要なければ読み飛ばしてください。 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
補足
ご回答いただき、ありがとうございます! 必要ないなんてとんでもない。 すごく参考になります。 このままコピペさせていただいてもいいくらいです。 教えていただいたコードを参考に試行錯誤してみたいと 思います。 詳細なご説明をいただき、ありがとうございます!
- nishi6
- ベストアンサー率67% (869/1280)
素人のおもいつきです。他に本格的な方法がありそうですが・・・ 左にファイルリストボックス(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
お礼
ご回答いただき、ありがとうございます! なるほどimageを使用するなんて方法があるのですね。 こういうのは僕では思いつかないんですよね。 すごく参考になります。 早速試させていただきます。 ありがとうございます。
お礼
ご回答いただき、ありがとうございます。 過去スレも見てみました。 フック?確かに僕もいくつかのソフトを作成するのに 使用しています。 でもほとんど意味が分からずに使用していたようです。 イベントというのは結構複雑なものなのですね。 「ウィンドウサイズが変更中であることを判定する 」というのは とても参考になりそうです。 ぜひ試させていただきます。 ありがとうございます!