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 :

sendmessage dans un composant FMX


Sujet :

Composants FMX Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 400
    Par défaut sendmessage dans un composant FMX
    Bonjour,

    Encore moi.
    J'essaye de transformer mon composant vcl en composant fmx, mais ce n'est pas simple
    J'ai notamment un gros problème avec l'utilisation de sendmessage.
    J'utilise sendmessage pour indiquer que le focus doit passer au composant suivant dans la form (l'équivalent d'un tab mais par programmation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SendMessage(MYForm.Handle, WM_NEXTDLGCTL, 0, 0);
    Cette forme de sendmessage n'est pas acceptée sous environnement FMX.

    Quelqu'un pourrait-il me dire comment traduire cette instruction VCL en FMX ?

    Je trouvais cette solution par sendmessage assez élégante et simple mais peut-être une autre solution existe-t-elle ?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    bonne question...

    alors déjà on va partir du principe que tu n'utilises pas de composants natifs, car sinon ça foire mon résonnement

    donc tous les évènements dans FMX passent pas la fiche car tout le reste est dessiné par FMX (sauf les composants natifs...)

    du coup j'ai regardé dans FMX.Forms et j'ai trouvé ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        { change focus }
        if Key = vkTab then
        begin
          AdvanceTabFocus(not (ssShift in Shift));
          Key := 0;
          Exit;
        end;
    AdvanceTabFocus étant une méthode privée, pas possible de l'appeler directement...mais le code ci-dessus vient de TCommonCustomForm.KeyDown

    du coup je me dirais qu'il faut appeler la méthode KeyDown() de la fiche en lui passant vkTab

    reste à voir si ça ne va pas perturbe la fiche ou s'il faut appeler KeyUp() derrière...
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 400
    Par défaut
    Merci pour cette piste ... que je n'arrive pas à mettre en oeuvre dans un composant, car il n'y a pas de parent.

    J'ai bien essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (owner as tform).keydown(vktab,#0, not (ssShift in Shift));
    mais j'ai deux erreurs
    2033 Les types des paramètres VAR originaux et formels doivent être identiques
    2003 Identificateur non déclaré : Shift
    Je cherche ....

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    teste rapide avec deux boutons sur une fiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      KCode: Word;
      KLetter : Char;
    begin
      KCode := vkTab;
      KLetter := #9;
      Screen.ActiveForm.KeyDown(KCode, KLetter, []);
    end;
    quand on clique sur Bouton1, Bouton2 prend le focus

    pour retrouver la fiche, je passe par Screen.ActiveForm, mais peut-être que le Owner est plus indiqué, ça dépend du contexte - dans le code ci-dessus, j'aurais pu utiliser Self (ou rien, ce qui revient au même)
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 400
    Par défaut
    Bon j'ai réussi à compiler en faisant ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var
       MYForm: TcustomForm;
       levk: word;
       lekeychar : widechar;
    begin
       MYForm:=Owner as Tform;
       if not (MYForm = nil ) then
          begin
          levk:=vktab;
          lekeychar:=#0;
          (owner as tform).keydown(levk, lekeychar,[]);
          end; 
    end;
    Mais je ne sais pas encore si ça marche ...
    je vais tester sur une feuille de test

    EDIT :
    oups je n'avais pas vu ta réponse, tu vas trop vite ;o)

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 400
    Par défaut
    Bon, le système fonctionne, mais je ne l'ai testé que sur un dérivé de Tedit

    Je cherche à faire la même chose sur un composant Tdbedit, mais je ne les trouve pas sous environnement FMX ?

    Comment accède-t-on aux données sous fmx ?

    Je cherche mais je n'ai pas trouver l'équivalent, l'onglet contrôle de données ne semble pas exister sous fmx ... ?

    J'ai encore loupé un truc ...

  7. #7
    Rédacteur/Modérateur

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

    FMX n'est pas, mais pas du tout identique à VCL. Le secret de la liaison entre TEdit et une colonne de table c'est les Livebindings (j'ai écrit plusieurs tutoriels sur le sujet à retrouver ici)

    Les WMmessages c'est windows, ne pas oublier que FMX n'est pas spécifique windows.

    Pour ce qui est des composants pour FMX, oui, il est possible de faire un composant dual (VCL et FMX) comme j'ai pu le faire ici mais ce n'est pas une mince affaire. J'ai également commencé un autre tutoriel sur cette création de composant cette fois pur FMX un RadiogroupBox qui à mon avis manque pour les cibles workstation après beaucoup de galères dont j'ai émaillé le forum FMX si je suis arrivé (des litres de sueurs et beaucoup de délais plus tard) je n'ai pas encore eu le courage de rédiger mes différentes étapes. Il va falloir que je reprenne ça, trop de tests font perdre le fil.

    P.S. il y avait un set de composants graphiques proposés dans ce billet blog, j'y avais ajouté la partie livebindings

Discussions similaires

  1. Problème d'affichage dans un composant TScrollBox
    Par erossi dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/09/2005, 11h29
  2. Réponses: 4
    Dernier message: 27/07/2005, 11h51
  3. Les champs dans un composant ADOStorecProc
    Par ZIED dans le forum Bases de données
    Réponses: 3
    Dernier message: 22/06/2005, 11h32
  4. Ecrire du texte en couleurs dans un composant
    Par wutang dans le forum Composants
    Réponses: 11
    Dernier message: 12/07/2004, 10h55
  5. Une image dans un composant ?
    Par bjl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/03/2003, 11h28

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