[]
        
(Showing Draft Content)

高DPIのサポート

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


<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>

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();
}
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

<?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プロパティを使用します。

!type=warning

注意:

  • 300%までのスケーリングに対応しています。それより大きいサイズのスケーリングは、レイアウトが崩れる可能性があります。

  • 実行時のみ高DPIをサポートします。デザイナを高DPI環境で使用した場合は、レイアウトが崩れる可能性があります。

SpreadScaleModeプロパティの設定

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

  • Visual Studioのデザイン画面でコンテナのAutoScaleModeプロパティをDPIに設定します。

    ※AutoScaleModeがDPI以外に設定されている場合、SPREADのSpreadScaleModeプロパティは正常に機能しません。

  • Visual Studioのデザイン画面でSPREADのSpreadScaleModeプロパティをZoomDpiSupportに変更します。

設定による影響

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

設定による影響


SpreadScaleModeプロパティ

ZoomDpiSupport

None(デフォルト)

DataAutoSizeColumns プロパティ

True

列幅および行高さ

列幅のみ

False

列幅および行高さ

なし

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

参考情報

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

webWindows フォームにおける自動スケーリング

webAutoScaleDimensions プロパティ

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

設定方法

  1. レイアウトを一時停止します。

  2. コントロールの位置とサイズを設定します。

  3. SpreadScaleMode プロパティを ZoomDpiSupport に設定します。

  4. ResumeLayout メソッドを使用して、変更を適用します。

サンプルコード

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

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();
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.8でのHDPIの有効化

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

  1. .NET 4.8 Frameworkをインストールします。

  2. 新規のWindowsフォームアプリケーションを作成します。

  3. 以下の情報を使用して、App.configをWindowsフォームのルートディレクトリ(Program.csと同じディレクトリ)に追加します。

    <?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と同じディレクトリ)に追加します。

    <?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に、以下の設定が含まれていることを確認します。

    static class Program
    {
        // <summary>
        // アプリケーションのメインのエントリポイントです。
        // </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
  6. 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;

参照

製品の使用方法

コントロールのプロジェクトへの追加

プロパティの設定方法

アプリケーションの配布