IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Gestion des évènements Android / IOS


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services de proximité

    Informations forums :
    Inscription : Décembre 2021
    Messages : 164
    Par défaut Gestion des évènements Android / IOS
    Bonjour,

    Je ne sais pas si quelqu'un pourra répondre à ma question, néanmoins je la trouve intéressante à poser.

    Je suis en train de développer une application mobile avec Delphi 11, sauf que, qui dit mobile, dit tablette, et donc 50 tailles d'écrans possible!

    J'ai donc créer une petite fonction sur le FormResize toute simple pour adapter mes marges en fonction de l'écran :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    procedure TMain_Login.FormResize(Sender: TObject);
    begin
        if Main_Login.Width > 338 then
        Begin
          ELogin.Margins.Right := Main_Login.Width - 328;
          EPassword.Margins.Right := Main_Login.Width - 328;
        End
        Else
        Begin
          ELogin.Margins.Right := 10;
          EPassword.Margins.Right := 10;
        End;
     
          ELogin.Margins.Top := (LyMidRight.Height -(ELogin.Height
                                                    +ELogin.Margins.Bottom
                                                    +EPassword.Margins.Top) ) /2;  //(Hauteur du conteneur - (taille de mes éléments) ) /2
          LLogin.Margins.Top := (LyMidLeft.Height -(LLogin.Height
                                                    +LLogin.Margins.Bottom
                                                    +LMotDePasse.Margins.Top) ) /2;
    end;
    Pour ce qui est de la marge à droite, ça fonctionne bien mes TEdit ne font pas tout l'écran, par contre pour la marge .Top, ça fonctionne uniquement sous android.

    Sur Iphone on dirait que la marge est calculée par la taille de la fenêtre avant le FormResize, je m'explique, quand je bascule l'Iphone en mode paysage, donc avec une petite hauteur, je me retrouve avec une grande marge, et inversement en mode portrait.

    Je suis sur qu'il doit y avoir une façon plus simple d'avoir une application qui s'adapte à un écran, mais pour le coup je ne vois pas de raison à ce que le code ne fonctionne pas sur les deux plateformes de la même manière

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 658
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    pour ce qui est de IOS et de la différence de comportement je ne pourrais répondre.
    Par contre AMHA c'est inutilement compliqué, on pourrait :
    Utiliser un TLayout (align = client) avec une indication de Paddings (contenant les controles)
    et/ou utiliser au besoin les anchors des controles

    Sans image écran difficile de se faire une idée

  3. #3
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    Bonjour

    Sur iPhone tous les écrans doivent avoir plus de 328 pixels de large dans tous les sens, donc ça passe systématiquement dans ton premier cas. du coup, tel que je comprends ton code, les Edit font 328 pixels de large en permanence.

    Ce qui m'intrigue, c'est ton besoin de faire des calculs pour adapter ton écran.

    L'avantage de FireMonkey c'est qu'il y a assez d'alignements et de possibilités d'entassement des composants pour justement ne jamais avoir ça à faire. (ou en tout cas très rarement)

    A quoi veux-tu que ton écran ressemble ? Un Login / Password dans un pavé centré ?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services de proximité

    Informations forums :
    Inscription : Décembre 2021
    Messages : 164
    Par défaut
    Nom : Capture d’écran 2022-03-28 114438.png
