наше приложение delphi может иметь несколько окон DirectX, часто на нескольких экранах. до сих пор пользователю приходилось указывать полноэкранное разрешение, используя выпадающий список поддерживаемых разрешений. было бы очень хорошо, если бы он мог использовать такую настройку, как «текущая», которая была бы разрешением экрана, на котором находится окно.
мы используем delphi с заголовками clootie directX. Может кто-нибудь дать мне подсказку, как я мог бы написать метод, используя методы DirectX, WinAPI или Delphi, чтобы получить разрешение текущего экрана, на котором окно?
С уважением,
thalm
Окончательное решение:
хорошо, delphi 2007 MultiMon.pas возвращает дерьмо для GetMonitorInfo, , поэтому я нашел этот метод, который работает для меня, используя winAPI напрямую:
function GetRectOfMonitorContainingRect(const R: TRect): TRect;
{ Returns bounding rectangle of monitor containing or nearest to R }
type
HMONITOR = type THandle;
TMonitorInfo = record
cbSize: DWORD;
rcMonitor: TRect;
rcWork: TRect;
dwFlags: DWORD;
end;
const
MONITOR_DEFAULTTONEAREST = $00000002;
var
Module: HMODULE;
MonitorFromRect: function(const lprc: TRect; dwFlags: DWORD): HMONITOR; stdcall;
GetMonitorInfo: function(hMonitor: HMONITOR; var lpmi: TMonitorInfo): BOOL; stdcall;
M: HMONITOR;
Info: TMonitorInfo;
begin
Module := GetModuleHandle(user32);
MonitorFromRect := GetProcAddress(Module, 'MonitorFromRect');
GetMonitorInfo := GetProcAddress(Module, 'GetMonitorInfoA');
if Assigned(MonitorFromRect) and Assigned(GetMonitorInfo) then begin
M := MonitorFromRect(R, MONITOR_DEFAULTTONEAREST);
Info.cbSize := SizeOf(Info);
if GetMonitorInfo(M, Info) then begin
Result := Info.rcMonitor;
Exit;
end;
end;
Result := GetRectOfPrimaryMonitor(True);
end;