![]() |
Desktop auf den Kopf stellen?
Hallo Leute,
wie kann ich den Desktop- Screen um 90°, 180°, 360° drehen? Es gibt z.B. ein Scherzprogramm das dieses kann, aber wie gesagt ein Scherzprogramm. Zu finden unter: ![]() Hintergrund ist folgender: In der Ausgabe der c't 4/2005 sind Beschreibungen zum Bau von Computermöbel abgebildet. Nun so ein Möbel haben wir gebaut. Es handelt sich um einen Tisch in dessen Mitte ein TFT Bildschirm eingebaut ist der durch eine Glasplatte, von oben, geschützt wird. In der Schublade befindet sich das System (Motherboard, Netzteil usw...). Wenn ich nun davor sitze, sehe ich ohne Probleme auf den Monitor nur mein Gegenüber sieht alles auf dem Kopf. Wenn man jetzt 4 Personen hinsetzt dann hat nur einer den optimalen Blick. Meine Idee ist nun eine kleine App. zu schreiben die im Tray läuft und z.B. durch re.Klick die Ansicht um z.B. 90° dreht. Dass das geht, sieht man am Scherzprogramm. Leider habe ich dazu bisher nichts brauchbares gefunden. Hat jemand einen Tip oder ähnliches? Grüsse Alexander Lang |
Re: Desktop auf den Kopf stellen?
hi alex, ticker ihn doch einfach mal per mail an ;)
mfg phlux :hi: |
Re: Desktop auf den Kopf stellen?
Also die Prozedur zum Drehen um 360° kann ich dir schon mal geben:
Delphi-Quellcode:
Für 90 und 180 werden dir bestimmt noch ganz viele andere mit Rat und Tat zur Seite stehen!
procedure Turn360;
begin end; |
Re: Desktop auf den Kopf stellen?
Was sollte das denn jetzt? :roll:
|
Re: Desktop auf den Kopf stellen?
Nvidia Gforce Grafikarten können das. Nennt sich Rotations-Steuereung.
|
Re: Desktop auf den Kopf stellen?
@Elite
*Schenkelklopf* :mrgreen: [OT] Aber deine Procedure verschwindet beim Compilieren. Habe sie mal etwas erweitert ...
Delphi-Quellcode:
[/OT]
procedure Turn360;
begin // Dummy, damit die Proc nicht beim compilieren verschwindet end; Aber jetzt auch was Konstruktives ... :-D In Delphi habe ich das damals auch mal probiert und ewig nach Tips gesucht .... vergebens... Ich benutze NVRotate (etwas wacklige Beta) für NVidia Chipsätze ... Von ATI gibt es etwas Equivalentes.. da fällt mit nur grade der Name nicht ein ... Wenn du es doch via Delphi chipsatz-unabhängig schaffen solltest würde ich dein Programm gern testen ... :stupid: Schöne Grüße, Jens :hi: EDIT: Das Scherzprogramm macht nen Screenshot und stellt das Bild als Vollbild dar. Ein Klick auf das Bild dreht dieses um 90°,180° oder 270°. Du hast also keine gedrehte, arbeitsfähige "Liveansicht" deines Screens ... sondern nur einen gedrehten Screenshot :warn: |
Re: Desktop auf den Kopf stellen?
Zitat:
Oder willst du auch noch die Prozeduren für 720° und 1080° programmiern? :stupid: MfG Binärbaum |
Re: Desktop auf den Kopf stellen?
Wir haben alle gelacht aber ich denke es ist angebracht wieder zum Thema zurückzukehren.
In diesem Sinne hoffe ich auf eure Vernunft und sage Danke. :) MFG Florian :hi: |
Re: Desktop auf den Kopf stellen?
Also bei mir funzt das Programm, das in dem Link oben angegeben ist nicht - passiert gar nix :gruebel:
Dust Signs |
Re: Desktop auf den Kopf stellen?
Vllt. fragst du mal den Autor der Software, wie er das angestellt hat...
Ich meine, wenn das mit Visual Basic geht, klappt das doch sicher auch mit Delphi, oder? [Edit] 444 Beiträge... muss ich doch glatt einen Ausgeben...[/Edit] |
Re: Desktop auf den Kopf stellen?
Ok, wie das in dem Programm gelöst wurde, ist mehr als simpel:
Das Programm erstellt einen Screenshot, legt ihn über den Desktop und dreht ihn je nach Bedarf... Also kein Beweis, dass es so ohne Weiteres geht... [Edit] Verdammt, das wurde ja schon gesagt....[/Edit] |
Re: Desktop auf den Kopf stellen?
Wenns um die Drehung um 180° geht, dürfte es kein Problem sein, das mit einem timergesteuerten screenshot zu lösen (bei 90 und 270° wirds aber Verzerrungen geben).
Allerdings ist das, was gedreht angezeigt wird, eben nur ein screenshot und keine gedrehte Bildschirmausgabe - um damit ein Programm bedienen zu können. Vermutlich läuft das ganze auf einen Bildschirmtreiber hinaus. Schraub vier Möbelrollen unter das Teil, dann kannst Du alles in freien Winkeln (z.B. achtstufig) drehen und es kostet viel weniger Nerven und Zeit :wink: |
Re: Desktop auf den Kopf stellen?
Bei LCD-Monitoren (oder waren es die Grafikkarten?) ist gerne eine Pivot-Software dabei, die das alles erledigt.
|
Re: Desktop auf den Kopf stellen?
Hallo Leute,
erstmal danke fü euere Antworten. Mir war schon klar das sich der eine oder der andere kaputtlacht. Übrigens die procedure:
Delphi-Quellcode:
ist vom Feinsten, darauf kann man bestimmt aufbauen :thumb:
procedure Turn360;
begin // Dummy, damit die Proc nicht beim compilieren verschwindet end; Dass das Scherzprogramm natürlich nur einen Scrennshot macht und den umdreht ist ja klar. Nun zum Thema: Zitat:
Das mit dem Drehen habe ich auch schon in Betracht gezogen. Aber das Problem ist, das der TFT sich unter einer Glasplatte befindet, die deutlich grösser als det TFT ist, und zusätzlich im Tisch versenkt ist. Bis jetzt habe ich folgendes herausgefunden. Siehe hier: ![]() Auf die schnelle durchgelesen (MSDN) kann man das über die Windows graphics device interface (GDI) realisieren.(?) Muss mir das nochmals richtig zu gemühte führen. Freue mich nach wie vor auf zahlreiche Antworten, Gedanken, Tipps. Gruß Alexander |
Re: Desktop auf den Kopf stellen?
Hi!
Eine idee wäre es, sich nen Mousehook zu basteln, dann könntest schonmal die Bewegung invertieren, wichtig dabei ist das du die Mausklicks wiederum invertieren musst :mrgreen: Dann könntest du einfach versuchen so oft wie möglich ein bitmap vom screen zu machen und das zu drehen. |
Re: Desktop auf den Kopf stellen?
Zitat:
|
Re: Desktop auf den Kopf stellen?
Alexander ist doch auch ein Neuling hier :-D
Und das mit den Möbelrollen drunterschrauben hat er wohl auch noch nicht so ganz zur Kenntniss genommen :zwinker: |
Re: Desktop auf den Kopf stellen?
Zitat:
MfG Binärbaum |
Re: Desktop auf den Kopf stellen?
Sorry Leute,
der link ist super sch***. Den Link aus dem Post von vorher habe ich ausgebessert :oops:. Hier nun nochmals: ![]() Gruß Alexander |
Re: Desktop auf den Kopf stellen?
Hi Alexander,
der Link passt wie die Faust aufs Auge: Für Windows Mobile 2003 SE :cyclops: Schraub endlich die Möbelrollen drunter! |
Re: Desktop auf den Kopf stellen?
Zitat:
![]() |
Re: Desktop auf den Kopf stellen?
Hallo 4toms,
Zitat:
Außerdem ist der Tisch nicht quadratförmig sondern 86 cm breit (tief) und 140 cm breit. Nach dem Motto alle mal aufstehen, der Monitor muss gedreht werden. Das kanns ja nicht sein. Ich bin mir sicher das so etwas geht. Gruß Alexander. |
Re: Desktop auf den Kopf stellen?
hallo alex,
nicos post bitte nicht übersehen, das ist die lösung ;) |
Re: Desktop auf den Kopf stellen?
Hallo NicoDE,
Zitat:
Zitat:
|
Re: Desktop auf den Kopf stellen?
Hallo phlux,
Zitat:
Alexabder |
Re: Desktop auf den Kopf stellen?
Hi!
Ich hab mich mal dank NicoDE's Hilfe an dem Code vergriffen, allerdings schmeißt der Compiler ne Fehlermessage aus, weil wohl die Var-Parameter nicht übereinstimmen, was wohl heißt das irgendwo was anders deklariert ist als es sein sollte (oder ich seh den Wald vor lauter bäumen nicht) Naja hier mal der Code, vllt findet anderer den Fehler, wie gesagt der Weg ist richtig, ist nur ein Fehler drin den ich nicht finde :(
Delphi-Quellcode:
Gedacht war jetzt, dass wenn man auf Button1 klickt sich das bild um 180Grad dreht und wenn man es dann schafft auf Button2 zu klicken das bild wieder normal wird. Aber wie gesagt der Compiler meckert.
//Konstanten übernommen aus dem PSDK, und Nicos mithilfe :)
const DMDO_0 = 0; DMDO_90 = 1; DMDO_180 = 2; DMDO_270 = 4; DM_DISPLAYORIENTATION = $00000080; //2 Buttons mit denen wir das Ganze mal spiegeln und wieder zurück setzen procedure TForm1.Button1Click(Sender: TObject); var aDevMode: TDevmode; begin aDevMode.dmSize := SizeOf(aDevMode); aDevMode.dmOrientation := DMDO_180; aDevMode.dmFields := DM_DISPLAYORIENTATION; ChangeDisplaySettingsEx(nil, @aDevMode, nil, 0, nil); end; procedure TForm1.Button2Click(Sender: TObject); var aDevMode: TDevmode; begin aDevMode.dmSize := SizeOf(aDevMode); aDevMode.dmOrientation := DMDO_0; aDevMode.dmFields := DM_DISPLAYORIENTATION; ChangeDisplaySettingsEx(nil, @aDevMode, nil, 0, nil); end; end. Ein bisschen laienhafte Erklärung gibts auch von mir: Mit ChangeDisplaySettingsEx können wir die Anzeigeeinstellungen ändern, die Funktion erwartet als einen Übergabeparameter einen Pointer auf eine devmode(TDevmode) Struktur, den rest können wir vergessen. In unserer Devmode Variable haben wir nur das nötigste ausgefüllt, mit dmOrientation geben wir an wie das Bild gedreht werden soll (die Konstanten stehen oben) bei dmFields geben wir an was jetzt genau an am Inhalt verändert wurde, in dem Fall halt die DisplayOrientation. Jetzt sollte man alles mit ChangeDisplaySettingsEx übergeben :kotz: und der Bildschirm sollte sich drehen, wie gesagt solte, ich find den Fehler nicht. mfg phlux :hi: |
Re: Desktop auf den Kopf stellen?
Wo meckert er denn ???
|
Re: Desktop auf den Kopf stellen?
So kompiliert es. Nur passieren tut nichts:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var aDevMode: TDevmode; begin SetLastError(0); Zeromemory(@aDevMode, sizeof(TDevmode)); aDevMode.dmSize := SizeOf(aDevMode); aDevMode. aDevMode.dmOrientation := DMDO_180; aDevMode.dmFields := DM_DISPLAYORIENTATION; ChangeDisplaySettingsEx(nil, aDevMode, Handle, 0, nil); ShowMessage(SysErrorMessage(GetLastError)); end; procedure TForm1.Button2Click(Sender: TObject); var aDevMode: TDevmode; begin SetLastError(0); Zeromemory(@aDevMode, sizeof(TDevmode)); aDevMode.dmSize := SizeOf(aDevMode); aDevMode.dmOrientation := DMDO_0; aDevMode.dmFields := DM_DISPLAYORIENTATION; ChangeDisplaySettingsEx(nil, aDevMode, Handle, 0, nil); ShowMessage(SysErrorMessage(GetLastError)); end; |
Re: Desktop auf den Kopf stellen?
Kann jetzt sein, dass ich ins Fettnäpfchen trete, aber wenn das so ist:
Code:
Und der erste Parameter nil ist:
LONG ChangeDisplaySettingsEx(
LPCTSTR lpszDeviceName, // name of display device LPDEVMODE lpDevMode, // graphics mode HWND hwnd, // not used; must be NULL DWORD dwflags, // graphics mode options LPVOID lParam // video parameters (or NULL) ); lpszDeviceName [in] Pointer to a null-terminated string that specifies the display device whose graphics mode will change. Only display device names as returned by EnumDisplayDevices are valid. See EnumDisplayDevices for further information on the names associated with these display devices.
Delphi-Quellcode:
Dann kann das doch gar nicht gehen ... oder ? :gruebel:
ChangeDisplaySettingsEx(nil, aDevMode, Handle, 0, nil);
|
Re: Desktop auf den Kopf stellen?
Da ist was wares darnn. Abert ich habe nur den Quellcode zum compilieren gebracht.
|
Re: Desktop auf den Kopf stellen?
hi,
Zitat:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var DisplayDevice: TDisplayDevice; begin DisplayDevice.cb := sizeof(DisplayDevice); EnumDisplayDevices(nil, 0, DisplayDevice, 0); [..] ChangeDisplaySettingsEx(DisplayDevice.DeviceString, aDevMode, Handle, 0, nil); //.DeviceName [..] end; Klappt aber nicht ;) [edit] kann ja auch nicht, bzw. tut es nicht das was wir wollen :) Zitat:
Zitat:
|
Re: Desktop auf den Kopf stellen?
Vielleicht aber auch nur vllt ist es nur für Handhelds vorbedacht :?:
|
Re: Desktop auf den Kopf stellen?
![]() Zitat:
EDIT: Der Fehler dürfte in der veralteten DevMode Struktur liegen, dmOrientation ist für Drucker, dmDisplayOrientation gibt es nur in der neuen Struktur, z.B. in der JEDI Win32 API JwaWinGDI.pas. |
Re: Desktop auf den Kopf stellen?
außerdem:
Zitat:
|
Re: Desktop auf den Kopf stellen?
Liste der Anhänge anzeigen (Anzahl: 1)
Habe mal ein wenig rumgespielt, anbei (Delphi 6), vielleicht hilft es jemandem...
Bei mir kommt als Antwort immer 'unsupported' (bietet der Gfx-Treiber nicht an)... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 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