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

Composants FMX Delphi Discussion :

TMSFMXGrid et positionnement durant le OnCreate de la fiche


Sujet :

Composants FMX Delphi

  1. #1
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 041
    Points : 40 950
    Points
    40 950
    Billets dans le blog
    62
    Par défaut TMSFMXGrid et positionnement durant le OnCreate de la fiche
    Bonjour,

    Décidément , FMX + LiveBindings et moi cela doit faire plus de 3 .
    Voilà mon soucis :
    je veux créer une fiche avec une grille liée a une Table (ListePays) . Jusque là rien de plus simple .
    cependant à la création de ma fiche , je veux que ma table soit positionnée sur un enregistrement précis (pas le premier)
    et là c'est la catastrophe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ListePays.DisableControls;
      ListePays.Active:=True;
      ListePays.Locate('CODE_INT',VarArrayOf(['IT']),[]);
      ListePays.EnableControls;
      Showmessage(Inttostr(TMSFMXGrid1.ItemIndex));   // debug pour la position 
    end;
    la grille se remplie correctement mais l'enregistrement affiché comme sélectionné est le premier alors que l'item index indique bien le bon numéro et que des TEDit lié à la même source indiquent le bon enregistrement !

    Note : une StringGrid 'classique' est ok

    un bouton pour tester le même code , mais donc après création et affichage de la fiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ListePays.DisableControls;
      ListePays.Active:=True;
      ListePays.Locate('CODE_INT',VarArrayOf(['IT']),[]);
      ListePays.EnableControls; 
     Showmessage(Inttostr(TMSFMXGrid1.ItemIndex));
    end;
    produit le résultat souhaité

    j'ai testé sur l'event onShow , onActivate etc... même résultat , je dois rater quelque chose
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Serge,

    je ne me souviens plus bien de la liste des événements en FMX mais j'ai rencontré ce genre de problème en Lazarus sous Nux... En "Create": rien. Mais en "Show": OK. Pour le placement, il fallait que l'objet soit dessiné, la création n'étant pas suffisante... Je vois -après coup- que vous avez essayé dans le "Show"... Il faudrait peut-être reprendre toute la chronologie des événements un par un et jusqu'à ce que le code de composition/affichage de la Form "rende la main" et "atteigne" le focus, remplissage de la Grid inclus.... Et déplacer le code dans cette chronologie jusqu'à obtention du résultat. C'est comme cela que j'avais procédé pour différencier le comportement Windows/Linux avec Lazarus.

    Bon maintenant l'analogie n'est peut-être pas pertinente.
    Cordialement. Gilles
    Dernière modification par Invité ; 24/07/2014 à 12h15.

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 041
    Points : 40 950
    Points
    40 950
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    J'ai finalement posé la question à TMS que je doit féliciter pour sa réactivité , j'ai eu ma réponse en moins de 24h

    Effectivement Gilles , il fallait dérouler la chronologie des évènements (pas évident d'ailleurs) . Contrairement au stringgrid la TMSFMXGrid ne construit pas "tout" durant le onCreate de la forme , l'astuce est d'attendre l'évènement OnApplyStyleLookup de cette dernière pour faire le Locate() .

    Cependant comme ce dernier "travaille" fréquemment (du moins j'en ai l'impression) j'ai rajouter une variable privée à ma forme pour être sur de ne faire le positionnement qu'une fois pour le Create .
    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
    ..
    private 
      Debut : Boolean;
    ..
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Debut:=True;
      ListePays.Active:=True;
      ListePays.Locate('CODE_INT',VarArrayOf(['IT']),[]);
    end; 
     
    procedure TForm1.TMSFMXGrid1ApplyStyleLookup(Sender: TObject);
    begin
    ....
    if Debut Then  ListePays.Locate('CODE_INT',VarArrayOf([Key]),[]);
    Debut:=False;
    ...
    end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

Discussions similaires

  1. Déplacement ou positionnement d'une fenêtre
    Par agl dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/11/2003, 09h29
  2. positionnement curseur et code ansi
    Par coach dans le forum C
    Réponses: 7
    Dernier message: 03/11/2003, 23h32
  3. LinCVS - Comment positionner CVSROOT ?
    Par sequentaire dans le forum Réseau
    Réponses: 3
    Dernier message: 10/07/2003, 06h53
  4. RichEdit tjs positionner le curseur en bas du texte
    Par microseb dans le forum C++Builder
    Réponses: 2
    Dernier message: 16/05/2003, 17h48
  5. [TSynMemo] Positionnement par ligne et colonne
    Par Mercilius dans le forum Composants VCL
    Réponses: 9
    Dernier message: 16/04/2003, 16h22

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