InsideHeightプロパティとWindowHeightプロパティの違いは?

このQ&Aのポイント
  • InsideHeightプロパティとWindowHeightプロパティは、フォームの高さをtwip単位で取得するためのプロパティです。
  • InsideHeightプロパティは長整数型の値を返し、WindowHeightプロパティは整数型の値を返します。
  • しかし、実際に値を取得すると、異なる値が返されることがあります。この違いの原因は明確ではありません。
回答を見る
  • ベストアンサー

InsideHeightプロパティとWindowH

InsideHeightプロパティとWindowHeightプロパティの違いは? ヘルプを見てもよくわかりません。 【InsideHeight プロパティ】 InsideWidth プロパティと共に使用して、 フォームを含むウィンドウの高さと幅を twip 単位で示します。 値の取得および設定が可能です。 長整数型 (Long) の値を使用します。 【WindowHeight プロパティ】 フォーム、レポート、またはデータ アクセス ページの高さ (twip 単位) を取得 Form または Report オブジェクト場合は整数型 (Integer) 値の取得および設定が可能です。 DataAccessPage オブジェクトの場合は長整数型 (Long) 値の取得のみ可能です。 との事ですが、どちらもフォームの高さをtwip 単位で取得して、 InsideHeight プロパティなら長整数型 WindowHeight プロパティなら整数型(フォームの場合)で返すって事ですよね? なのに、 Private Sub Form_Open(Cancel As Integer) Debug.Print "InsideHeight:" & Me.InsideHeight Debug.Print "WindowHeight:" & Me.WindowHeight End Sub で値を取得すると InsideHeight:11715 WindowHeight:12420 のように違う値が返ってくるのですが どういうことなのでしょうか?

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> どういうことなのでしょうか? InsideHeightの方は、「ウィンドウの枠の内側の高さ」です。 一方、WindowHeightの方は、「ウィンドウの外枠の高さ」になります。 通常の設定では、この2つの値の差の一番の要因は「タイトルバー の高さを含むか含まないか」です。 また、OSの画面デザインの設定で、「アクティブウィンドウの境界」や 「非アクティブウィンドウの境界」(いずれもWindows XPでの項目名) の『サイズ』を変更すると、両者の差は広がるため、この部分の値も WindowsHeightの方には含まれていることがわかります。

cjajrezrnsm
質問者

お礼

回答ありがとうございました。

