2013年8月16日金曜日

Width = ClientWidth な問題

Lazarus (Windows 8 pro,Lazarus 1.0.10, FPC 2.6.2)
では TForm などの Width と ClientWidth が等しいようです。

仕様とのこと。

今後 Delphi 互換性向上の対策などもあり、ソースをたどると既にそれらしきメソッドなども用意されています。
(対策済みなのかどうなのか。確認してないので各自で確認してください。)

私的には適当にデザインしたり動的にコントロール作成したりして使ってる分には、これといって不都合は今のところありません。

なぜ不都合がないのか不思議なのだけど、それはそれでつじつまが合っているようです。
あまり深くは考えないことにしましょう。

ウィンドウを並べたい場合には、やはり問題が生じ、単に Left + Width の位置に新しいウィンドウを作成して配置しただけでは、ウィンドウの枠が大きく重なってしまいます。


とりあえず。

ウィンドウを横に二つ並べる場合、以下のコードで解決するので書いておきます。

procedure TForm1.Example;
var
  borderfix:= GetSystemMetrics(SM_CXFRAME);
  x, y : integer;
begin
  x:= Left + Width + borderfix;
  y:= Top;
  Form2.SetBounds( x, y, Width, Height);
end;

これできっちりそろいます。(Windows 8)

以上。

0 件のコメント:

コメントを投稿