喫茶XRAYトップページ

[スレッド全体
]

[12532] MainFormOnTaskbar返信 削除
2019/1/18 (金) 13:54:09 Mr.XRAY
[ GetWindowでのオーナーフォームハンドルの取得について ]
https://www.freeml.com/delphi-users/5087/latest

ということで MainFormOnTaskbar のテストです.
テストコードは以下です.

//-----------------------------------------------------------------------------
//  ウィンドウのハンドルからクラス名を取得する関数
//-----------------------------------------------------------------------------
function GetClassNameStr(hWindow: HWND): string;
var
  LLength : Integer;
  LBuffer : array[0..MAX_PATH-1] of Char;
begin
  FillChar(LBuffer, SizeOf(LBuffer), #0);
  LLength := GetClassName(hWindow, LBuffer, Length(LBuffer));
  if LLength > 0 then begin
    SetString(Result, LBuffer, LLength);
  end else begin
    Result := '';
  end;
end;

//=============================================================================
//  指定ウィンドウのオーナーウィンドウを取得してそのクラス名を表示
//
//  MainFormOnTaskBar が True の時は TForm1 はトップレベルのウィンドウ
//  MainFormOnTaskBar が False の時は TApplication がトップレベルのウィンドウ
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LhTargetWnd : HWND;
  LhOwnerWnd  : HWND;
  LIsVisible  : Boolean;
begin
  Memo1.Lines.Clear;

  //Delphi2007以上
  {$IF CompilerVersion > 18.49}
  Memo1.Lines.Add('MainFormOnTaskbar  : ' + BoolToStr(Application.MainFormOnTaskbar, True));
  {$IFEND}
  Memo1.Lines.Add('Application.Handle : $' + IntToHex(Application.Handle, 8));


  LhTargetWnd := Handle;
  LhOwnerWnd := GetWindow(LhTargetWnd, GW_OWNER);

  Memo1.Lines.Add('');
  Memo1.Lines.Add('Target Window');
  Memo1.Lines.Add('Handle    : $' + IntToHex(LhTargetWnd, 8));
  Memo1.Lines.Add('ClassName : ' + GetClassNameStr(LhTargetWnd));

  LIsVisible := IsWindowVisible(LhTargetWnd) and (LhTargetWnd <> 0);
  Memo1.Lines.Add('Visible   : ' + BoolToStr(LIsVisible, True));


  Memo1.Lines.Add('');
  Memo1.Lines.Add('Owner Window of Target window');
  Memo1.Lines.Add('Handle    : $' + IntToHex(LhOwnerWnd, 8));
  Memo1.Lines.Add('ClassName : ' + GetClassNameStr(LhOwnerWnd));

  LIsVisible := IsWindowVisible(LhOwnerWnd) and (LhOwnerWnd <> 0);
  Memo1.Lines.Add('Visible   : ' + BoolToStr(LIsVisible, True));
end;

下図は MainFormOnTaskBar が True の時です.
動作確認は Windows 7 U64(SP1) + Delphi XE5(UP2) Pro VCL-32 です.
タスクバーの表示にも注目ですね.


[12533] Re:MainFormOnTaskbar返信 削除
2019/1/18 (金) 13:55:23 Mr.XRAY
MainFormOnTaskBar が False の時です.
動作確認は Windows 7 U64(SP1) + Delphi XE5(UP2) Pro VCL-32 です.
タスクバーの表示にも注目ですね.


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