Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Display drehen - Sensor oder API? (https://www.delphipraxis.net/187272-display-drehen-sensor-oder-api.html)

mm1256 13. Nov 2015 11:08

Display drehen - Sensor oder API?
 
Hallo,

ich habe ein kleine App die u.A. auch auf Tablets läuft. Wenn der Bildschirm (das Tablet) gedreht wird, möchte ich das mit bekommen, um die Anzeige (mehrere Panels auf einer Form) neu auszurichten. Erster Gedanke war "OrientationSensor" auf die Form, und dann tut es. Tut aber nicht.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ...
  OrientationSensor.Active := true;
  ...
end;

procedure TForm1.OrientationSensorSensorChoosing(Sender: TObject;
  const Sensors: TSensorArray; var ChoseSensorIndex: Integer);
var
  i: integer;
begin // wird niemals aufgerufen
  for i := Low(Sensors) to High(Sensors)
  do ShowMessage(Sensors[i].Description + ' => ' + Sensors[i].Manufacturer);
end;

procedure TForm1.OrientationSensorStateChanged(Sender: TObject);
begin
  // wird niemals aufgerufen
end;
Also, was kann man da noch verkehrt machen? Darum habe ich gegoogelt, in der Hoffnung eine WinAPI-Message zu finden, die in dem Augenblick gefeuert wird, wenn das Display gedreht wird. Auch ohne Erfolg. Vermutlich waren es die falschen Suchbegriffe. Jetzt stehe ich irgendwie auf dem Schlauch, und darum frage ich mal nach einem Ansatzpunkt.

Sir Rufo 13. Nov 2015 11:15

AW: Display drehen - Sensor oder API?
 
Wenn das Display nicht quadratisch ist, dann müsste ja ein
Delphi-Quellcode:
TForm.OnResize
Event kommen :stupid:

Portrait => Breite ist kleiner als Höhe
Landscape => Höhe ist kleiner als Breite
Quadrat => Breite ist gleich Höhe

Daniel 13. Nov 2015 11:17

AW: Display drehen - Sensor oder API?
 
Da ein Tablet ja in aller Regel eine recht statische Angelegenheit ist, kannst Du dort z.B. auch auf ".FormResize()" reagieren, welches auf den mobilen Geräten nur ausgelöst werden kann, wenn das Gerät gedreht wird. Wenn Du dann die Größenverhältnisse abfragst, kannst Du herausfinden, ob es sich um Hoch- oder Querformat handelt.

Das Einzige, was Du so nicht mitbekommst, ob das Gerät vielleicht auf dem Kopf steht - sollte das für Dich wichtig sein.

//edit: Verflixt, immer diese sich vordrängelnden Schnell-Schreiber. :mrgreen:

mm1256 13. Nov 2015 11:31

AW: Display drehen - Sensor oder API?
 
ja ja...die Schnellschreiber :-D

Danke für den Tipp! Sorry, ich hätte das wohl angeben sollen: BorderStyle = bsNone. Da kommt kein TForm.OnResize beim Drehen. Ist das WAD oder Windows-Bug oder VCL-Bug? Oder bin ich heute etwas "buggy". Ich glaub, heute ist nicht so ganz mein Tag :coder2:

Sir Rufo 13. Nov 2015 12:18

AW: Display drehen - Sensor oder API?
 
Aha, ja da fehlte doch ein wenig Information ...

Ich versuche jetzt mal zu interpretieren:
  • VCL (wurde gesagt)
  • Kein Border (wurde auch gesagt)
  • Die Form ist nicht maximiert (?)
  • Die Form steht irgendwo auf dem Display (?)
Dann kann man eigentlich nur noch über die Screen.Width/Screen.Height Werte gehen, denn sonst ändert sich für die Form erst einmal nichts. Selbst die Position der Form müsste gleich bleiben(?).

Wenn man an gar keinen Event kommt, dann geht immer eine kurze Abfrage im Idle-Mode (und das funktioniert dann auch zuverlässig ohne grosses Gedöns) ;)

mm1256 13. Nov 2015 12:25

AW: Display drehen - Sensor oder API?
 
@SirRufo Screen.Width und Screen.Height hatte ich natürlich auch probiert, aber Beide ändern sich nicht, wenn das Tablet gedreht wird.

Die App ist ein uraltes Tool für den privaten Gebrauch (Textanzeige für mich und meine Musikerkollegen) und noch mit D7 erstellt. Ich fass es nicht. Habe soeben die App mit XE7 compiliert und da kommt
Code:
TForm.OnResize
auch bei
Code:
BorderStyle := bsNone
Jetzt werde ich wohl endgültig die alte VM mit D7 auflösen (müssen) :oops:

Danke nochmals für die Bemühungen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 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