Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Desktop auf den Kopf stellen? (https://www.delphipraxis.net/40361-desktop-auf-den-kopf-stellen.html)

axellang 14. Feb 2005 19:41


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: http://www.finklersoft.de/scherz.html

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

phlux 14. Feb 2005 19:45

Re: Desktop auf den Kopf stellen?
 
hi alex, ticker ihn doch einfach mal per mail an ;)

mfg phlux :hi:

Elite 14. Feb 2005 19:47

Re: Desktop auf den Kopf stellen?
 
Also die Prozedur zum Drehen um 360° kann ich dir schon mal geben:
Delphi-Quellcode:
procedure Turn360;
begin
end;
Für 90 und 180 werden dir bestimmt noch ganz viele andere mit Rat und Tat zur Seite stehen!

Ultimator 14. Feb 2005 19:49

Re: Desktop auf den Kopf stellen?
 
Was sollte das denn jetzt? :roll:

gmarts 14. Feb 2005 19:50

Re: Desktop auf den Kopf stellen?
 
Nvidia Gforce Grafikarten können das. Nennt sich Rotations-Steuereung.

jensw_2000 14. Feb 2005 20:33

Re: Desktop auf den Kopf stellen?
 
@Elite
*Schenkelklopf* :mrgreen:

[OT]
Aber deine Procedure verschwindet beim Compilieren. Habe sie mal etwas erweitert ...
Delphi-Quellcode:
procedure Turn360;
begin
// Dummy, damit die Proc nicht beim compilieren verschwindet
end;
[/OT]

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:

Binärbaum 14. Feb 2005 20:35

Re: Desktop auf den Kopf stellen?
 
Zitat:

Zitat von Elite
Also die Prozedur zum Drehen um 360° kann ich dir schon mal geben:
Delphi-Quellcode:
procedure Turn360;
begin
end;
Für 90 und 180 werden dir bestimmt noch ganz viele andere mit Rat und Tat zur Seite stehen!

Ist zwar nicht persönlich gemeint, aber von jemanden, dessen User-Name Elite ist, hätte ich doch was nützlicheres erwartet. :mrgreen:
Oder willst du auch noch die Prozeduren für 720° und 1080° programmiern? :stupid:

MfG
Binärbaum

flomei 14. Feb 2005 20:39

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:

Dust Signs 14. Feb 2005 20:49

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

Kernel32.DLL 14. Feb 2005 21:09

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]

Kernel32.DLL 14. Feb 2005 21:32

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]

4toms 14. Feb 2005 23:12

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:

Robert Marquardt 15. Feb 2005 09:59

Re: Desktop auf den Kopf stellen?
 
Bei LCD-Monitoren (oder waren es die Grafikkarten?) ist gerne eine Pivot-Software dabei, die das alles erledigt.

axellang 15. Feb 2005 10:57

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:
procedure Turn360;
begin
// Dummy, damit die Proc nicht beim compilieren verschwindet
end;
ist vom Feinsten, darauf kann man bestimmt aufbauen :thumb:

Dass das Scherzprogramm natürlich nur einen Scrennshot macht und den umdreht ist ja klar.

Nun zum Thema:

Zitat:

@4toms:
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
Es ist schon richtig 180° ist ausreichend alles ander währe Quatsch.
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: How to rotate the screen dynamically....

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

phlux 15. Feb 2005 12:22

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.

Kernel32.DLL 15. Feb 2005 13:18

Re: Desktop auf den Kopf stellen?
 
Zitat:

Zitat von axellang
Bis jetzt habe ich folgendes herausgefunden. Siehe hier: How to rotate the screen dynamically....
Gruß
Alexander

is' das richtig, dass der Link auf diesen thread verweist?

4toms 15. Feb 2005 13:30

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:

Binärbaum 15. Feb 2005 13:42

Re: Desktop auf den Kopf stellen?
 
Zitat:

Zitat von phlux
...
Dann könntest du einfach versuchen so oft wie möglich ein bitmap vom screen zu machen und das zu drehen.

Wenn man das "so oft wie möglich" macht, d.h. aller paar Millisekunden, dann leidet die Performance des Computers darunter. Man sollte es (wenn man es denn mit Screenshot realisieren möchte) nicht so oft wie möglich, sondern so oft wie nötig machen, d.h. nur dann, wenn auch wirklich etwas neu gezeichnet werden muss.

MfG
Binärbaum

axellang 15. Feb 2005 18:16

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: How to rotate the screen dynamiclly.


Gruß
Alexander

