J'essaie d'utiliser ChangeDisplaySettingsEx dans Delphi 7 pour définir un moniteur spécifique comme principal. Dans Windows.pas, il est défini commeUtilisation de ChangeDisplaySettingsEx dans Delphi pour définir le moniteur principal
function ChangeDisplaySettingsEx(lpszDeviceName: PChar; var lpDevMode: TDeviceMode;
wnd: HWND; dwFlags: DWORD; lParam: Pointer): Longint; stdcall;
En MSDN, la documentation ChangeDisplaySettingsEx a le commentaire suivant pour LPDEVMODE: « Si LPDEVMODE est NULL, toutes les valeurs actuellement dans le registre seront utilisés pour l'affichage réglage."
Mon objectif est de changer le moniteur principal sur un système avec deux moniteurs actifs, sans rien changer d'autre - la résolution, la profondeur de bits, etc, devraient tous rester les mêmes. Il semble que passer lpDevMode comme null (nil) est la méthode fournie pour accomplir ceci. Toutefois, lpDevMode est défini comme un type d'enregistrement condensé (TDeviceMode), et non comme un type de pointeur, dans Windows.pas de Delphi. Apparemment, l'interface Delphi de l'API Windows effectue la traduction vers les pointeurs utilisés par l'API Windows «dans les coulisses».
J'ai essayé d'appeler comme ceci:
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);
Cela me donne une erreur de conversion de type invalide "TDeviceMode (LPDEVMODE)". Comment puis-je passer un pointeur null à ChangeDisplaySettingsEx? Ou y a-t-il une meilleure façon de faire cela?
Merci pour la suggestion. Cela compile, mais cela ne fonctionne pas vraiment. ChangeDisplaySettingsEx renvoie 0 (succès), mais le moniteur principal reste inchangé. – tim11g
mghie - merci pour les informations détaillées. Je ne savais pas qu'il fallait ajuster les origines de l'affichage avant de régler le primaire. Je ne peux pas revenir à la résolution de ce problème en ce moment, mais quand je le ferai, je vous le ferai savoir et publierai n'importe quel code de travail ici. – tim11g