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

  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 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,

    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

  8. #8
    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 essayé de faire une appli sous FMX.
    Et j'arrive presque à faire un composant comme je le souhaite, mais je vais y revenir.

    Je crois que je vais définitivement oublier FMX et revenir à la VCL pour la migration de l'appli qui m'a fait revenir au clavier, et cela pour plusieurs raisons ... objectives et/ou subjectives :

    - En premier lieu, la plus subjective : c'est pas beau ! pardon je corrige : je trouve cette interface d'une laideur repoussante !
    Pour moi le dernier OS élégant est windows 7. Je ne supporte pas tous ces OS apple, google et maintenant microsoft, qui sont tout "plat". Je préférais très nettement l'aspect en relief.
    J'ai l'impression de me retrouver avec windows 1 (ou 2 je sais plus) que j'avais sur mon 1er pc en 1989, qui était sous DOS, mais ce premier windows était proposé comme interface alternative ... Mais je le répète, je ne veux pas lancer de polémique, c'est tout à fait personnel.

    - ensuite, ce logiciel ne tournera jamais sur autre chose qu'un pc. Je ne vois pas comment on peut gérer une application dont certaines fiches présentent 80 champs sur un écran de téléphone ni même de tablette. Quant à l'environnement apple, je n'ai même pas un mac ou un iphone sous la main pour le tester et je ne vois pas l'association passer sur des mac hors de prix.

    - et enfin, je reviens à l'interface. Lorsque j'utilise une application pour de la saisie "au km", rien ne me fait plus "caguer" que d'avoir à passer du clavier à la souris pour changer de champ ou choisir une option. Ceux qui auront fait beaucoup de saisie dans des interfaces de gestion (comme moi) me comprendront. Ce que je veux, et la quasi totalité des utilisateurs que j'ai interrogé sont favorables à ce mode de fonctionnement, c'est saisir une donnée dans une case et passer à la case suivante non pas avec Tab (comme sur les terminaux IBM 3270 que j'ai utilisé au boulot il y a pas mal d'années), mais avec Entrée (que ce soit au clavier alpha ou numérique), et quand j'ai saisi la dernière case de la fiche, ma touche Entrée me fait passer directement au bouton Valider, et la touche Entrée me ramène sur la première case d'édition d'une fiche vierge, et etc ...
    J'ai bien essayé de faire ça sur des composants FMX.
    J'ai réussi sur un Edit sans gros problème, et je l'ai même relié à la base par livebindings.
    En revanche, sur un combobox que j'ai modifié pour avoir une autocompletion du champ saisi en fonction des données de la table (merci à SergioMaster pour son sujet dont je me suis inspiré, mais je ai adapté le composant à mes besoins), impossible de faire une synchronisation du champ saisi avec la table à afficher par la touche Entrée. Que ce soit dans le combobox d'origine ou dans mon composant dérivé, la seule manière de déclencher la synchronisation, c'est en cliquant sur l'item choisi avec la souris ! donc quitter le clavier pour toucher à la souris, ce que je ne veux pas. Je vais peut-être m'acharner un peu mais je pense que je retournerai à la bonne vieille VCL, bien connue et beaucoup plus riche que les pauvres composants FMX (par exemple, impossible de mettre deux groupes de deux radiobutton sur une même fiche, car chaque radiobutton est exclusif des 3 autres... il n'existe pas de composant radiogroup !)

    Quant à livebindings, au bout d'un moment si tu n'a pas le diagramme sous les yeux tu ne sais plus ce que tu as fait ... et au bout de quelques manipulations, tu ne sais plus où vont et viennent les flèches, mais c'est vrai que c'est assez marrant à faire.

    Bon voilà pour mon billet d'humeur sur FMX, mais je ne veux pas que ça déclenche des polémiques : c'est juste mon avis et je le partage,. Je ne cherche pas à influencer qui que ce soit

  9. #9
    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
    alors je te rassure, tu as parfaitement raison d'utiliser la VCL dans une application Windows. C'est même un choix cohérent.

    FMX est au départ prévu pour le multiplateforme, il est possible de l'utiliser sous Windows pour exploiter les capacités graphiques qu'on n'a pas sous VCL par défaut, mais pour de l'appli de gestion ça n'apporte pas grand chose. LiveBindings étant aussi disponible sous VCL ce n'est pas un argument pour passer à FMX.

    Ensuite la VCL est plus proche de Windows et donc respectera mieux les évolutions de l'OS (même si tu ne les apprécies pas ) que FMX qui doit être mis à jour pour implémenter de nouveaux design.

    Pour ce qui est du clavier/souris, je ne peux aussi que te rejoindre pour avoir travaillé quelques années sur AS/400, c'est vert, c'est moche diront certains, mais on n'a pas fait mieux pour la saisie, tout est normalisé et accessible au clavier...je dois même dire que j'appréciais de pouvoir déplacer le curseur librement à l'écran plutôt que d'utiliser la tabulation et ça me démange toujours un peu de reproduire ce fonctionnement sous VCL
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  10. #10
    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,

    si j'ai pris le parti FMX c'etait surtout pour des applications Linux, j'ai perdu un client Indien à cause de ça (je ne connaissais pas wine à l'époque mais ça c'est un autre sujet)

    En premier lieu, la plus subjective : c'est pas beau ! pardon je corrige : je trouve cette interface d'une laideur repoussante !
    c'est une question de style (un autre sujet) , effectivement le style par défaut n'est pas exceptionnel moi j'aime bien le style Calypso surtout quand je fais de la plongée.

    Nom : Capture_FMXListView_r.PNG