4toms 15. Feb 2005 18:30

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!

NicoDE 15. Feb 2005 18:33

Re: Desktop auf den Kopf stellen?
 
Zitat:

Zitat von 4toms
der Link passt wie die Faust aufs Auge: Für Windows Mobile 2003 SE :cyclops:

Siehe MSDN-Library durchsuchenDEVMODE

axellang 15. Feb 2005 18:37

Re: Desktop auf den Kopf stellen?
 
Hallo 4toms,

Zitat:

Zitat von 4toms
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:

Eigentlich schon. Aber was mache ich mit den Kabeln?
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.

phlux 15. Feb 2005 18:39

Re: Desktop auf den Kopf stellen?
 
hallo alex,
nicos post bitte nicht übersehen, das ist die lösung ;)

axellang 15. Feb 2005 18:41

Re: Desktop auf den Kopf stellen?
 
Hallo NicoDE,

Zitat:

Zitat von NicoDE
Zitat:

Zitat von 4toms
der Link passt wie die Faust aufs Auge: Für Windows Mobile 2003 SE :cyclops:

Siehe MSDN-Library durchsuchenDEVMODE

genau! Ausserdem:
Zitat:

GDI can be used in all Windows-based applications.
Alexander

axellang 15. Feb 2005 18:42

Re: Desktop auf den Kopf stellen?
 
Hallo phlux,

Zitat:

Zitat von phlux
hallo alex,
nicos post bitte nicht übersehen, das ist die lösung ;)

die Posts haben sich überschnitten.

Alexabder

phlux 15. Feb 2005 20:39

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:
//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.
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.
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:

jfheins 15. Feb 2005 20:41

Re: Desktop auf den Kopf stellen?
 
Wo meckert er denn ???

Luckie 15. Feb 2005 20:44

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;

jfheins 15. Feb 2005 20:49

Re: Desktop auf den Kopf stellen?
 
Kann jetzt sein, dass ich ins Fettnäpfchen trete, aber wenn das so ist:
Code:
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.
Und der erste Parameter nil ist:
Delphi-Quellcode:
ChangeDisplaySettingsEx(nil, aDevMode, Handle, 0, nil);
Dann kann das doch gar nicht gehen ... oder ? :gruebel:

Luckie 15. Feb 2005 20:50

Re: Desktop auf den Kopf stellen?
 
Da ist was wares darnn. Abert ich habe nur den Quellcode zum compilieren gebracht.

chris 15. Feb 2005 21:20

Re: Desktop auf den Kopf stellen?
 
hi,


Zitat:

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.
dann sollte es ja so klappen:

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:

dmOrientation
For printer devices only, selects the orientation of the paper. This member can be either DMORIENT_PORTRAIT (1) or DMORIENT_LANDSCAPE (2).
und:

Zitat:

dmDisplayOrientation
Windows XP: For display devices only, the orientation at which images should be presented. If DM_DISPLAYORIENTATION is not set, this member must be zero. If DM_DISPLAYORIENTATION is set, this member must be one of the following values Value Meaning
DMDO_DEFAULT The display orientation is the natural orientation of the display device; it should be used as the default.
DMDO_90 The display orientation is rotated 90 degrees (measured clockwise) from DMDO_DEFAULT.
DMDO_180 The display orientation is rotated 180 degrees (measured clockwise) from DMDO_DEFAULT.
DMDO_270 The display orientation is rotated 270 degrees (measured clockwise) from DMDO_DEFAULT.
[/edit]

phlux 15. Feb 2005 22:04

Re: Desktop auf den Kopf stellen?
 
Vielleicht aber auch nur vllt ist es nur für Handhelds vorbedacht :?:

scp 15. Feb 2005 22:24

Re: Desktop auf den Kopf stellen?
 
Hier ist die offizielle Anlaufstelle denke ich, da steht
Zitat:

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.
The lpszDeviceName parameter can be NULL. A NULL value specifies the default display device. The default device can be determined by calling EnumDisplayDevices and checking for the DISPLAY_DEVICE_PRIMARY_DEVICE flag.
Aber klappen tuts bei mir auch nicht.

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.

paresy 15. Feb 2005 23:03

Re: Desktop auf den Kopf stellen?
 
außerdem:

Zitat:

dmDisplayOrientation
Windows XP: For display devices only, the orientation at which images should be presented. If DM_DISPLAYORIENTATION is not set, this member must be zero. If DM_DISPLAYORIENTATION is set, this member must be one of the following values
WinXP only

NicoDE 16. Feb 2005 16:55

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