Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Bildschirm drehen (https://www.delphipraxis.net/104257-bildschirm-drehen.html)

ddcool 30. Nov 2007 11:29


Bildschirm drehen
 
Hallo zusammen,

ich verzweifle langsam. Ich bin jetzt seit 2 Stunden im Internet und auch hier im Forum am suchen nach einer Möglichkeit meinen Bildschirm um 90,180,270° drehen zu lassen. Ich habe schon einige Quelltexte gefunden und auch ausprobiert, leider ohne Erfolg.
In vielen Quelltexten wird beschrieben, es über den Wert dmDisplayOrientation zu machen, jedoch gibt es diese nicht unter CodeGear RAD.
Hier einfach mal ein Quelltext den ich probiert habe (bin sogar so weit gegangen und habe die Windows.pas mit dem Wert dmDisplayOrientation ergänzt und compiliert, auch ohne Erfolg). Alle anderen Möglichkeiten den Bildschirm zu verändern (sprich Auflösung, Bildwiederholrate, Farbtiefe etc. funktionieren):

Delphi-Quellcode:
const
  DMDO_0 = 0;
  DMDO_90 = 1;
  DMDO_180 = 2;
  DMDO_270 = 4;
  DM_DISPLAYORIENTATION = $00000080;

procedure StartMonitor;
Var
  lDevMode : TDevMode;
begin
    ZeroMemory(@lDevMode, sizeof(lDevMode));
    lDevMode.dmSize := sizeof(lDevMode);
    EnumDisplaySettings(nil, 0, lDevMode);
    lDevMode.dmFields                 := DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYORIENTATION;
    lDevMode.dmDisplayOrientation     := DMDO_90;
    lDevMode.dmPelsWidth              := 600;      //Monitorweite
    lDevMode.dmPelsHeight             := 800;      //Monitorhöhe}

    case ChangeDisplaySettings(&lDevMode,CDS_UPDATEREGISTRY) of

      DISP_CHANGE_SUCCESSFUL: ShowMessage('DISP_CHANGE_SUCCESSFUL');
      DISP_CHANGE_BADFLAGS: ShowMessage('DISP_CHANGE_BADFLAGS');
      DISP_CHANGE_BADMODE: ShowMessage('DISP_CHANGE_BADMODE');
      DISP_CHANGE_BADPARAM: ShowMessage('DISP_CHANGE_BADPARAM');
      DISP_CHANGE_FAILED: ShowMessage('DISP_CHANGE_FAILED');
      DISP_CHANGE_NOTUPDATED: ShowMessage('DISP_CHANGE_NOTUPDATED');
      DISP_CHANGE_RESTART: ShowMessage('DISP_CHANGE_RESTART');
    end;
end;
Ich wäre euch sehr verbunden, wenn einer von Euch mir einen funktionierenden Quellcode hier posten könnte.

Vielen Dank

ddcool

SirThornberry 30. Nov 2007 11:38

Re: Bildschirm drehen
 
als erstes fällt mir auf das du gar nicht prüfst ob EnumDisplaySettings erfolgreich ist. Und zum anderen glaube ich das nicht jede Grafikkarte dies beherscht.

ddcool 30. Nov 2007 11:42

Re: Bildschirm drehen
 
Jo ersteres ist richtig. Ist ja aber auch nur einer von vielen Quelltexten die ich erfolglos probiert habe.
Zweiteres ist mir auch klar jedoch habe ich ein Gerät welches diese Funktion unterstützt. Andere Programme im Netz machen das auch einwandfrei, nur die sind ja leider nicht OpenSource. Ich möchte diese Funktion jedoch aus einem eingenen Programm aus starten, weil 1. Muss das ganze nachher auf 300 Rechner passieren und was mit einem Kostenpflichtigen Programm aus dem Internet nur mit viel Aufwand auf die 300 Geräte gebracht werden kann und 2. würden die Lizenzen für so ein Programm zu teuer werden => Selber proggen

SirThornberry 30. Nov 2007 11:45

Re: Bildschirm drehen
 
welche Fehlermeldung bekommst du beim setzen?
Bei ChangeDisplaySettings im MSDN finde ich nirgends DM_DISPLAYORIENTATION
Folglich würde ich behaupten das es über diese Funktion wohl nicht funktioniert.

Und bei EnumDisplaySettings solltest du ENUM_CURRENT_SETTINGS übergeben.

ddcool 30. Nov 2007 12:11

Re: Bildschirm drehen
 
Das ist es ja ich bekomme gar keine Fehlermeldung.
Alle deine Beispiele habe ich bereits ausprobiert, leider ohne erfolg.
Vielleicht hat ja jemand schon einen funktionierenden Quelltext auf seinem Rechner, den er mir zur Verfügung stellen kann.

SirThornberry 30. Nov 2007 15:05

Re: Bildschirm drehen
 
ich denke mit den obigen funktionen wird es nicht funktionieren denn diese beachten eben die orientation nicht (zumindest laut msdn)

ddcool 3. Dez 2007 09:31

Re: Bildschirm drehen
 
Tja ich habe leider in der MSDN auch nichts brauchbares gefunden. Immer nur für WinCE.
Vielleicht hat hier ja schon jemand mal so einen Code geschrieben oder in seinem Code-Archiv. Wäre echt klasse.

Danke ddcool

ddcool 3. Dez 2007 14:43

Re: Bildschirm drehen
 
Also ich habe jetzt mal das Samsung Tool "MagicRotate" ausprobiert. Funktioniert klasse. Es scheint Windows einfach vorzugaukeln, dass Monitor und Grafikkarte diese Auflösung unterstützen. Wie genau es dieses Tool macht weiss ich nicht, aber vll weiss ja jemand wie man Windows sowas vorgaukelt.

SirThornberry 3. Dez 2007 14:58

Re: Bildschirm drehen
 
Du könntest ja mal bei der Firma anfragen welche Api-Funktion verwendet wird.

ddcool 3. Dez 2007 15:11

Re: Bildschirm drehen
 
Schon gemacht. Antwort (auf deutsch übersetzt): Es tut uns leid aber wir sind nicht befugt Ihnen darüber auskunft zu geben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 Uhr.
Seite 1 von 2  1 2      

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