tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルformにスクロールバーをつける方法
記事No15009
投稿日: 2010/10/30(Sat) 15:04
投稿者クロ
プログラムを走らせるとformが開きます。
ある手続きをした後は一部分だけ表示させればよいので
formの端をつまみ表示範囲を小さくします。
しかし小さくしたformに表示されるのは元の表示の左上の部分となり
たとえば左下を残すことができません。

formの左側や下側にスクロールバーがあれば残る範囲を
自由に調整できます。
スクロールバーを表示させるにはどのようにすればよいでしょうか。

[ツリー表示へ]
タイトルRe: formにスクロールバーをつける方法
記事No15010
投稿日: 2010/10/30(Sat) 19:35
投稿者魔界の仮面弁士
> スクロールバーを表示させるにはどのようにすればよいでしょうか。

有名どころでは、Visual Basic 増強作戦(のクローン)にあるサンプルとか、
http://www.watahiki.info/vbsvp98/techlib/form/scroll.html

機械翻訳なので読みにくいですが、Microsoft のサンプルとしてはこのあたりとか。
http://support.microsoft.com/kb/109741/ja

VB レスキューのサイト内にもサンプルがありますね。
http://hanatyan.sakura.ne.jp/patio/read.cgi?no=83

あとは、VBStation から下記 #5 のサンプルとか。
http://www.vbstation.net/sample/0207.htm

MDI フォームを使うという手法もあります。
http://www.watahiki.info/vbsvp98/techlib/form/scroll2.html

[ツリー表示へ]
タイトルRe^2: formにスクロールバーをつける方法
記事No15012
投稿日: 2010/10/31(Sun) 00:05
投稿者クロ
魔界の仮面弁士さん いろいろなリンクありがとうございました。

MDIフォームを使う方法が簡単そうなので試してみました。

> MDI フォームを使うという手法もあります。
> http://www.watahiki.info/vbsvp98/techlib/form/scroll2.html

スクロールバーが出てきて右下部分などフォームを小さくしても自由に
見たい部分を表示することができました。

しかし新たな問題がでました。
スクロールで元のフォームの右下を見た後最大化すると左側の部分が画面左より
はみ出してしまいます。
最大化したときはスタートの位置に戻るようにできませんでしょうか。

また最大化ボタン押したとき、画面いっぱいのサイズではなく、元のフォーム
(スタート)のサイズまでにすることはできないでしょうか。
不要な余白が現れて見た目よくありません。

[ツリー表示へ]
タイトルRe^3: formにスクロールバーをつける方法
記事No15014
投稿日: 2010/11/01(Mon) 11:55
投稿者魔界の仮面弁士
> 最大化したときはスタートの位置に戻るようにできませんでしょうか。
細かい位置指定が必要な場合は、PictureBox + V/HScrollBar 法などを用いて、
ご自身で位置制御を行った方が無難かと思います。


> また最大化ボタン押したとき、画面いっぱいのサイズではなく、元のフォーム
> (スタート)のサイズまでにすることはできないでしょうか。
下記のサンプルは如何でしょう。
MinWidth, MaxWidth, MinHeight, MaxHeightプロパティで、
フォームのサイズを制限できるようになります。
http://www.momo-lab.net/inu/bigform.html

# これが VB.NET であれば、もっと簡単なのですけれどね…。
# (Form の MaximumSize / MinimumSize プロパティを設定するだけなので)

[ツリー表示へ]
タイトルRe^4: formにスクロールバーをつける方法
記事No15021
投稿日: 2010/11/03(Wed) 07:59
投稿者クロ
魔界の仮面弁士さん  ありがとうございます。

> 細かい位置指定が必要な場合は、PictureBox + V/HScrollBar 法などを用いて、
> ご自身で位置制御を行った方が無難かと思います。

調べてみたいと思います。

> MinWidth, MaxWidth, MinHeight, MaxHeightプロパティで、
> フォームのサイズを制限できるようになります。
> http://www.momo-lab.net/inu/bigform.html