関連するQ&A

  • フォームの詳細の高さをvbaで!

    アクセスのフォームの詳細の高さを プロパティシートで確認した時に高さが5cmとなっているのですが、 これを、VBAで指定する場合、どうすればいいのですか??? Private Sub Form_Open(Cancel As Integer) Me.詳細.Height = "5cm" End Sub にすると、型が一致しません。 と言われます。 ヘルプを見ると 値の単位は twip (twip : 画面上の長さの基本単位。1 論理 cm は 567 twip、 1論理インチは 1,440 twip です。ここで論理 cm および論理インチとは、 画面上に表示されているものを印刷したときに、 それぞれ 1 cm および 1 インチになる長さを指します。) です。 との事なのですが、 5cmにしたい時は、何twipを指定してあげればいいのでしょうか? その計算式なども教えて頂ければ助かります。

  • TopPaddingとTopの違いはなんでしょうか

    画像の様にアクセスのフォームにコマンドボタンを設置して、 Private Sub コマンド0_Click() Me.テキスト1.Value = Me.コマンド0.TopPadding Me.テキスト3.Value = Me.コマンド0.Top End Sub としたのですが、 TopPaddingとTopの違いがわかりません。 ヘルプによると、 -----------Control.TopPadding プロパティ ----------- コントロールと、上の枠線との間の余白をインチ単位で設定します。 値の取得および設定が可能です。整数型 (Integer) の値を使用します。 -----------CommandButton."Top/上位置" プロパティ----------- "Top/上位置" プロパティを使用すると、 フォームまたはレポート上のオブジェクトの位置を指定できます。 値の取得および設定が可能です。 整数型 (Integer) の値を使用します。 となっています。 デザインビューでのプロパティシートでは、 Top/上位置" プロパティがありますが、TopPadding プロパティは見つけられません。 TopPadding プロパティの 「コントロールと、上の枠線との間の余白」とは、度の事を言ってるのかわかりません。 特に「上の枠線」がわかりません。 実行結果が違う事から、違うプロパティと言う事はわかるのですが、 TopPaddingの意味を教えてください。

  • {アクセス}全てのフォームの名前を取得したい

    ひとつのMDBファイルに入っている全てのフォームの名前を取得したいのですが Sub 全てのフォームの名前を取得() Dim i As Integer For i = 1 To Forms.Count Debug.Print Forms.Name Next End Sub このコードだと オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) となってしまいます。 どうすればいいでしょうか よろしくお願い致します。

  • フォームを表示してからメッセージボックスを表示する

    メッセージボックスが表示される前に、フォームを表示させたいです。アクセスです。 ナビゲーションウインドウからフォームをダブルクリックしてフォームを開くのですが、 今のままだとメッセージボックスが表示されてからフォームが表示されてしまいます。 フォームを表示してからメッセージボックスを表示するにはどうすればいいでしょう? Private Sub Form_Open(Cancel As Integer) MsgBox "Form_Open" End Sub だと、先ほど述べたように、メッセージボックスが表示されてからフォームが表示されてしまいます。 フォームを開いたときのイベントは複数あるようで、 Private Sub Form_Activate() MsgBox "Form_Activate" Debug.Print "Form_Activate" End Sub Private Sub Form_Current() MsgBox "Form_Current" Debug.Print "Form_Current" End Sub Private Sub Form_GotFocus() MsgBox "Form_GotFocus" Debug.Print "Form_GotFocus" End Sub Private Sub Form_Open(Cancel As Integer) MsgBox "Form_Open" Debug.Print "Form_Open" End Sub Private Sub Form_Load() MsgBox "Form_Load" Debug.Print "Form_Load" End Sub をすると、 ・Form_Load ・Form_Activate ・Form_GotFocus ・Form_Open ・Form_Current の順に開きますが、やはりフォームが最後に表示されてしまいます。 どうにかして先にフォームを表示させる方法はないでしょうか? ご回答よろしくお願いします。

  • プロパティでフォーム間受渡し(Disposeで破棄?)

    クラスのプロパティを宣言して、フォーム間値の受け渡しを行っていま すが、少し不安・・・といいますか疑問があるので教えて下さい。 画面1から画面2を起動して、画面2で選択された値を画面1にあるテキスト ボックスへ返すという単純な処理です。 下記コードのように、プロパティで値の受け渡しを実現しているのです が、呼び出された画面2を閉じる時にMe.Dispose()も行っています。 そして画面2が閉じられると画面1のShowDialog以降の処理が通ると思う のですが、そもそも画面2をDisposeしたら、プロパティの値も破棄され てしまうのでは?・・・っと思っていたのですが、実際はきちんと 画面1で画面2の値を取得できています。 この辺、ガベージ・コレクタ絡みで、破棄される前に運よく取得できて いるだけなのかなと不安になってきました。 下記コードは正しいやり方なのかを含めて、ご回答よろしくお願い 致します。 ・画面1 Private Sub Button3_Click・・・ Dim objfrm001 As New Form1 '画面をオープン objfrm001.ShowDialog() If objfrm001.TestCode <> 0 Then TextBox1.Text = objfrm001.TestCode.ToString End If End Sub ・画面2 'プロパティ宣言 Private mintTestCode As Integer = 0 Public ReadOnly Property TestCode() As Integer Get Return mintTestCode End Get End Property   ・・・   mintTestCode = ComboTestCode    '値をセット後呼出された画面を閉じる Me.Close() Me.Dispose()

  • フォームにBackColorプロパティがない

    アクセス2010ですが フォームにBackColorプロパティはあるのに オブジェクトブラウザを見ると、 Form のクラスには DatasheetAlternateBackColor DatasheetBackColor しかないのですが、なぜBackColorプロパティはないのでしょうか?

  • Current、Openがそれぞれ2回発動する

    テーブルには適当なデータが入っています。 フォーム1を作り、コマンドボタンを1個だけ設置して、フォーム2を開くようにするために Private Sub コマンド0_Click() DoCmd.OpenForm Form_フォーム2.Name End Sub としました。 フォームはテーブルをレコードソースとしています。 フォーム2のモジュールに Private Sub Form_Current() Debug.Print "Form_Current" End Sub Private Sub Form_Open(Cancel As Integer) Debug.Print "Form_Open" End Sub としたのですが、結果は Form_Open Form_Current Form_Open Form_Current になります。 よって、二つのイベントの中にいくつかのプロシージャーが入っているのですが 2回ずつ実行されてしまい、求めている結果と異なってしまいます。 これを回避する方法はありますか? どうしてもフォーム1のコマンドボタンを押して、フォーム2をひらきたいのです。 よろしくお願いします。

  • フォーム上の全てのコントロールを取得したい

    フォーム上の全てのコントロールを取得したいです。 (サブフォームも含め) 自分なりにVBAで考えてみたのがこれです。 Sub test() Dim 数 As Long For Each 数 In Form_フォーム1.Controls.Count ’Debug.Print ? End If Next End Sub でもこれだけでもデバックしてみると 「コンハ゜イルエラー for Eachは、コレクション オブジェクトまたは配列でのみ繰り返しを実行します。」 となります。 答えを教えてください! よろしくお願いします。 (アクセス2003です)

  • AllowDesignChanges制御できない

    AllowDesignChangesがVBAで制御できない理由は? アクセスのフォームで、 Private Sub Form_Open(Cancel As Integer) Me.AllowDesignChanges = False 'デザイン変更の許可をしない End Sub を実行すると、 実行時エラー"2448" このオブジェクトに値を代入することができません。 になります。 でもAllowDesignChangesのヘルプを見ると、 「"AllowDesignChanges/デザイン変更の許可" プロパティは、 フォームのプロパティ シートまたは Visual Basic を使って設定できます。」 と書いてあります。 という事は、VBAで操作できるって事ですよね? それなのになぜエラーになるのでしょうか?

  • アクセスVBA 一個前や一個後の値を取得するには

    フォームの中にあるサブフォームの現在選択中のレコードの値を取得は出来たのですが 一個前や一個後の値を取得するにはどうすればいいですか? Sub test() Debug.Print Forms("F_Main").Controls("F_SubMain").Form.Filter Debug.Print Forms("F_Main").Controls("F_SubMain").Form.Controls("日付") End Sub で、現在のレコードの情報は取得できましたが 上のレコード、下のレコードを取得するコードを教えてください。

専門家に質問してみよう