![]() |
Monitor 2 Ansteuern?
Hallo ,
Ich habe eine Redion 9800 se Grafik Karte. Ich möchte nun den 2 Monitor ansteuern mit folgendem code.
Delphi-Quellcode:
Es funtioniert aber nur über den S-Video ausgang. Ich hätte es aber gerne das er es über den DVI ausgang macht. :gruebel:
Type
TPOINTL = Packed Record x : DWORD; y : DWORD; End; TPrinterMonitor = Packed Record Case Integer Of 0 : (Paper: Packed Record dmOrientation: SHORT; dmPaperSize: SHORT; dmPaperLength: SHORT; dmPaperWidth: SHORT; dmScale: SHORT; dmCopies: SHORT; dmDefaultSource: SHORT; dmPrintQuality: SHORT; End;); 1 : (Monitor: Packed Record dmPosition : TPOINTL; dmDisplayOrientation : DWORD; dmDisplayFixedOutput : DWORD; End;) End; TDevModeA_new = packed record dmDeviceName: array[0..CCHDEVICENAME - 1] of AnsiChar; dmSpecVersion: Word; dmDriverVersion: Word; dmSize: Word; dmDriverExtra: Word; dmFields: DWORD; /// !!! Dual : TPrinterMonitor; /// !!! 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; procedure TForm1.Button1Click(Sender: TObject); Var lDevMode : TDevModeA_new; lRes : Cardinal; begin FillChar(lDevMode, SizeOf(lDevMode), 0); lDevMode.dmSize := SizeOf(lDevMode); lDevMode.dmBitsPerPel := 32; lDevMode.dmDisplayFrequency := 85; // alles hard kodiert für meinen 2. Monitor lDevMode.dmPelsWidth := 1280; lDevMode.dmPelsHeight := 1024; lDevMode.Dual.Monitor.dmPosition.x := 1280; // die Weite/Auflösung des primären Monitors bzw. Lage des Monitors in Relation zum primären Monitor mit 0,0 oben links lDevMode.Dual.Monitor.dmPosition.y := 0; lDevMode.dmFields := DM_BITSPERPEL Or DM_DISPLAYFREQUENCY Or DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_POSITION; lRes := ChangeDisplaySettingsEx( PChar('\\.\DISPLAY2'), TDevMode(lDevMode), 0, CDS_UPDATEREGISTRY, 0); If lres <> 0 Then ShowMessage('hat nicht geklappt'); end; end. MfG |
Re: Monitor 2 Ansteuern?
Moin!
Vielleicht hilft dir folgendes aus der Suche: ![]() MfG Muetze1 |
Re: Monitor 2 Ansteuern?
Hallo,
Danke für deine n Link, aber der code der die info über die grafik karte geben soll geht net. MfG |
Re: Monitor 2 Ansteuern?
Moin!
Zitat:
MfG Muetze1 |
Re: Monitor 2 Ansteuern?
Hi Mueztze1,
ne meine Listbox bleibt leer . MfG |
Re: Monitor 2 Ansteuern?
Moin!
Schonmal debuggt? Die einzige Möglichkeit wäre ja, wenn "EnumDisplayDevices(Nil, Cntr, Info, 0)" der While Schleife fehlschlägt. Wenn dem so ist, was sagt er dir, wenn du danach einfach mal folgendes hizufügt?
Delphi-Quellcode:
?
ShowMessage(SysErrorMessage(GetLastError));
MfG Muetze1 |
Re: Monitor 2 Ansteuern?
Hi,
Da sagt er auch nix. ich hoffe doch ich hab nix vergessen. :gruebel: also, es kommt keine fehler meldung. aber die listbox bleibt leer. MfG |
Re: Monitor 2 Ansteuern?
Moin!
Da sagt er auch nix, kann nicht sein. Selbst wenn kein Fehler aufgetreten ist, sagt er dies "Es ist kein Fehler aufgetreten". Somit schau bitte nochmal nach. Schonmal durchdebuggt? Kommt er überhaupt in die Procedure rein? MfG Muetze1 |
Re: Monitor 2 Ansteuern?
Hallo,
er ruft die procedure nicht auf, wieso nicht?
Delphi-Quellcode:
MfGunit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; lbMonitorList: TListBox; procedure Button1Click(Sender: TObject); Procedure FillMonitorList; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} Type TPOINTL = Packed Record x : DWORD; y : DWORD; End; TPrinterMonitor = Packed Record Case Integer Of 0 : (Paper: Packed Record dmOrientation: SHORT; dmPaperSize: SHORT; dmPaperLength: SHORT; dmPaperWidth: SHORT; dmScale: SHORT; dmCopies: SHORT; dmDefaultSource: SHORT; dmPrintQuality: SHORT; End;); 1 : (Monitor: Packed Record dmPosition : TPOINTL; dmDisplayOrientation : DWORD; dmDisplayFixedOutput : DWORD; End;) End; TDevModeA_new = packed record dmDeviceName: array[0..CCHDEVICENAME - 1] of AnsiChar; dmSpecVersion: Word; dmDriverVersion: Word; dmSize: Word; dmDriverExtra: Word; dmFields: DWORD; /// !!! Dual : TPrinterMonitor; /// !!! 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; //*************************************************************************************************** procedure TForm1.Button1Click(Sender: TObject); Var lDevMode : TDevModeA_new; lRes : Cardinal; begin FillChar(lDevMode, SizeOf(lDevMode), 0); lDevMode.dmSize := SizeOf(lDevMode); lDevMode.dmBitsPerPel := 32; lDevMode.dmDisplayFrequency := 85; // alles hard kodiert für meinen 2. Monitor lDevMode.dmPelsWidth := 1280; lDevMode.dmPelsHeight := 1024; lDevMode.Dual.Monitor.dmPosition.x := 1280; // die Weite/Auflösung des primären Monitors bzw. Lage des Monitors in Relation zum primären Monitor mit 0,0 oben links lDevMode.Dual.Monitor.dmPosition.y := 0; lDevMode.dmFields := DM_BITSPERPEL Or DM_DISPLAYFREQUENCY Or DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_POSITION; lRes := ChangeDisplaySettingsEx( PChar('\\.\DISPLAY2'), TDevMode(lDevMode), 0, CDS_UPDATEREGISTRY, 0); If lres <> 0 Then ShowMessage('hat nicht geklappt'); end; //*************************************************************************************************** Procedure TForm1.FillMonitorList; Var Cntr : Cardinal; Info : TDisplayDevice; AdapterName : PChar; OldPos : Integer; Const DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = $00000001; DISPLAY_DEVICE_MULTI_DRIVER = $00000002; DISPLAY_DEVICE_PRIMARY_DEVICE = $00000004; DISPLAY_DEVICE_MIRRORING_DRIVER = $00000008; DISPLAY_DEVICE_VGA = $00000010; Begin lbMonitorList.Items.Add('------------------ Displays ----------------'); Cntr := 0; Info.cb := SizeOf(Info); While EnumDisplayDevices(Nil, Cntr, Info, 0) Do Begin lbMonitorList.Items.Add('* Device '+IntToStr(Cntr)+':'); lbMonitorList.Items.Add(' DeviceName : '+Info.DeviceName); lbMonitorList.Items.Add(' DeviceString: '+Info.DeviceString); OldPos := lbMonitorList.Items.Add(' StateFlags: '); If ( Info.StateFlags And DISPLAY_DEVICE_ATTACHED_TO_DESKTOP ) = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP Then lbMonitorList.Items.Add(' + Display Device Attached To Desktop') Else lbMonitorList.Items.Add(' - Display Device Attached To Desktop'); If ( Info.StateFlags And DISPLAY_DEVICE_MULTI_DRIVER ) = DISPLAY_DEVICE_MULTI_DRIVER Then lbMonitorList.Items.Add(' + Display Device Multi Driver') Else lbMonitorList.Items.Add(' - Display Device Multi Driver'); If ( Info.StateFlags And DISPLAY_DEVICE_PRIMARY_DEVICE ) = DISPLAY_DEVICE_PRIMARY_DEVICE Then lbMonitorList.Items.Add(' + Display Device Primary Device') Else lbMonitorList.Items.Add(' - Display Device Primary Device'); If ( Info.StateFlags And DISPLAY_DEVICE_MIRRORING_DRIVER ) = DISPLAY_DEVICE_MIRRORING_DRIVER Then lbMonitorList.Items.Add(' + Display Device Mirroring Driver') Else lbMonitorList.Items.Add(' - Display Device Mirroring Driver'); If ( Info.StateFlags And DISPLAY_DEVICE_VGA ) = DISPLAY_DEVICE_VGA Then lbMonitorList.Items.Add(' + Display Device VGA') Else lbMonitorList.Items.Add(' - Display Device VGA'); AdapterName := StrAlloc(SizeOf(Info.DeviceName)); StrCopy(AdapterName, Info.DeviceName); EnumDisplayDevices(AdapterName, 0, Info, 0); ShowMessage(SysErrorMessage(GetLastError)); lbMonitorList.Items.Insert(OldPos, ' Monitorname : ' + Info.DeviceString); StrDispose(AdapterName); Inc(Cntr); End; End; end. |
Re: Monitor 2 Ansteuern?
Moin!
Ähm :wall: , ja, ok.... wie soll's sagen.... Wenn du die Procedure auch nicht aufrufst... Woher sollte er denn Wissen wieso und wann er diese Procedure denn aufrufen sollte? Wie wär's denn mit einem neuen Button und in dessen OnClick einfach mal FillMonitorList; aufzurufen? Nur mal so als Vorschlag... :cheers: MfG Muetze1 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz