Подключаю второй монитор. Для включения "Расширить рабочий стол на этот монитор" иcпользую следующий код:
| Код | procedure TForm1.Button1Click(Sender: TObject); var Ret: integer; dm: TDEVMODE; begin ZeroMemory(@dm, sizeof(DEVMODE)); dm.dmSize:= sizeof(DEVMODE); dm.dmBitsPerPel:= 32; dm.dmPelsWidth:= 1024; dm.dmPelsHeight:= 768; // dm.dmPosition.X:= ? <---- // dm.dmPosition.Y:= ? <---- dm.dmDisplayFrequency:= 60; dm.dmFields:= DM_BITSPERPEL or DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY or DM_POSITION; Ret:= ChangeDisplaySettingsEx('\\.\DISPLAY2', dm, 0, CDS_TEST, nil); if Ret = DISP_CHANGE_SUCCESSFUL then ChangeDisplaySettingsEx('\\.\DISPLAY2', dm, 0, CDS_NORESET or CDS_UPDATEREGISTRY, nil);
ChangeDisplaySettingsEx('\\.\DISPLAY2', PDeviceMode(nil)^, 0, StrToInt('0x40'), nil); end;
|
Все работает нормально. Только нужно еще задать позиции Х и Y у подключаемого монитора, которые должны задаваться через поля dmPosition.X, dmPosition.Y в записи dm. Но поля dmPosition в TDEVMODE (Windows.pas) я не обнаружил,
структара TDevMode:
| Код | _devicemodeA = packed record dmDeviceName: array[0..CCHDEVICENAME - 1] of AnsiChar; dmSpecVersion: Word; dmDriverVersion: Word; dmSize: Word; dmDriverExtra: Word; dmFields: DWORD; dmOrientation: SHORT; dmPaperSize: SHORT; dmPaperLength: SHORT; dmPaperWidth: SHORT; dmScale: SHORT; dmCopies: SHORT; dmDefaultSource: SHORT; dmPrintQuality: SHORT; dmColor: SHORT; dmDuplex: SHORT; dmYResolution: SHORT; dmTTOption: SHORT; dmCollate: SHORT; dmFormName: array[0..CCHFORMNAME - 1] of AnsiChar; dmLogPixels: Word; dmBitsPerPel: DWORD; dmPelsWidth: DWORD; dmPelsHeight: DWORD; dmDisplayFlags: DWORD; dmDisplayFrequency: DWORD; dmICMMethod: DWORD; dmICMIntent: DWORD; dmMediaType: DWORD; dmDitherType: DWORD; dmICCManufacturer: DWORD; dmICCModel: DWORD; dmPanningWidth: DWORD; dmPanningHeight: DWORD; end;
|
а в MSDN http://msdn.microsoft.com/ru-ru/library/dd183565.aspx есть
| Код | typedef struct _devicemode { TCHAR dmDeviceName[CCHDEVICENAME]; WORD dmSpecVersion; WORD dmDriverVersion; WORD dmSize; WORD dmDriverExtra; DWORD dmFields; union { struct { short dmOrientation; short dmPaperSize; short dmPaperLength; short dmPaperWidth; short dmScale; short dmCopies; short dmDefaultSource; short dmPrintQuality; }; struct { POINTL dmPosition; <------ DWORD dmDisplayOrientation; DWORD dmDisplayFixedOutput; }; }; short dmColor; short dmDuplex; short dmYResolution; short dmTTOption; short dmCollate; TCHAR dmFormName[CCHFORMNAME]; WORD dmLogPixels; DWORD dmBitsPerPel; DWORD dmPelsWidth; DWORD dmPelsHeight; union { DWORD dmDisplayFlags; DWORD dmNup; }; DWORD dmDisplayFrequency; #if (WINVER >= 0x0400) DWORD dmICMMethod; DWORD dmICMIntent; DWORD dmMediaType; DWORD dmDitherType; DWORD dmReserved1; DWORD dmReserved2; #if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400) DWORD dmPanningWidth; DWORD dmPanningHeight; #endif #endif } DEVMODE, *PDEVMODE, *LPDEVMODE;
|
Подскажите, как и что нужно сделать, чтобы задать эти параметры? |