PowerTools SPREAD for Windows Forms 8.0J
高DPIのサポート

SPREADでは、高DPIのサポートが有効なアプリケーションにおいて、高DPI設定をサポートします。

アプリケーションでDPIサポートを有効化する方法の詳細については、Microsoft社のWebサイトを参照してください。

次の例では、.NET Framework 4.5.2でDPIサポートを有効にするための一般的な手順について説明します。

  1. 次のようなコードを、アプリケーションのマニフェストに追加します。
    コード
    コードのコピー
    <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. 次のようなコードにより、Windows APIを使用します。
    コード
    コードのコピー
    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();
    }
    
    どのウィンドウを作成する場合でも、事前にSetProcessDPIAware APIを呼び出す必要があります。これをせず、このAPIを使用する前に作成されたウィンドウでは、不適切なサイズやフォントが使用されます。
  3. App.configに次のようなコードを追加して、Windows Formsの高DPIサポートを有効化します。
    コード
    コードのコピー
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
      </appSettings>
    </configuration>
    

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

OSのDPI設定を変更した場合、コントロール全体がDPIの設定に応じて拡大されます。ただし、SPREAD内の行の高さ等はDPIに応じて変更されません。行の高さ等もDPIに応じたサイズへ対応するにはSpreadScaleModeプロパティを使用します。このプロパティを設定することにより200%までのWindows XP 形式スケーリングをサポートします。

SpreadScaleModeプロパティを有効にするための設定

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

各設定による影響

データ連結している場合、SpreadScaleModeプロパティはDataAutoSizeColumnsプロパティの設定により、下記のように動作します。

■DPIの設定に応じてサイズが変更するコンテンツ

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

DataAutoSizeColumns

プロパティ

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

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

当機能利用時の参考情報(.NET Frameworkの自動スケーリングの動作)

SPREADのスケーリングは、.NET Frameworkの自動スケーリング上で動作します。SpreadScaleModeプロパティを利用する場合、あらかじめ、.NET Frameworkの自動スケーリングの動作を理解しておいて頂く必要があります。

詳細については下記MSDNを参照してください。

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

Web サイトAutoScaleDimensions プロパティ

  • SPREADが対応しているサイズはWindows XP 形式のスケーリングにおける200%までです。それより大きいサイズでスケーリングを行う場合はレイアウトが崩れる可能性があります。
  • SPREADがサポートしているのは実行時のみで、開発時はサポートしていません。

SPREADでは、200%までの高DPIをサポートできます。これには SpreadScaleMode プロパティを使用します。DPI に基づいた行、列、セル、およびデータのリサイズがサポートされます。

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

最適な結果を得るには、SpreadScaleMode プロパティの ZoomDpiSupport オプションを使用する場合、コンテナの AutoScaleMode プロパティを「Dpi」に設定します。

コードの使用

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

関連トピック

 

 


© 2004-2015, GrapeCity inc. All rights reserved.