AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi ChangeResolution dreht Desktop???
Thema durchsuchen
Ansicht
Themen-Optionen

ChangeResolution dreht Desktop???

Ein Thema von mtin · begonnen am 28. Jun 2006 · letzter Beitrag vom 29. Jun 2006
Antwort Antwort
Benutzerbild von mtin
mtin

Registriert seit: 8. Jun 2005
34 Beiträge
 
#1

ChangeResolution dreht Desktop???

  Alt 28. Jun 2006, 20:06
das ist mal wirklich merkwürdig!

ich benutze diese ChangeResolution-Funktion hier:
Delphi-Quellcode:
function ChangeResolution(sizex, sizey, bpp: DWORD): Boolean;
var
 DeviceMode: TDeviceModeA;
 i: Integer;
begin
 i := 0;
 Result := False;
 while EnumDisplaySettings(nil, i, DeviceMode) do begin
   with DeviceMode do
     if (dmPelsWidth = sizex) and
        (dmPelsHeight = SizeY) and
        (dmBitsPerPel = bpp) then begin
       // erst testen, bevor wir umschalten!
       case ChangeDisplaySettings(DeviceMode, CDS_TEST) of
         // es wird klappen!
         DISP_CHANGE_SUCCESSFUL:
           Result := True;

         DISP_CHANGE_RESTART:
           Showmessage('Neustart erforderlich');

         DISP_CHANGE_BADFLAGS:
           Showmessage('Ungültige Bildschirmeinstellungen');

         DISP_CHANGE_FAILED:
           Showmessage('Auflösung konnte nicht geändert werden');

         DISP_CHANGE_BADMODE:
           Showmessage('Bildschirm unterstützt diese Auflösung nicht');

         // Nur Windows NT
         DISP_CHANGE_NOTUPDATED:
           Showmessage('Registry konnte nicht aktualisiert werden');

       else
         Result := True;
       end;

       if Result then
         //jetzt wird umgeschaltet
         ChangeDisplaySettings(DeviceMode, CDS_FULLSCREEN)
     end;
   Inc(i);
 end;
end;
Zuhause funktioniert die auch perfekt(Radeon9800), aber in der Schule an den Rechnern (ham irgendsoeinen integrierten Intel-Grafikspaß) ist der Bildschirm dann auf dem Kopf! und man muss ihn erst durch zweimaliges drücken einer bestimmte Tastenkombination (Bildschirm um 90° drehen) wieder richtig herum drehen...

Hat jemand ne Ahnung woran das liegt/wie ich das lösen könnte, dass die ChangeResolution funktion sowohl zuhause als auch auf den Schulrechnern läuft?
  Mit Zitat antworten Zitat
fLaSh11
(Gast)

n/a Beiträge
 
#2

Re: ChangeResolution dreht Desktop???

  Alt 28. Jun 2006, 20:11
1.Gedanke (ohne auf Code zu schauen): vllt habt ihr ja in der Schule eine Sperre, die es verbietet, Systemeinstellungen zu verändert (wäre ganz sinnvoll ). Die Proc ChageResolution versucht jetzt die Auflösung zu ändern, aber nicht über die normalen Systemeinstellungen und schwupps... kommt es zu einem Fehler, der alles "verdreht" (klischeehaft^^)
  Mit Zitat antworten Zitat
Benutzerbild von mtin
mtin

Registriert seit: 8. Jun 2005
34 Beiträge
 
#3

Re: ChangeResolution dreht Desktop???

  Alt 28. Jun 2006, 20:46
neee wir dürfen ja die auflösung verändern^^
bzw. wenn ich das in Windows mache klappts...nur die Funktion will nich....bzw mit ihr gehts ja auch nur eben mussich dann erst den bildschirm wieder richtich rum drehen...
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#4

Re: ChangeResolution dreht Desktop???

  Alt 28. Jun 2006, 21:14
In DeviceMode steht am Anfang nur Unsinn, da es eine lokale Variable ist. EnumDisplaySettings setzt nicht alle Felder in DeviceMode, sodass danach immer noch zum Teil Unsinn in DeviceMode steht (z.B. vielleicht in dmDisplayOrientation bei XP, was Du dann ja unverändert zurückgibst). Als erstes würde ich zu Beginn DeviceMode ausnullen ZeroMemory(@DeviceMode, sizeof(DeviceMode)); und dann noch die Größe eintragenDeviceMode.dmSize := sizeof(DeviceMode)); Letzteres empfiehlt zumindest das MSDN:
Zitat:
lpDevMode
[out] Pointer to a DEVMODE structure into which the function stores information about the specified graphics mode. Before calling EnumDisplaySettings, set the dmSize member to sizeof(DEVMODE), and set the dmDriverExtra member to indicate the size, in bytes, of the additional space available to receive private driver data.
GRuß, teebee
  Mit Zitat antworten Zitat
Benutzerbild von mtin
mtin

Registriert seit: 8. Jun 2005
34 Beiträge
 
#5

Re: ChangeResolution dreht Desktop???

  Alt 28. Jun 2006, 21:30
okay, danke soweit, werd das mal morgen in info testen!
aber mal nen anderer Ansatz, in der Funktion steht doch am Anfang
Delphi-Quellcode:
   with DeviceMode do
     if (dmPelsWidth = sizex) and
        (dmPelsHeight = SizeY) and
        (dmBitsPerPel = bpp) then begin
kann man da nich einfach noch (dmDisplayOrientation = xxx) anfügen? vielleicht hat noch jemand ne Ahnung welche Werte dmDisplayOrientation annehmen kann?
  Mit Zitat antworten Zitat
Benutzerbild von BenBE
BenBE

Registriert seit: 3. Apr 2005
Ort: Jahnsdorf
48 Beiträge
 
Delphi 5 Enterprise
 
#6

Re: ChangeResolution dreht Desktop???

  Alt 28. Jun 2006, 22:56
Soweit ich mich erinnere ist dmOrientation eine einfache Angabe in Grad des Winkels um den gedreht wird. In diesem Fall sollte also die Prüfung auf =0 vollkommen ausreichen.
Benny Baumann
Je komplexer das System, desto kleiner die Fehler; je kleiner die Fehler, desto häufiger ihr Auftreten!
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#7

Re: ChangeResolution dreht Desktop???

  Alt 29. Jun 2006, 07:11
Zitat von mtin:
kann man da nich einfach noch (dmDisplayOrientation = xxx) anfügen?
dmDisplayOrientation wird laut MSDN nicht von MSDN-Library durchsuchenEnumDisplaySettings gesetzt, d.h. da kann immernoch Müll drin stehen (wenn DeviceMode nicht ausgenullt wird), sodass der Vergleich evtl. nie erfüllt wird. Unter MSDN-Library durchsuchenDEVMODE findest Du die möglichen Werte.

Gruß, teebee
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: ChangeResolution dreht Desktop???

  Alt 29. Jun 2006, 08:53
Ausserdem musst du durch eine Bitmaske (dmFields) angeben welche Informationen in der DEVMODE Struktur gültig sind! So lange du also dieses Bit für die Orientation (DM_DISPLAYORIENTATION) nicht setzt, wird diese auch nicht beachtet.
  Mit Zitat antworten Zitat
Benutzerbild von mtin
mtin

Registriert seit: 8. Jun 2005
34 Beiträge
 
#9

Re: ChangeResolution dreht Desktop???

  Alt 29. Jun 2006, 09:59
mh, bin glaub ich zu dämlich dazu
also in dem TDevMode von Delphi 7 gibts gar kein dmDisplayOrientation

was jetzt
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#10

Re: ChangeResolution dreht Desktop???

  Alt 29. Jun 2006, 10:56
Hallo,
Zitat von mtin:
mh, bin glaub ich zu dämlich dazu
also in dem TDevMode von Delphi 7 gibts gar kein dmDisplayOrientation

was jetzt
wenn Du in DeviceMode.dmSize die richtige Größe angegeben und am Anfang alles mit Null gefüllt hast, dann sollte das eigentlich kein Problem sein.

Gruß
xaromz
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 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