Affichages : 158
Taille : 40,0 Ko

    Effectivement, ce sera sans doute plus clair comme ça

    Donc en haut nous avons un logo(caché ), en bas j'ai un deuxième layout, qui me sert de pied de page.

    Au milieu, j'ai un layout divisé en 3, une partie pour les textes, une autre pour les Edits et un pour le bouton.

    Pour la règle sur la largeur, dès que mon écran passe une certaine largeur, j'augmente la marge coté droit pour que mon Edit ne dépasse pas une certaine taille malgré son alignement (Top).

    A quoi veux-tu que ton écran ressemble ? Un Login / Password dans un pavé centré ?
    Exactement! Sauf que je voulais le faire en runtime parce que je ne me suis pas encore penché sur les possibilités que nous offres Delphi à ce niveau (c'est d'ailleurs ce que je vais faire du coup).

    C'était juste pour soulever le fait que la même fonction ne s'exécute visiblement pas au même moment sous Android ou IOS, enfin en apparence..

  5. #5
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    Ok, donc dans ton cas je verrais plus :

    un TLayout avec une taille fixe, centré dans l'écran
    - un TGridPanelLayout de deux lignes, deux colonnes, aligné en Top, pour les libellés et champs de saisie
    - un TLayout aligné en Top pour le bouton
    - un TLayout aligné en Top pour le texte du bas

    Aucune raison de jouer avec les marges si tu veux un truc à taille fixe (en revanche, sur le onResize de la fiche, assure toi quand même que les trucs à taille fixe ne débordent pas de l'écran pour les réduire), profite qu'on puisse empiler les choses les unes dans les autres en FMX, ce qui est impossible ou plus compliqué en VCL.

    Je te suggère de te mettre à jour sur les différentes solutions proposées avec FireMonkey pour gérer des interfaces sans penser aux positions et tailles des éléments.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services de proximité

    Informations forums :
    Inscription : Décembre 2021
    Messages : 164
    Par défaut
    Oui je vois l'idée, pourquoi s'embêter a créer des évènements alors qu'il y a des tas d'outils a disposition pour alléger le code...

    C'est sans doute que je suis un peu vieux jeu j'aime gérer certaines choses en runtime (il faut dire que je suis passé de Delphi 6 à 11 sans transition ).

    J'ai bien étudier le lien et je suis fan des TGridPanelLayout maintenant .

  7. #7
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    Tu sais, aimer coder, c'est pas forcément une question d'âge... (#hum)

    Exemple extrait du jeu Memory codé ce week-end :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    procedure TfrmChallenge.FinDePartie;
    var
      ZoneAffichageScoreFinal, ZoneHaut, ZoneBas: tlayout;
      VotreScore: TMotsEnImages;
      ValeurScore: TNombreEnImages;
      BoutonPartage: TBoutonPartage;
    begin
      if assigned(BlocageEcranFinDePartie) then
        FreeAndNil(BlocageEcranFinDePartie);
     
      BlocageEcranFinDePartie := tlayout.Create(self);
      BlocageEcranFinDePartie.Parent := zoneDeJeu;
      BlocageEcranFinDePartie.Align := talignlayout.contents;
      BlocageEcranFinDePartie.HitTest := true;
     
      if TPlatformServices.Current.SupportsPlatformService
        (IFMXShareSheetActionsService) then
      begin
        BoutonPartage := TBoutonPartage.Create(BlocageEcranFinDePartie);
        BoutonPartage.Parent := self;
        BoutonPartage.Align := talignlayout.Center;
        BoutonPartage.OnClick := BoutonPartageClick;
      end;
     
      ZoneAffichageScoreFinal := tlayout.Create(BlocageEcranFinDePartie);
      ZoneAffichageScoreFinal.Parent := self;
      ZoneAffichageScoreFinal.HitTest := false;
      ZoneAffichageScoreFinal.Height := 180;
      ZoneAffichageScoreFinal.Align := talignlayout.top;
      if (position.Y > 50) then
        ZoneAffichageScoreFinal.Margins.top := 50 - position.Y
      else
        ZoneAffichageScoreFinal.Margins.top := 5 - position.Y;
     
      ZoneHaut := tlayout.Create(BlocageEcranFinDePartie);
      ZoneHaut.Parent := ZoneAffichageScoreFinal;
      ZoneHaut.HitTest := false;
      ZoneHaut.Height := 80;
      ZoneHaut.Align := talignlayout.top;
     
      VotreScore := TMotsEnImages.Create(BlocageEcranFinDePartie);
      VotreScore.name := '';
      VotreScore.Parent := ZoneHaut;
      VotreScore.HitTest := false;
      VotreScore.Height := 80;
      VotreScore.Align := talignlayout.Center;
      VotreScore.Value := 'Score final:';
      if VotreScore.Width > ZoneAffichageScoreFinal.Width then
        ZoneAffichageScoreFinal.Width := VotreScore.Width;
     
      ZoneBas := tlayout.Create(BlocageEcranFinDePartie);
      ZoneBas.Parent := ZoneAffichageScoreFinal;
      ZoneBas.HitTest := false;
      ZoneBas.Height := 80;
      ZoneBas.Align := talignlayout.bottom;
     
      ValeurScore := TNombreEnImages.Create(BlocageEcranFinDePartie);
      ValeurScore.name := '';
      ValeurScore.Parent := ZoneBas;
      VotreScore.HitTest := false;
      ValeurScore.Height := 80;
      ValeurScore.Align := talignlayout.Center;
      ValeurScore.Value := score;
      if ValeurScore.Width > ZoneAffichageScoreFinal.Width then
        ZoneAffichageScoreFinal.Width := ValeurScore.Width;
     
      ZoneScore.Visible := false;
    end;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/08/2015, 11h44
  2. Gestion des évènements Netscape 7.0
    Par RATHQUEBER dans le forum Autres langages pour le Web
    Réponses: 6
    Dernier message: 19/12/2005, 16h26
  3. Problème avec la gestion des événements
    Par CynO dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 10h07
  4. [JTable] gestion des événements
    Par soulhouf dans le forum Composants
    Réponses: 4
    Dernier message: 19/08/2005, 13h21
  5. Gestion des évènements lors d'un clique sur une image.
    Par yoghisan dans le forum Débuter
    Réponses: 7
    Dernier message: 23/06/2005, 19h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo