AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Display drehen - Sensor oder API?

Ein Thema von mm1256 · begonnen am 13. Nov 2015 · letzter Beitrag vom 13. Nov 2015
Antwort Antwort
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Display drehen - Sensor oder API?

  Alt 13. Nov 2015, 12:08
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.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Display drehen - Sensor oder API?

  Alt 13. Nov 2015, 12:15
Wenn das Display nicht quadratisch ist, dann müsste ja ein TForm.OnResize Event kommen

Portrait => Breite ist kleiner als Höhe
Landscape => Höhe ist kleiner als Breite
Quadrat => Breite ist gleich Höhe
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Display drehen - Sensor oder API?

  Alt 13. Nov 2015, 12:17
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: Display drehen - Sensor oder API?

  Alt 13. Nov 2015, 12:31
ja ja...die Schnellschreiber

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
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Display drehen - Sensor oder API?

  Alt 13. Nov 2015, 13:18
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)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: Display drehen - Sensor oder API?

  Alt 13. Nov 2015, 13:25
@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)

Danke nochmals für die Bemühungen!
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  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 08:14 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