CLOSE
トラブルシューティング

トラブル

PowerBuilder アプリケーションにて、ウィンドウの X 位置プロパティに 0 を指定しているにも関わらず、モニター左端から数ピクセルずれて表示される。

原因

本事象は、Windows 10 から導入された『見えない境界線(Invisible Borders)』 と呼ばれる仕様 (DWM によるウィンドウ境界の拡張) が影響しています。
Windows 10 以降、デザイン性の向上 (ドロップシャドウの表示) や操作性の確保 (マウスでウィンドウ端を掴みやすくする) を目的として、目に見える境界線の外側に数ピクセルの透明な枠が存在しています。

具体的には、以下の乖離が発生しています。
OS が認識するウィンドウ位置 : 透明な枠を含めた「一番外側」の座標
目に見えるウィンドウ位置 : 色がついている「境界線の内側」の座標

この「見えない枠」の幅は、標準設定で左右および下側に約 7 ~ 8 ピクセル存在します。そのため、PowerBuilder の X 位置プロパティに 0 を指定すると、OS は「透明な枠の左端」を画面の左端 (座標 0) に配置します。その結果、目に見えるウィンドウ本体はその分だけ内側 (右側) にずれて表示されてしまいます。

対応方法

この問題を解決するには、OS が認識する「見えない境界線」の幅だけウィンドウの表示位置をマイナス方向にオフセット (補正) する必要があります。具体的には、X 座標に -7 ピクセル程度の値を指定することで、目に見える境界線をモニターの左端に合わせることが可能です。
なお PowerBuilder の Move 関数や X プロパティは PowerBuilder 単位 (PBU) で指定する必要があるため、PixelsToUnits 関数を使用してピクセル値を変換します。
以下は、ウィンドウの open イベントで指定したサンプルとなります。

this.Move(PixelsToUnits( -7,  XPixelsToUnits!),  0)

※ウィンドウプロパティの「その他」タブでは X 位置にマイナス値を指定することができないため、スクリプトで指定する必要があります。

x instagram facebook youtube

This website stores cookies on your computer. These cookies are used to provide a more personalized experience and to track your whereabouts around our website in compliance with the European General Data Protection Regulation. If you decide to to opt-out of any future tracking, a cookie will be setup in your browser to remember this choice for one year.

Accept or Deny