这是我现在工作的How can I get the Delphi IDE's Main Form?的后续行动。
我想更进一步,将我的设计师放在与Object Inspector相同的表单上,对于那些使用经典的未对接桌面布局并且可能在与主Delphi IDE表单不同的屏幕上使用Object Inspector的人
关于如何在设计时包中找到Object Inspector的监视器的任何想法?
答案 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;