[リストへもどる]
一括表示

投稿時間:2003/05/15(Thu) 19:07
投稿者名:heven
Eメール:
URL :
タイトル:
HeightとWidthについて
VBをはじめて2週間の初心者です。ネットやHelpなどで色々調べてみたのですが、
答えが見つからないので、みなさんのお知恵を借りようと思い投稿しました。

フォームのデザイン時にプロパティのところで、"Height"の"Width"値をそれぞれ"3601"などとすると
再生した後で"3600"の値になっているのですが、この現象はなぜ起こるのでしょうか?
単位がtwipというのが何か関係しているのでしょうか?
OS:Win98  VB6.0


ご存知の方がいましたら、よろしくお願いします。

投稿時間:2003/05/15(Thu) 19:42
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: HeightとWidthについて
メニューバーの ツール オプション 全般のタグ のグリッドの設定のグリッドに合わせる
にチェックが入っていませんか?
入っていたら外して見て下さい。

投稿時間:2003/05/15(Thu) 19:56
投稿者名:heven
Eメール:
URL :
タイトル:
Re^2: HeightとWidthについて
"花ちゃん"さん、お忙しいところ、ありがとうございます。
全般タブを見てみたのですが、チェックは外れていたのですがだめでした・・・。

ちなみに色々な数値を入れてみたところ
3600〜3607は「3600」に、3608〜3622は「3615」のように
ある意味一定の数値に収束しています。

投稿時間:2003/05/15(Thu) 20:23
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: HeightとWidthについて
> 3600〜3607は「3600」に、3608〜3622は「3615」のように

今、確認してみたら Form だけは 5 飛びの設定になるようですね!
他のコントロールは 1 単位で設定できるのですが、なぜでしょうかね?

投稿時間:2003/05/15(Thu) 21:53
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^4: HeightとWidthについて
> 他のコントロールは 1 単位で設定できるのですが、なぜでしょうかね?

理由はわかりませんが、予想をあげるなら…

1. フォーム表示時に Twip → Pixel 変換が行われ、そのサイズでフォームが表示される。
2. 画面表示時には、「240.067ドット」や「300.08ドット」などの小数点単位の表示は
    できないので、より近い方の数字(例えば、240ドットとか300ドットなど)に丸められる。
3. 丸められたPixel値を Twip単位系に変換する際に、元の情報が失われている。

という事なのかも知れません。

コントロールのように、きちんと元の値を保持してもらいたい物ですね。(^_^;)

投稿時間:2003/05/15(Thu) 22:42
投稿者名:Starfish
Eメール:
URL :
タイトル:
Re^5: HeightとWidthについて
 .frmファイルをメモ帳などで見てみると、WidthプロパティやHeightプロパティはありません。
代わりにClientWidthとClientHeightがあります。

 これは、タイトルバー(など)のサイズが異なる環境でも、クライアント領域のサイズを同じ
にすることで正しく表示できるようにするためだと思います。もしも、フォームのサイズにあわ
せると、タイトルバーが広い環境では、下のほうのコントロールが見えなくなる可能性が有ります。

 ということは、VBの内部ではクライアント領域のサイズでフォームのサイズを管理している
のではないかと思います。それに対して、プロパティウィンドウでは、WidthとHeightで指定する
ため、フォームを表示するタイミングで、内部のClientWidthやClientHeightからWidthやHeightに
変換しているのだと思います。この時に、ドット単位(96DPIでは15Twips、120DPIでは12Twips単位)
に丸められるのだと思います。

投稿時間:2003/05/16(Fri) 18:05
投稿者名:heven
Eメール:
URL :
タイトル:
Re^6: HeightとWidthについて
みなさんのご協力大変に助かりました。返事が遅れて申し訳ありませんでした。

Formデザイン時のプロパティ値にある意味決まった値しか入らない理由として
1dot = 15twip というのが関係があったみたいです。
お騒がせしました。

そこで今、下記のようなコードを書いているのですが、"frmHyouji.Width"のところの型が
Singleになっているのですが(Heightも)、なぜSingleなのでしょうか?
Formが整数の値しか取らないのであれば、Intでもいいような気がするのですが・・・。


Private Sub Command1_Click()
    '中央へ移動
    frmHyouji.Top = (Screen.Height - frmHyouji.Height) / 2
    frmHyouji.Left = (Screen.Width - frmHyouji.Width) / 2
End Sub

Private Sub Command2_Click()
    '左下へ移動
    frmHyouji.Top = Screen.Height - frmHyouji.Height
    frmhyouji.Left = 0
End Sub


本当に素人質問で申し訳ありませんがもう一度よろしくお願いします。

投稿時間:2003/05/17(Sat) 01:09
投稿者名:Starfish
Eメール:
URL :
タイトル:
Re^7: HeightとWidthについて
> そこで今、下記のようなコードを書いているのですが、"frmHyouji.Width"のところの型が
> Singleになっているのですが(Heightも)、なぜSingleなのでしょうか?
> Formが整数の値しか取らないのであれば、Intでもいいような気がするのですが・・・。

 Formは、Twip単位ですが、コントロールはTwip単位とは限らないので小数もありえます。
同じプロパティなのであわせてあるだけだと思いますが。違っているとわかりにくいですよね。