Affichages : 268
Taille : 51,1 Ko

    Quand j'écrit style, je parle de style FMX équivalent de ce que je préfére appeler apparence pour la VCL (c'est dans les options de projet) ou de skin quand on passe à des versions plus anciennes de Delphi

    - ensuite, ce logiciel ne tournera jamais sur autre chose qu'un pc.
    je préfere parler de Desktop et de mobiles. Moi non plus je n'ai pas de trucs à la pomme (ou poire). Je fais de l'informatique de gestion, donc je sais ce que sait que d'avoir des dizaines de champs sur une forme (pas jusqu'à 80 quand même)

    Ceux qui auront fait beaucoup de saisie dans des interfaces de gestion (comme moi) me comprendront.
    Pour ce qui est des touches <Entree> pour passer d'une zone à une autre en FMX , ça c'est facile il y a une option

    En revanche, sur un combobox que j'ai modifié pour avoir une autocompletion
    Hum, il me semble qu'il n'y a pas besoin de faire de modification c'est déjà possible mais c'est vieux ça je ne mettrai pas ma amain à couper.
    Je lui préfére ma 'combobox au petits oignons'

    VCL beaucoup plus riche que les pauvres composants FMX
    Là, je ne suis pas d'accord dans le sens où tout composant FMX peut être parent d'autres composants et donc il est très facile d'avoir quelque chose de "manquant"
    C'est une question "d'esprit" i.e un Tpanel deviendra un Tlayout avec un Trectangle et ce que TPanel ne permet pas de changer par programmation comme la couleur avec FMX devient facile. Et là je ne parle même pas de style

    impossible de mettre deux groupes de deux radiobutton sur une même fiche, car chaque radiobutton est exclusif des 3 autres
    hum ! propriété RadioGroup de chaque radiobutton

    ici un radiogroup UNITE et un radiogroup DIZAINE (* oui toujours calypso, je me bats avec une notion sur les styles en ce moment : les StyleObjects)
    Nom : Capture.PNG
Affichages : 272
Taille : 22,8 Ko
    par contre faire du Livebindings dessus devient un vrai plat de spaghettis-boulettes

    il n'existe pas de composant radiogroup !
    J'y travaille, enfin non, mon composant existe et fonctionne (Windows/Linux non essayé sur OSX), c'est la présentation écrite de ce dernier qui reste à faire
    Images attachées Images attachées  

  11. #11
    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
    Pour ce qui est des touches <Entree> pour passer d'une zone à une autre en FMX , ça c'est facile il y a une option
    Hum, il me semble qu'il n'y a pas besoin de faire de modification c'est déjà possible mais c'est vieux ça je ne mettrai pas ma amain à couper.
    Je n'ai trouvé ni l'un ni l'autre ...

    hum ! propriété RadioGroup de chaque radiobutto
    Je n'ai trouvé que GroupName, mais il est vrai que ça marche ... moins pratique qu'un radiogroup mais ça le fait

  12. #12
    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
    Citation Envoyé par navyg Voir le message
    Je n'ai trouvé que GroupName, mais il est vrai que ça marche ... moins pratique qu'un radiogroup mais ça le fait
    Oups lapsus, en effet c'est la propriété GroupName que je voulais écrire


    Citation Envoyé par navyg Voir le message
    Je n'ai trouvé ni l'un ni l'autre ...
    Pour les TEdit c'est KillFocusByReturn

    Pour combobox par contre, j'étais sûr qu'il y avait quelque chose, là encore beaucoup de recherches oubliées après ce tutoriel , (ça commence à m'inquiéter cette perte de mémoire) (NB c'est quand même la premiére proposition quand on googlise avec les mots clés delphi+fmx+autocompletion

  13. #13
    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
    Pour les TEdit c'est KillFocusByReturn
    Pour l'option d'utilisation de la touche Entrée pour passer au controle suivant ça ne marche pas, ça "défocuse" le control mais ça ne passe pas au suivant

    En revanche, j'ai trouvé par "tirage du bout de laine" ReturnKeyType qui n'existe que dans Tedit et les descendants de TCustomEdit, donc pas dans le TComboBox mais que dans le TComboEdit.
    Quand j'ai essayé de lier un ComboEdit à un bindsource au niveau du synch, j'ai une erreur à l'exécution "pas d'observateur etc ..." ou un truc comme ça.

    Sur des Tedit, j'ai essayé de mettre ReturnKeyType à Next, mais ça ne marche pas quand même ... donc pas très simple à mettre en oeuvre, alors que mes composants VCL "revisités" fonctionnent tous en passant au contrôle suivant par Entrée, et même un peu comme l'as400 car avec les flèches haute et basse, je passe sur le contrôle précédent et suivant ;o)

    Je crois que je vais abandonner FMX c'est trop compliqué, et je ne t'explique pas la lenteur quand il y a beaucoup de contrôle sur la feuille de liens ... et à chaque fois que tu exécutes, la feuille de lien revient vierge, il faut la fermer et recliquer droit sur un composant et cliquer sur lier visuellement ... la galère

  14. #14
    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
    Citation Envoyé par navyg Voir le message
    la galère
    j'ai bien connu à mes débuts FMX (XE4) maintenant c'est plutôt l'inverse je galère avec VCL (surtout en maintenance d'appli D3)

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