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 :

Utilisation de FMX.Forms.TFmxFormState


Sujet :

Composants FMX Delphi

  1. #1
    Invité
    Invité(e)
    Par défaut Utilisation de FMX.Forms.TFmxFormState
    Bonjour,

    Quelqu'un sait-il comment on utilise fsCreating dans FormState ? Et éventuellement Recreating, Modal, Released, InDesigner, WasNotShown, Showing, UpdateBorder, Activation, Closing, Engaged. Soit j'oublie une unit dans les uses, soit ma syntaxe est erronée, soit les 2 . J'ai commencé par un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (fsCreating in Form1.FormState)

    Réponse
    [dcc32 Erreur] CustomTreeFrm.pas(186): E2003 Identificateur non déclaré : 'fsCreating'
    Merci.
    Dernière modification par tourlourou ; 11/10/2014 à 10h30.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 593
    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 593
    Billets dans le blog
    65
    Par défaut
    Bonjour Gilles ,

    depuis XE et FMX la plupart de ces valeurs d'états que ce soit pour les formes , les grilles , les datasets , doivent être indiqués avec leur nom [Edit] d'unité de classe ( énervant non ?)

    essayes FMXFormState.fscreating (sans garantie)

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

    Citation Envoyé par SergioMaster Voir le message
    essayes FMXFormState.fscreating (sans garantie)
    FMXFormState. -> Je ne vois pas de fsCreating.

    Par contre en effet quelque chose de ce genre semble fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (TFmxFormState.fsModal in Form1.FormState) then Form1.Close;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (TFmxFormState.WasNotShown in Form2.FormState) then ...
    A la rigueur ce n'est pas vraiment problématique. Il y a une approche assez similaire sur les constantes en Qt.

    Entre temps, j'ai changé d'approche. Je cherchais à fermer la (parmi 20) Form modale ouverte à partir d'un Timer de la Form principale.
    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
    procedure TCustomTreeViewFrm.Timer1Timer(Sender: TObject);
    var
      hh, mn, ss : integer;
      Form: TCommonCustomForm;
    begin
      if nTps > 0  then begin
        dec(nTps);
        laTPS.Text := FormatDateTime('hh:nn:ss', ntps / SecsPerDay);
      end else begin
        Timer1.Enabled := False;
        TreeView1.Enabled := False;
        Form := Screen.ActiveForm;
        if  not (TForm(Form).Name = Self.Name) then TForm(Form).Close;
      //if (TFmxFormState.fsModal in Form1.FormState) then Form1.Close;
      //if (TFmxFormState.fsModal in Form2.FormState) then showmessage('2');
      //if (TFmxFormState.WasNotShown in Form2.FormState) then showmessage('2');
        Showmessage('L''épreuve est terminée. A Bientôt.');
      end;
    end;
    Et là, j'ai un problème déjà rencontré sous Lazarus je crois.

    Dans le code juste au-dessus, le showmessage est traité avant la fermeture réelle de la Form modale active (ici Form 2) donc non séquentiellement. On y remédie comment ? (on peut avec un autre timer qui contrôle la valeur d'un flag ).

    Au fait, avec les styles, j'ai découvert qu'on pouvait réaliser le fameux delegate de Qt. Je crois que c'est ce que voulait m'indiquer Paul, mais à ce moment-là, j'étais concentré sur un point particulier des styles et donc non réceptif : désolé. Mais j'ai l'habitude de relire les messages... plus tard. J'en suis à quelques objets. Je ne sais pas si c'est généralisable et encore une fois, si c'est dans le respect de l'orthodoxie. Ce dernier point est important parce que si tel n'est pas le cas, et s'il s'agit d'une utilisation "border-line", une simple correction (évolution) du code de Delphi peut, dans une prochaine release, rendre caduque mon approche. Mais en attendant, c'est "génial".... un peu lourd mais les delegates aussi. Mais, il y a toujours un mais-, je suis encore une fois "contrarié" (i. e. frustré). Fort de ceci, on pourrait réaliser "facilement" des StringGrid ou TreeView gérant le HTML s'il existait un simple TEditHTML, voire un TLabelHTML... et évidemment, ce n'est pas un composant de base ! Les Pascaliens sont fâchés avec le HTML ?
    Merci.
    Dernière modification par Invité ; 11/10/2014 à 11h34.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Ne faudrait-il pas envoyer un message de fermeture bloquant à la fenêtre concernée (je ne sais plus si c'est un SendMessage ou un PostMessage sous Windows, ni s'il existe un équivalent FMX multi-plateformes) ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour Yves,

    Ah les Send/Post Messages ... Depuis Lazarus, je les fuis comme la peste : je me rappelle d'énormes problèmes de portabilité... et je crois que je n'ai pas tout compris

    Mais je me demande comment le showmessage fonctionne. A mon avis, le Form.close est traité avant le showmessage. Mais le temps qu'il soit exécuté, le showmessage bloque la pile des traitements et bloque la fermeture de la Form modale. Et donc, c'est l'action sur son bouton du showmessage qui déverrouille la pile et permet la suite de l'exécution de la procédure de fermeture.
    Je suppose que showmessage fonctionne comme les autres Dialogs.Messages: http://docwiki.embarcadero.com/Libra...#Code_Examples

    Pour les messages, je regarde si c'est fonctionnel en FMX... et surtout comment
    Dernière modification par Invité ; 11/10/2014 à 11h46.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Avec un Timer supplémentaire, cela fonctionne
    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
    var
       bMessage : Boolean;
     
    implementation
     
    procedure TCustomTreeViewFrm.Timer1Timer(Sender: TObject);
    var
      hh, mn, ss : integer;
      Form: TCommonCustomForm;
    begin
      if nTps > 0  then begin
        dec(nTps);
        laTPS.Text := FormatDateTime('hh:nn:ss', ntps / SecsPerDay);
      end else begin
        Timer1.Enabled := False;
        TreeView1.Enabled := False;
        Form := Screen.ActiveForm;
        if  not (TForm(Form).Name = Self.Name) then begin
          //Normalemen impossible (à vérifier)
          with timer2 do
            if Enabled then Enabled := true;
          //
          bMessage := False;
          TForm(Form).Close;
          bMessage := True;
          timer2.Enabled := true;
        end;
      end;
    end;
     
    procedure TCustomTreeViewFrm.Timer2Timer(Sender: TObject);
    begin
      if bMessage then begin
        bMessage := false;
        timer2.Enabled := false;
        Showmessage('L''épreuve est terminée. A Bientôt.');
      end;
    end;
    Je note les sendmessage à voir.
    Merci pour l'aide apportée.

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Bonjour Gilles,

    Je comprends les objections !

    On peut essayer alors de contourner le problème à l'aide d'un message envoyé par la fiche se fermant (au besoin selon une condition passée en paramètre à sa méthode Close surchargée) [EDIT] pour déclencher le ShowMessage, à l'instar de la solution postée ci-avant avec un Timer. [/EDIT]
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  8. #8
    Invité
    Invité(e)
    Par défaut
    Rebonjour Yves,

    je vais essayer de comprendre comment cela fonctionne. Merci.

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

Discussions similaires

  1. [JAVA] l'utilisation de deux forms
    Par DavidPAY dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 04/06/2008, 02h31
  2. NCURSES/UTILISATION DE PLUSIEUR FORMS DANS PLUSIEUR PANEL
    Par VITALTH dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 25/03/2008, 17h39
  3. utilisation d'un form dans un autre form
    Par luron dans le forum C#
    Réponses: 1
    Dernier message: 29/02/2008, 09h20
  4. Variable global utilisable dans plusieurs Forms
    Par nams2590 dans le forum Visual C++
    Réponses: 13
    Dernier message: 11/12/2007, 11h34
  5. Lancement d'une form *.fmx [FORMS 10g]
    Par oramine dans le forum Forms
    Réponses: 8
    Dernier message: 03/10/2005, 12h10

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