![]() |
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:
Ich wäre euch sehr verbunden, wenn einer von Euch mir einen funktionierenden Quellcode hier posten könnte.
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; Vielen Dank ddcool |
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.
|
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 |
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. |
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. |
Re: Bildschirm drehen
ich denke mit den obigen funktionen wird es nicht funktionieren denn diese beachten eben die orientation nicht (zumindest laut msdn)
|
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 |
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.
|
Re: Bildschirm drehen
Du könntest ja mal bei der Firma anfragen welche Api-Funktion verwendet wird.
|
Re: Bildschirm drehen
Schon gemacht. Antwort (auf deutsch übersetzt): Es tut uns leid aber wir sind nicht befugt Ihnen darüber auskunft zu geben.
|
Re: Bildschirm drehen
Also ich habe jetzt selber noch was über MagicRotate in Erfahrung gebracht. Das Programm arbeitet mit Hooks und einem Treiber. Nur welche Hooks das sind kann ich nicht sagen. Den treiber kann man ja einfach installieren nur der Zugriff auf dessen Funktionen bzw auf die Hooks kenne ich leider nicht und weiss auch nicht wie ich die herausfinde.
|
Re: Bildschirm drehen
oh, wenn Treiber im Spiel sind siehts schlecht aus, zumal du die eventuell nicht verwenden darfst für deine Programme.
Ich könnte mir bezüglich des Treibers vorstellen das dieser eine Zwischenschicht zwischen dem Betriebssystem und dem richtigen Grafiktreiber ist. |
Re: Bildschirm drehen
Und warum verlinkst du nicht dein
![]() |
Re: Bildschirm drehen
Zitat:
|
Re: Bildschirm drehen
Zitat:
Oh, ja sorry existiert bereits ein Forumeintrag im anderen Forum. ![]() Jedoch kann ich hier meinen Post nicht mehr ändern und außerdem stehen im Delphi-Forum bis jetzt eh keine nennenswerten Informationen. Post wird dort sowie auch hier eh bald geschlossen, da es leider keinen gibt, der sich mit der Materie auskennt. |
Re: Bildschirm drehen
ich denke es hat weniger mit auskennen als viel mehr damit zu tun das Delphi und Treiberprogrammierung nicht zusammen passt. Du musst auch keine Angst haben das dieses Thema geschlossen wird aufgrund von keiner Antwort. Der Beitrag bleibt weiterhin bestehen so das auch in einigen Monaten noch die Lösung gepostet werden kann. :)
|
Re: Bildschirm drehen
Jopp, okay denn halt so. :-D Es ist halt nur so ich habe mich jetzt echt übertrieben viel mit der MSDN und sämtlichen Foren beschäftigt um eine Lösung zu finden. Leider ohne Erfolg. Ich bin nur immer wieder auf die Option dmDisplayOrientation gestoßen, die es ab XP geben soll. Jedoch bietet mir mein Delphi 2007 SP3 diese Funktion nicht an, es gibt nur die Druckervariante dmOrientation.
Vielleicht gibt es hier ja auch einige klevere Debugger, die sich mal das MagicRotate vornehmen und gucken, wie und mit welchen befehlen der Treiber davon angesprochen wird, weil die eigentliche Anwendung kommuniziert ja mir dem Treiber. Den Treiber zu installieren und nen paar Dlls zu registrieren habe ich schon hinbekommen, jedoch das ausleden der relevanten Funktionen bekomme ich nicht hin. |
Re: Bildschirm drehen
Zitat:
Code:
Sowie ich
void __fastcall TForm1::Button1Click(TObject *Sender)
{ DEVMODEA DM; DISPLAY_DEVICEA DD; ZeroMemory(&DD, sizeof(DD)); DD.cb = sizeof(DD); if (0 != EnumDisplayDevices(0, 0, &DD, 0)) { Caption = DD.DeviceName; ZeroMemory(&DM, sizeof(DM)); DM.dmSize = sizeof(DM); if (0 != EnumDisplaySettings(DD.DeviceName, ENUM_CURRENT_SETTINGS, &DM)) { DM.dmFields = DM_PELSWIDTH + DM_PELSHEIGHT + DM_DISPLAYORIENTATION;//? DM.dmDisplayOrientation = DMDO_180;//DMDO_DEFAULT; DM.dmPelsWidth= 1024; DM.dmPelsHeight= 768; switch(ChangeDisplaySettings(&DM,CDS_UPDATEREGISTRY)) { case DISP_CHANGE_SUCCESSFUL: MessageBox(NULL, "DISP_CHANGE_SUCCESSFUL", "Hinweis", MB_OK); break; case DISP_CHANGE_BADFLAGS: MessageBox(NULL, "DISP_CHANGE_BADFLAGS", "Hinweis", MB_OK); break; case DISP_CHANGE_BADMODE: MessageBox(NULL, "DISP_CHANGE_BADMODE", "Hinweis", MB_OK); break; case DISP_CHANGE_BADPARAM: MessageBox(NULL, "DISP_CHANGE_BADPARAM", "Hinweis", MB_OK); break; case DISP_CHANGE_FAILED: MessageBox(NULL, "DISP_CHANGE_FAILED", "Hinweis", MB_OK); break; case DISP_CHANGE_NOTUPDATED: MessageBox(NULL, "DISP_CHANGE_NOTUPDATED", "Hinweis", MB_OK); break; case DISP_CHANGE_RESTART: MessageBox(NULL, "DISP_CHANGE_RESTART", "Hinweis", MB_OK); break; } } } }
Code:
auf DMDO_180 (= 2) setze kommt die Meldung DISP_CHANGE_BADMODE, bei DMDO_DEFAULT (= 0) DISP_CHANGE_SUCCESSFUL.
DM.dmDisplayOrientation
Mein Treiber unterstützt eigentlich das Drehen des Bildschirms. |
Re: Bildschirm drehen
Zitat:
Und kann dein Treiber wirklich den Schirm um 180° drehen? Also einmal auf den Kopf stellen? Meiner kann nur 90° und 270° |
Re: Bildschirm drehen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:48 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-2025 by Thomas Breitkreuz