これはどこを変更すればよいのでしょうか。
URLのfrmBogFormの以下の数字を変更してもLimitの(?)、初期のサイズは
変化しますが、最大化ボタンを押すと画面一杯になります。

    mLimitForm.MaxWidth = 1400 * Screen.TwipsPerPixelX
    mLimitForm.MaxHeight = 1050 * Screen.TwipsPerPixelY

希望は最大化ボタンを押しても画面一杯にならずある定められた範囲になる
ことです。

よろしくお願いします。

[ツリー表示へ]
タイトルRe^5: formにスクロールバーをつける方法
記事No15023
投稿日: 2010/11/03(Wed) 16:57
投稿者花ちゃん
> 希望は最大化ボタンを押しても画面一杯にならずある定められた範囲になる
> ことです。

下記を追加したのではだめですか?

Private Sub Form_Resize()
   If Me.WindowState = 2 Then
      Me.WindowState = 0
      Me.Width = 8000   '好みの初期値に設定
      Me.Height = 6000
   End If
End Sub

[ツリー表示へ]
タイトルRe^6: formにスクロールバーをつける方法
記事No15024
投稿日: 2010/11/03(Wed) 19:11
投稿者クロ
花ちゃんさん ありがとうございます。

> 下記を追加したのではだめですか?
>
> Private Sub Form_Resize()
>    If Me.WindowState = 2 Then
>       Me.WindowState = 0
>       Me.Width = 8000   '好みの初期値に設定
>       Me.Height = 6000
>    End If
> End Sub

Form1しかないものではうまくいきましたが、MDIFormを使ってる
ものではうまくいかず、画面いっぱいとなり、今までと同じでした。
そこでためしにMeの部分をMDIFormに以下のようにしましたが結果は同じでした。
対処方法はありますでしょうか?

Private Sub MDIForm1_Resize()
   If MDIForm1.WindowState = 2 Then
      MDIForm1.WindowState = 0
      MDIForm1.Width = 8000      '好みの初期値に設定
      MDIForm1.Height = 6000
   End If
End Sub

またForm1しかなくうまく制限がかかった場合でも、動作として一度画面一杯に
表示されてから設定された大きさになりました。
画面一杯にらなずに一気に設定値に変化させることはできますか?

   

[ツリー表示へ]
タイトルRe^7: formにスクロールバーをつける方法
記事No15026
投稿日: 2010/11/03(Wed) 21:05
投稿者花ちゃん
> Private Sub MDIForm1_Resize()

ではなく

 Private Sub MDIForm_Resize() 

でないとイベントが発生しません。
(ブレークポイント等を設定して試したら確認できますよ)

> またForm1しかなくうまく制限がかかった場合でも、動作として一度画面一杯に
> 表示されてから設定された大きさになりました。
> 画面一杯にらなずに一気に設定値に変化させることはできますか?

試してはいませんので解りませんが、簡単な方法では出来ないかと。
(最大化のメッセージ捕まえてそこで処理をするとかになるかと)
通常のForm なら MaxButton = False に設定する等の代替方法もありますが。
貴方が求める仕様によっては使えないかも知れませんが、そのサイズで表示が必要な
時だけプログラムでFormのサイズを固定にしてしまい、終了したら元に戻すとか。

MDIフォームを使うなら、あそこの注意書きに書かれているように、MDIフォーム独特の
クセもあるので、その辺を承知の上で使用すべきかと。

ここのサンプル投稿用掲示板で紹介している方法ではだめだったのですか?
(API 関数等使っていないので簡単だし、色々注文があるなら、自分の理解できる範囲の
物を使用しないと...。)
http://hanatyan.sakura.ne.jp/patio/read.cgi?no=83

又は下記のような方法もあります。
http://hanatyan.sakura.ne.jp/patio/read.cgi?no=239

[ツリー表示へ]
タイトルRe^8: formにスクロールバーをつける方法
記事No15029
投稿日: 2010/11/06(Sat) 10:30
投稿者クロ
花ちゃんさん ありがとうございます。

