Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Display umschalten (https://www.delphipraxis.net/137455-display-umschalten.html)

msickel 21. Jul 2009 08:39


Display umschalten
 
Hallo,

ich habe folgenden Code hier gefunden,

Delphi-Quellcode:

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;
leider kommt es unter delphi 2009 hier zu einer Fehlermeldung, da ich nicht weiss was ich anpassen muss das es unter delphi 2009 compiliert wollte ich fragen ob mir jemand unter die Arme greifen kann.

Delphi-Quellcode:

lRes := ChangeDisplaySettingsEx( PChar('\\.\DISPLAY2'),
                             TDevMode(lDevMode),
                             0,
                             CDS_UPDATEREGISTRY,
                             0);
Gruss Martin

himitsu 21. Jul 2009 08:50

Re: Display umschalten
 
spontan würde ich sagen:
TDevModeA_new ... fällt dir das (vermutliche) Ansi-A in die Augen?
(D2009 ist Unicode, also W)

Zitat:

eider kommt es unter delphi 2009 hier zu einer Fehlermeldung,
Welche denn? (daß man da bei Allen erst nachfragen muß :wall: )

msickel 21. Jul 2009 09:28

Re: Display umschalten
 
Zitat:

Zitat von himitsu
spontan würde ich sagen:
TDevModeA_new ... fällt dir das (vermutliche) Ansi-A in die Augen?
(D2009 ist Unicode, also W)

Zitat:

eider kommt es unter delphi 2009 hier zu einer Fehlermeldung,
Welche denn? (daß man da bei Allen erst nachfragen muß :wall: )

der Fehler war E2089 Ungültige Typenumwandlung

der Tipp mit A und W war gut, Anpassung vorgenommen und schon kompiliert es, Danke.

himitsu 21. Jul 2009 09:51

Re: Display umschalten
 
da du hier allerdings ChangeDisplaySettingsEx und PChar nutzt, sollte besser garkeine Kennung angegeben werden

TDeviceModeA + ChangeDisplaySettingsExA + PAnsiChar
TDeviceModeW + ChangeDisplaySettingsExW + PWideChar
oder eben
TDeviceMode + ChangeDisplaySettingsEx + PChar

Nativ sind zwar nur A und W vorhanden,
aber die Version ohne Typen-Kennung, wird oftmals dennoch implementiert und dan auf den nativen Typen des Kompilers umgeleitet, also bis D2007 nach A und in D2009 nach W

PS:
Delphi-Quellcode:
PDevMode = PDeviceMode; {compatibility with Delphi 1.0}
TDevMode = TDeviceMode; {compatibility with Delphi 1.0}

MaToBe 14. Nov 2009 16:23

Re: Display umschalten
 
Guten Tag,

genau diesen Fehler mit der Typenumwandlung habe ich auch, allerdings werde ich aus der hier genannten Lösung nicht schlau. Was muss ich genau tun?

MFG

himitsu 15. Nov 2009 12:36

Re: Display umschalten
 
Du mußt es einfach so regeln, daß die Nötigen Typen übereinstimmen.

Erstmal könnte man schauen, was Delphi denn nun für einen Typ verlangt
und diesen dann bereitstellen.

Ansonsten gibt es eine einfache Regel:
immer nur Definitionen von der selben Art verwenden
Delphi-Quellcode:
// alles Ansi
TDevModeA_new ChangeDisplaySettingsExA PAnsiChar

// alles Unicode
TDevModeW_new ChangeDisplaySettingsExW PWideChar

// so wie es der Compiler nativ bzw. per Standard unterstützt
// bis Delphi 2007 Ansi und danach Unicode
TDevMode_new ChangeDisplaySettingsEx PChar


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz