Ich versuche ChangeDisplaySettingsEx in Delphi 7 verwenden, um einen bestimmten Monitor als primäre festlegen. In Windows.pas, alsVerwenden von ChangeDisplaySettingsEx in Delphi zum primären Monitor festlegen
function ChangeDisplaySettingsEx(lpszDeviceName: PChar; var lpDevMode: TDeviceMode;
wnd: HWND; dwFlags: DWORD; lParam: Pointer): Longint; stdcall;
In MSDN definiert ist, die Dokumentation für ChangeDisplaySettingsEx hat den folgenden Kommentar für LPDEVMODE meldet: „Wenn LPDEVMODE NULL ist, werden alle Werte derzeit in der Registrierung für die Anzeige verwendet werden Rahmen."
Mein Ziel ist es, den primären Monitor auf einem System mit zwei aktiven Monitoren zu ändern, ohne etwas anderes zu ändern - Auflösung, Bittiefe usw. sollten alle gleich bleiben. Es scheint, als ob lpDevMode als null (nil) übergeben wird, ist die Methode, die bereitgestellt wird, um dies zu erreichen.
Allerdings ist LpDevMode als ein gepackter Datensatztyp (TDeviceMode) definiert, kein Zeigertyp in Delphi Windows.pas. Anscheinend führt die Delphi-Schnittstelle zur Windows-API die Übersetzung in die Zeiger aus, die von der Windows-API "hinter den Kulissen" verwendet werden.
Ich habe versucht, es so nennen:
var
alldevs : array[0..maxdev] of TDisplayDevice;
lpDevMode : pointer;
begin
lpDevMode := nil;
lparam := nil;
my_hwnd := nil;
{... snip....}
with alldevs[NewPri] do
ChangeDisplaySettingsEx(devicename,TDeviceMode(lpDevMode),my_hwnd,CDS_SET_PRIMARY,lparam);
Das bin ich eine ungültige Typumwandlung Fehler auf "TDeviceMode (LPDEVMODE)" gibt. Wie kann ich einen Nullzeiger an ChangeDisplaySettingsEx übergeben? Oder gibt es einen besseren Weg, dies zu tun? obwohl
Danke für den Vorschlag. Das kompiliert, aber es funktioniert nicht wirklich. ChangeDisplaySettingsEx gibt 0 (Erfolg) zurück, aber der primäre Monitor bleibt unverändert. – tim11g
mghie - danke für die detaillierten Informationen. Ich wusste nicht, dass ich die Anzeigeursprünge anpassen musste, bevor ich das Primärgerät einstellte. Ich kann das Problem jetzt nicht lösen, aber wenn ich das tue, lasse ich Sie wissen und poste hier einen funktionierenden Code. – tim11g