-
Код, как я понял, возвращает глубину цвета первичного (primary) монитора:
DC := GetDC(0);
Result := GetDeviceCaps(DC, BITSPIXEL) * GetDeviceCaps(DC, PLANES);
как добраться до вторичных мониторов?
-
Screen.Monitors не подойдёт?
-
> Screen.Monitors не подойдёт?
Если бы он еще глубину цвета возвращал...
-
> Дмитрий Белькевич (18.05.10 22:31) [2]
Оно handle возвращает.
-
Die Eigenschaft Handle gibt das Fenster-Handle des Bildschirms an.
Delphi-Syntax:
property Handle: HMONITOR;
C++ Syntax:
__property HMONITOR Handle = {read=FHandle, nodefault};
Beschreibung
Mit Handle können Sie ein Fenster-Handle für den Bildschirm abrufen. Dieses Handle kann anschließend in Aufrufen der Windows-API (z.B. GetMonitorInfo) verwendet werden.
-
> как добраться до вторичных мониторов?
EnumDisplayMonitors
-
оно передает callback-функции HDC монитора
-
пробую так:
function GetBPP(Monitor: TMonitor): cardinal;
const
ENUM_CURRENT_SETTINGS = cardinal(-1);
var
MonitorInfo: TMonitorInfoEx;
DeviceMode: TDeviceMode;
begin
ZeroMemory(@MonitorInfo, SizeOf(TMonitorInfoEx));
MonitorInfo.cbSize := SizeOf(TMonitorInfoEx);
if not GetMonitorInfo(Monitor.Handle, @MonitorInfo) then
ShowMessage(SysErrorMessage(GetLastError));
if not EnumDisplaySettings(MonitorInfo.szDevice, ENUM_CURRENT_SETTINGS, DeviceMode) then
ShowMessage(SysErrorMessage(GetLastError));
Result := DeviceMode.dmBitsPerPel;
end;
пишет 'Параметр задан неверно' на GetMonitorInfo. Делфи - 2010, если что.
-
> пишет 'Параметр задан неверно' на GetMonitorInfo. >
А подумать?
-
Ну я думаю, что размер не совпадает, какой тут еще параметр может быть задан?
Из хэлпа:
You must set the cbSize member of the structure to sizeof(MONITORINFO) or sizeof(MONITORINFOEX) before calling the GetMonitorInfo function. Doing so lets the function determine the type of structure you are passing to it.
Вроде всё верно передаю... И больше ничего не нужно.
-
BDS2006 полёт нормальный.
Проверь может в bds2010 заменили ссылку GetMonitorInfo с GetMonitorInfoA на GetMonitorInfoW, а TMonitorInfoEx оставили старую TMonitorInfoExA.
-
> Дмитрий Белькевич (19.05.10 09:59) [9]
> Ну я думаю, что размер не совпадает, какой тут еще параметр > может быть задан?
Проверь, д.б.:
type
tagMONITORINFOEXW = record
cbSize: DWORD;
rcMonitor: TRect;
rcWork: TRect;
dwFlags: DWORD;
szDevice: array[0..CCHDEVICENAME - 1] of WideChar;
end;
Раньше у этих двоечников было array[0..CCHDEVICENAME], может к тому и вернулись. -- Regards, LVT.
-
Нашел:
@GetMonitorInfo := InitAnApi(mmGetMonitorInfo, @GetMonitorInfo, 'GetMonitorInfoA');
Таки [10], нужно GetMonitorInfoW вызывать. Всем спасибо.
-
Код такой: procedure TForm1.Button1Click(Sender: TObject);
function CreateFullscreenWindow(const AWnd: HWND): HWND; var hmon: HMONITOR; mi: TMonitorInfo; begin hmon := MonitorFromWindow(AWnd, MONITOR_DEFAULTTONEAREST); FillChar(mi, SizeOf(mi), 0); mi.cbSize := SizeOf(mi); if not GetMonitorInfo(hmon, @mi) then Exit(0); Result := CreateWindow('static', 'Òóò ìîæåò ïðîèñõîäèòü ÷òî-òî èíòåðåñíîå', WS_POPUP or WS_VISIBLE, mi.rcMonitor.left, mi.rcMonitor.top, mi.rcMonitor.right - mi.rcMonitor.left, mi.rcMonitor.bottom - mi.rcMonitor.top, AWnd, 0, HInstance, nil); end; begin CreateFullscreenWindow(Handle); end; выдает ошибки: [Error] main.pas(31): Undeclared identifier: 'HMONITOR' [Error] main.pas(32): Undeclared identifier: 'TMonitorInfo' [Error] main.pas(34): Undeclared identifier: 'MonitorFromWindow' [Error] main.pas(34): Undeclared identifier: 'MONITOR_DEFAULTTONEAREST' [Error] main.pas(36): Missing operator or semicolon [Error] main.pas(37): Undeclared identifier: 'GetMonitorInfo' [Error] main.pas(38): Missing operator or semicolon [Error] main.pas(39): Not enough actual parameters [Error] main.pas(39): Statement expected, but expression of type 'Integer' found [Fatal Error] lohotron.dpr(5): Could not compile used unit 'main.pas' Что не так?
-
А где твой uses?
-
Спасибо , но выдает: [Error] main.pas(38): Missing operator or semicolon на if not GetMonitorInfo(hmon, @mi) then Exit(0);
|