如何判断Delphi IDE Object Inspector的监视器是什么?

时间:2009-06-09 15:06:01

标签: delphi ide

这是我现在工作的How can I get the Delphi IDE's Main Form?的后续行动。

我想更进一步,将我的设计师放在与Object Inspector相同的表单上,对于那些使用经典的未对接桌面布局并且可能在与主Delphi IDE表单不同的屏幕上使用Object Inspector的人

关于如何在设计时包中找到Object Inspector的监视器的任何想法?

1 个答案:

答案 0 :(得分:5)

这应该适用于属性检查员是否已停靠,因为它会回退到停靠案例的主要表单:

function EnumWindowsProc(hwnd: HWND; lParam: LPARAM): Integer; stdcall;
var
  ClassName: string;
  PID: Cardinal;
begin
  Result := 1;
  GetWindowThreadProcessId(hwnd, PID);
  if PID = GetCurrentProcessId then 
  begin
    SetLength(ClassName, 64);
    SetLength(ClassName, GetClassName(hwnd, PChar(ClassName), Length(ClassName)));
    if ClassName = 'TPropertyInspector' then 
    begin
      PHandle(lParam)^ := hwnd;
      Result := 0;
    end;
  end;
end;

function GetPropertyInspectorMonitor: TMonitor;
var
  hPropInsp: HWND;
begin
  hPropInsp := 0;
  EnumWindows(@EnumWindowsProc, LPARAM(@hPropInsp));
  if hPropInsp = 0 then
    hPropInsp := Application.MainFormHandle;
  Result := Screen.MonitorFromWindow(hPropInsp);
end;