Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   iOS Formfamily (https://www.delphipraxis.net/174539-formfamily.html)

Union 27. Apr 2013 20:53

Formfamily
 
Ich würde gerne abhängig von der Geräteausrichtung unterschiedliche Hauptformulare auf dem GLEICHEN Gerät verwenden. Leider scheint die Wunsch-Ausrichtung (z.b. soPortrait, soLandscape) im TFormfactor gar nicht verglichen zu werden und der Vergleich der Breite und Höhe mit der Geräteauflösung funktioniert nicht so richtig. Hat das schon mal jemand gelöst?

Darlo 27. Apr 2013 22:17

AW: Formfamily
 
Hi,

die Prüfung width > height klappt bei mir. Es gibtauch eine extra Funktion dafür. Suche sie am Montag mal raus.

Union 27. Apr 2013 22:29

AW: Formfamily
 
Das wäre schön. Ich wollte das ganz gerne durch das FMX Framework automatisch erledigen lassen. Das sollte ja ausgehend von TApplication.CreateMainForm auch funktionieren. In GetFormRegistryItem wird dann versucht, das am Besten passende Forumlar der selben FormFamily zu ermitteln. Devices werden hart gefiltert, das ist ok, so kann man verhindern dass ein IPad-Formular auf einem IPhone erzeugt wird. Dann aber wird ausschließlich ein Gewichtiungsfakor zum weiteren Ermitteln des "Best-Fit" herangezogen und in diesen fließt der Orientations-Set nicht mit ein.

Darlo 29. Apr 2013 09:33

AW: Formfamily
 
Hi,

anbei wie versprochen die Funktionen mit denen es bei mir klappt:

Delphi-Quellcode:
function isIpad: boolean;
begin
  result := TUIDevice.Wrap(TUIDevice.OCClass.currentDevice).userInterfaceIdiom = UIUserInterfaceIdiomPad;
end;

function isRetina: boolean;
begin
  result := TUIScreen.Wrap(TUIScreen.OCClass.mainScreen).scale >= 2.0;
end;

function isLandscape: boolean;
begin
  result := (TUIDevice.Wrap(TUIDevice.OCClass.currentDevice).orientation = UIDeviceOrientationLandscapeLeft)
    or (TUIDevice.Wrap(TUIDevice.OCClass.currentDevice).orientation = UIDeviceOrientationLandscapeRight);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  if isLandscape then form1.Label1.Text := 'Querformat' else form1.Label1.Text := 'Hochformat';
  if isRetina then form1.Label2.Text := 'Retina' else form1.Label2.Text := 'kein Retina';
  if isIpad then form1.Label3.Text := 'ipad' else form1.Label3.Text := 'iPhone';
end;
Wichtig, isRetina funktioniert nicht im Simulator, dafür aber glücklicherweise auf dem Device ;-)

P.S.:
Btw. uses [..], iOSapi.UIKit;

Union 29. Apr 2013 09:51

AW: Formfamily
 
Danke für die Funktion. Ich will aber feststellen in welcher Ausrichtung sich das Device VOR dem Erzeugen des ersten Formulars befindet - eben um davon abhängig das passende Forumular zu laden. Ich könnte jetzt nactürlich auch pragmatisch vorgehen und als Hauptformular ein Dummy laden, welches dann an das gewünschte Formular weiterleitet.

Im ScreenService sind die Orientierung und die Bildschirmabmessungen konstant, solange nicht mindestens ein Formular geladen wurde:
Delphi-Quellcode:
var
  ScreenService: IFMXScreenService;
  o : TScreenOrientation;
begin
  Application.Initialize;
  Application.CreateForm(TFormVertical, FormVertical);
  Application.CreateForm(TFormHorizontal, FormHorizontal);
  Application.RegisterFormFamily('Main', [TFormHorizontal, TFormVertical]);

  if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then
    O := ScreenService.GetScreenOrientation; // Funktioniert nicht

  Application.Run;
end.

Darlo 29. Apr 2013 10:41

AW: Formfamily
 
Ah, ok.

Habe jetzt leider auch keine Lösung gefunden.
Das einzigste was mir einfällt ist, entweder das MainForm leer zu lassen und den Content entsprechend später zuweisen oder
im Create des letzten Forms das entsprechende Form einblenden...


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