GrapeCity SPREAD for Windows Forms 12.0J
高DPIのサポート

SPREADでは、高DPIのサポートが有効なアプリケーションにおいて、高DPI設定をサポートします。アプリケーションのDPIのサポートを有効にする方法については、Microsoft社のWebサイトを参照してください。

.NET Framework 4.5.2でのHDPIの有効化

以下、.NET Framework 4.5.2にて、DPIのサポートを有効にする手順を説明します。

  1. アプリケーションのマニフェストファイル(app.manifest)に、次の設定を追加します。
    app.manifest
    コードのコピー
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
      <asmv3:application>
        <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
          <dpiAware>true</dpiAware>
        </asmv3:windowsSettings>
      </asmv3:application>
    </assembly>
    
  2. アプリケーションのエントリポイント(Program.csまたはProgram.vb)を次のように変更します。
    C#
    コードのコピー
    static class Program
    {
        /// <summary>
        /// アプリケーションの主要なエントリポイントです。
        /// </summary>
        [STAThread]
        static void Main()
        {
            SetProcessDPIAware();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
     
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        public extern static IntPtr SetProcessDPIAware();
    }
    
    Visual Basic
    コードのコピー
    NotInheritable Class Program
        Private Sub New()
        End Sub
        ''' <summary>
        ''' アプリケーションのメイン エントリ ポイントです。
        ''' </summary>
        <STAThread> _
        Friend Shared Sub Main()
            SetProcessDPIAware()
            Application.EnableVisualStyles()
            Application.SetCompatibleTextRenderingDefault(False)
            Application.Run(New MainForm())
        End Sub
        <System.Runtime.InteropServices.DllImport("user32.dll")> _
        Friend Shared Function SetProcessDPIAware() As Boolean
        End Function
    End Class
    
    どのウィンドウを作成する場合でも、事前にSetProcessDPIAware APIを呼び出す必要があります。これをせず、このAPIを使用する前に作成されたウィンドウでは、不適切なサイズやフォントが使用されます。
  3. App.configに次の設定を追加して、Windows Formsの高DPIサポートを有効にします。
    App.config
    コードのコピー
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
      </appSettings>
    </configuration>
    

高DPI(DPIスケーリング)への対応

OSのDPI設定を変更した場合、コントロールのサイズはDPIの設定に応じて拡大されますが、SPREADの行の高さや列幅は変更されません。SPREADのスケーリングを有効にすると、DPIに応じて行の高さや列幅が変更されるようにできます。SPREADのスケーリングを有効にするには、FpSpreadクラスのSpreadScaleModeプロパティを使用します。

  • 300%までのスケーリングに対応しています。それより大きいサイズのスケーリングは、レイアウトが崩れる可能性があります。
  • 実行時のみ高DPIをサポートします。デザイナを高DPI環境で使用した場合は、レイアウトが崩れる可能性があります。

SpreadScaleModeプロパティの設定

SpreadScaleModeプロパティは、次のように設定します。

設定による影響

データ連結している場合、DataAutoSizeColumnsプロパティの設定が列幅に影響を及ぼす可能性があります。以下、SpreadScaleModeプロパティとの関係で、DPIの設定に応じてサイズが変更される要素を表しています。

SpreadScaleModeプロパティ
ZoomDpiSupport None(デフォルト)

DataAutoSizeColumns

プロパティ

True 列幅および行高さ 列幅のみ
False 列幅および行高さ なし

※コントロールのサイズは設定値に関わらず拡大されます。

参考情報

SPREADのスケーリングは、.NET Frameworkの自動スケーリング上で動作します。そのため、.NET Frameworkの自動スケーリングの動作を理解しておく必要があります。詳細は、次の情報を参照してください。

Web サイトWindows フォームにおける自動スケーリング

Web サイトAutoScaleDimensions プロパティ

自動スケーリングは、フォームのロード時にのみ行われます。実行時では、コントロールのサイズや位置が変更された時点、およびコンテナのレイアウトが一時停止された時点で、スケーリングが変更される可能性があります。

設定方法

  1. レイアウトを一時停止します。
  2. コントロールの位置とサイズを設定します。
  3. SpreadScaleMode プロパティを ZoomDpiSupport に設定します。
  4. ResumeLayout メソッドを使用して、変更を適用します。

サンプルコード

次のサンプルコードは、SpreadScaleMode プロパティを ZoomDpiSupport に設定して、レイアウトを一時停止してから再開します。

C#
コードのコピー
fpSpread.SuspendLayout();
AutoScaleDimensions = new System.Drawing.SizeF(96.0F, 96.0F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
fpSpread1.Location = new System.Drawing.Point(23, 86);
fpSpread1.Size = new System.Drawing.Size(356, 161);
fpSpread1.SpreadScaleMode = FarPoint.Win.Spread.ScaleMode.ZoomDpiSupport;
fpSpread1.ResumeLayout();
Visual Basic
コードのコピー
FpSpread1.SuspendLayout()
AutoScaleDimensions = New System.Drawing.SizeF(96.0F, 96.0F)
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi
FpSpread1.Location = New System.Drawing.Point(23, 86)
FpSpread1.Size = New System.Drawing.Size(356, 161)
FpSpread1.SpreadScaleMode = FarPoint.Win.Spread.ScaleMode.ZoomDpiSupport
FpSpread1.ResumeLayout()

.NET Framework 4.7でのHDPIの有効化

DPIのサポートを有効化するには、次の手順を実行します。

  1. .NET 4.7 Frameworkをインストールします。
  2. 新規のWindowsフォームアプリケーションを作成します。
  3. 以下の情報を使用して、App.configをWindowsフォームのルートディレクトリ(Program.csと同じディレクトリ)に追加します。
    App.config
    コードのコピー
    <?xml version="1.0" encoding="utf-8"?>
     <configuration>
       <startup>
         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
       </startup>
       <System.Windows.Forms.ApplicationConfigurationSection>
         <add key="DpiAwareness" value="PerMonitorV2"/>
         <!-- 修正を適用しない場合は、各コメントを解除してください。 -->
         <!--
         <add key="Form.DisableSinglePassScalingOfDpiForms" value="true"/>
         <add key="ToolStrip.DisableHighDpiImprovements" value="true"/>
         <add key="CheckedListBox.DisableHighDpiImprovements" value="true"/>
         <add key="MonthCalendar.DisableHighDpiImprovements" value="true"/>
         <add key="AnchorLayout.DisableHighDpiImprovements" value="true"/>
         <add key="DataGridView.DisableHighDpiImprovements" value="true"/>
         -->
       </System.Windows.Forms.ApplicationConfigurationSection>
     </configuration>
    
  4. 以下の情報を使用して、App.manifestをWindowsフォームのルートディレクトリ(Program.csと同じディレクトリ)に追加します。
    App.manifest
    コードのコピー
    <?xml version="1.0" encoding="utf-8"?>
    <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
      <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
          <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
            <!-- UACマニフェストオプション。Windowsユーザーアカウント制御レベルを変更する場合は、requestedExecutionLevelノードを、以下のいずれかに置換します。 -->
            <!--
            <requestedExecutionLevel level="asInvoker" uiAccess="false" />
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
            <requestedExecutionLevel level="highestAvailable" uiAccess="false" />
            -->
            <!-- requestedExecutionLevel要素を指定することで、ファイルおよびレジストリの仮想化を無効にします。下位互換性を維持するために、この仮想化がアプリケーションに必要となる場合は、この要素を削除します。 -->
            <requestedExecutionLevel level="asInvoker" uiAccess="false" />
          </requestedPrivileges>
        </security>
      </trustInfo>
      <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
        <application>
          <!-- このアプリケーションがテスト済みであり、使用が想定されるWindowsバージョンのリスト。適切な要素をコメント解除すると、Windowsは最も互換性の高い環境を自動選択します。 -->
          <!-- Windows 10 -->
          <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
        </application>
      </compatibility>
      <!--
      <application xmlns="urn:schemas-microsoft-com:asm.v3">
        <windowsSettings>
          <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
        </windowsSettings>
      </application>
      -->
    </assembly>
    
  5. Program.csに、以下の設定が含まれていることを確認します。
    Program.cs
    コードのコピー
    static class Program
    {
        // <summary>
        // アプリケーションのメインのエントリポイントです。
        // </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
    
  6. Form1.designer.csに、以下の設定が含まれていることを確認します。
    Form1.designer.cs
    コードのコピー
    this.fpSpread1.SpreadScaleMode = FarPoint.Win.Spread.ScaleMode.ZoomDpiSupport;
    this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
    
参照

 

 


Copyright © 2004 GrapeCity inc.