喫茶XRAYトップページ

[スレッド全体
]

[10951] フォームの幅とウィンドウの幅返信 削除
2017/3/23 (木) 14:29:58 Mr.XRAY
[Windows10でフォームのサイズ、位置が思い通りにならない]
http://madia.world.coocan.jp/cgi-bin/DelphiBBS/wwwlng.cgi?print+201703/17030007.txt

マイクロソフトの仕様ですね (笑)
EXE を Windows 7 U64(SP1) + Delphi XE(UP1) Pro で作成してテストした結果です.
Form1 の BorderStyle は bsSizeable でテストしています.

Windows 10 の場合,フォームの幅ではなく,ウインドウの幅でキャフチャしないと,
周辺に背景が入ったキャプチャ画像となるわけです.


uses
  DWMAPI;

{$R *.dfm}

function GetWindowRectForVista(hWindow: HWND): TRect;
var
  ARect : TRect;
begin
  //Windows Vista以降は拡張フレーム
  if CheckWin32Version(6, 0) then begin
    //拡張したウィンドウのフレームのTRect構造体の値を取得
    DwmGetWindowAttribute(hWindow,
                          DWMWA_EXTENDED_FRAME_BOUNDS,
                          @ARect,
                          SizeOf(TRect));
  end else begin
    GetWindowRect(hWindow, ARect);
  end;
  Result := ARect;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  LVersion  : string;
  LRect     : TRect;
  LWidth1   : Integer;
  LWidth2   : Integer;
  LText     : string;
begin
  Self.Width := Screen.Width;
  Self.Left := 0;

  if CheckWin32Version(10, 0) then begin
    LVersion := 'Windows 10';
  end else
  if CheckWin32Version(6, 3) then begin
    LVersion := 'Windows 8.1';
  end else
  if CheckWin32Version(6, 2) then begin
    LVersion := 'Widows 8';
  end else
  if CheckWin32Version(6, 1) then begin
    LVersion := 'Widows 7';
  end;

  GetWindowRect(Handle, LRect);
  LWidth1 := LRect.Right - LRect.Left;

  LRect := GetWindowRectForVista(Handle);
  LWidth2 := LRect.Right - LRect.Left;

  LText := LVersion + sLineBreak
         + 'Screen.width : ' + IntToStr(Screen.Width) + sLineBreak
         + 'TForm.Left : ' + IntToStr(Self.Left) + sLineBreak
         + 'TForm.width : ' + IntTostr(Self.Width) + sLineBreak
         + 'GetWindowRect : ' + IntTostr(LWidth1) + sLineBreak
         + 'Windows.width : ' + IntToStr(LWidth2);
  MessageBox(Handle, PChar(LText), 'フォームの幅', MB_ICONINFORMATION);
end;




[10952] Re:フォームの幅とウィンドウの幅返信 削除
2017/3/23 (木) 15:01:41 Mr.XRAY
> マイクロソフトの仕様ですね (笑)

基本的には,そういうもんだと思って,そのまま使う方がいいと思いますけどね.
変な操作をしてしまうと後でトラブルの原因になる可能性があるかも.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82