> ここのサンプル投稿用掲示板で紹介している方法ではだめだったのですか?
MDIFormの方法が現在のformのコードの変更なしでいけそうで簡単に見えましたので
そちらを先に試しました。
API関数を使わない方法も試してみたいと思います。

一瞬画面が大きくなる不具合を除けば以下の方法でOKです。
しかし位置変更したスクロールを初期の位置に戻そうとHScroll1.Value = 0と
記載しましたが、変数が定義されていません、とエラーがでました。
どのように記載すればよろしいのでしょうか。

Private Sub MDIForm_Resize()
    If Me.WindowState = 2 Then
        Me.WindowState = 0
        Me.Move 0, 0, 20000, 10000
        HScroll1.Value = 0 <--エラー
        VScroll1.Value = 0 <--エラー
   End If
End Sub

[ツリー表示へ]
タイトルRe^9: formにスクロールバーをつける方法
記事No15030
投稿日: 2010/11/06(Sat) 12:32
投稿者花ちゃん
> 一瞬画面が大きくなる不具合を除けば以下の方法でOKです。
本当ですか?(投稿したコードと試したコードが違うとかないですか?)

> しかし位置変更したスクロールを初期の位置に戻そうとHScroll1.Value = 0と
> 記載しましたが、変数が定義されていません、とエラーがでました。
> どのように記載すればよろしいのでしょうか。

そもそも、HScroll1 コントロールを貼り付けていますか?
(貼り付けていたら何をする為にどのようなコードを書いていますか)

Form1 を 0,0 の位置に表示させたいなら、コードが違うでしょう。
> Me.Move 0, 0, 20000, 10000
ここでの、 Me は何を指しているかご存知ですか?

MDIForm を理解していますか?
どちらの問題も基本的な事なので、私がコードを書いてしまったのでは、又 次の
ステップでも書く事になり兼ねませんので、色々試したり、ヘルプで調べるなりして
勉強してみて下さい。

[ツリー表示へ]
タイトルRe^10: formにスクロールバーをつける方法
記事No15031
投稿日: 2010/11/06(Sat) 14:17
投稿者クロ
花ちゃんさん ありがとうございます。

>> 一瞬画面が大きくなる不具合を除けば以下の方法でOKです。
> 本当ですか?(投稿したコードと試したコードが違うとかないですか?)
正確にはエラーの出る2行がない場合です。(誤解を与えましたらお詫びいたします)
2行が無いときはフォームの位置、大きさ、スクロールを変化させても正常に動きます。
そして最大化ボタンを押すと画面左上に設定した大きさで再表示されます。
ただスクロールバーの位置と表示されている中身が変更した位置のままであり、それを
初期位置にしたいと思っております。

> そもそも、HScroll1 コントロールを貼り付けていますか?
> (貼り付けていたら何をする為にどのようなコードを書いていますか)
貼り付けていません。MDIFormで表示されるスクロールバーを対象にしているのですが
どのようにあらわすのかわからず、苦肉の策で書いてみました。

> Form1 を 0,0 の位置に表示させたいなら、コードが違うでしょう。
> > Me.Move 0, 0, 20000, 10000
> ここでの、 Me は何を指しているかご存知ですか?
>
> MDIForm を理解していますか?
> どちらの問題も基本的な事なので、私がコードを書いてしまったのでは、又 次の
> ステップでも書く事になり兼ねませんので、色々試したり、ヘルプで調べるなりして
> 勉強してみて下さい。

正直MeもMDIFormもよく理解できておりません。
自分でもう少し勉強してみます。
ありがとうございました。

[ツリー表示へ]
タイトルRe^11: formにスクロールバーをつける方法
記事No15032
投稿日: 2010/11/06(Sat) 15:30
投稿者クロ
花ちゃんさん

> Form1 を 0,0 の位置に表示させたいなら、コードが違うでしょう。

これをヒントにMDIFormのスクロールのValueを0にするのではなく
Form1を0,0にするよう以下のように書きましたらうまくいきました。
        Form1.Move 0, 0, 15270, 8895

いろいろアドバイスありがとうございました。

[ツリー表示へ]