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

Lazarus Pascal Discussion :

Checkbox.OnExit ne fonctionne pas comme prévu


Sujet :

Lazarus Pascal

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut Checkbox.OnExit ne fonctionne pas comme prévu
    Bonjour,

    sur une fiche vierge je pose d'abord un TCheckBox, puis un TButton et pour faire bonne mesure un autre TButton.

    Ensuite, j'écris un code hautement sophistiqué et laborieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.CheckBox1Exit(Sender: TObject);
    begin
      Button2.SetFocus;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Close;
    end;
    et j'appuie sur F9 : la fiche s'affiche, avec le focus sur le CheckBox, je peux jouer avec <Espace> pour cocher/décocher, pas de souci, la cata arrive quand j'appuie sur <TAB> : le focus passe au Button1,

    J'ai bien tenté de mettre le TabStop du TCheckBox à False mais, outre le fait qu'au run l'animal n'a plus le focus, le OnExit envoie quand même dans Button1.

    Constaté dans Laz 1.4 - Debian 32 bits et Laz 2.0.10 - Debian 64 bits.

    Une idée ?

    Une astuce consisterait à mettre le TabStop de Button1 à False et là ça fonctionne mais, si c'est envisageable pour une fiche à 3 composants, ça l'est moins s'il y en a beaucoup et s'il faut presque tous leur faire subir ce traitement.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #2
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut normalement tu n'as pas besoin de onExit pour donner le focus à un autre composant, à moins de vouloir checker la valeur du composant en cours et de rediriger le focus vers un autre composant suivant le résultat. L'évènement onExit se déclenche juste avant à la perte du focus de l'élément, si je me souviens bien.

    J'ai testé sous Windows, ça fonctionne. Donc problème de comportement avec Linux.

    Essayes avec activeControl = button2 ou avec FocusControl(button2); qui proviennent de TForm . Si ca ne fonctionne toujours pas essayes avec l'évènement onEditingDone qui passera au composant choisi dès que tu cocheras/décocheras ta checkbox. Ce n'est peut-être pas ce que tu souhaites.

    Au pire, vérifies juste bien l'ordre de "tabOrder" de tes composants Button1 = 1, Checkbox = 2, Button2 = 3. C'est le menu "voir ==> Ordre de tabulation" ce qui t'évites de jouer avec le onExit

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    normalement tu n'as pas besoin de onExit pour donner le focus à un autre composant, à moins de vouloir checker la valeur du composant en cours et de rediriger le focus vers un autre composant suivant le résultat. L'évènement onExit se déclenche juste avant à la perte du focus de l'élément, si je me souviens bien.
    Ce que je veux faire, c'est avoir au run le focus sur le CheckBox ("Arrêter la machine à la fin de la sauvegarde") comme ça un coup d'espace peut valider ce choix (décoché par défaut), et ensuite <TAB> pour sortir et là, j'aimerais tomber sur le bouton "Exécuter" pour appuyer sur <ENTRÉE> et lancer la sauvegarde.

    Citation Envoyé par BeanzMaster Voir le message
    J'ai testé sous Windows, ça fonctionne. Donc problème de comportement avec Linux.
    Ouais, ben ça, c'est pas nouveau,

    Citation Envoyé par BeanzMaster Voir le message
    Essayes avec activeControl = button2 ou avec FocusControl(button2); qui proviennent de TForm . Si ça ne fonctionne toujours pas essayes avec l'évènement onEditingDone qui passera au composant choisi dès que tu cocheras/décocheras ta checkbox. Ce n'est peut-être pas ce que tu souhaites.
    Les deux premières propositions = même pâté, c'est Button1 qui prend le focus.
    OnEditingDone fonctionne mais c'est violent : pas moyen de faire espace-espace-espace... pour voir la coche changer d'état, dès après le 1er coup d'espace, hop !, focus au button2.

    Citation Envoyé par BeanzMaster Voir le message
    Au pire, vérifies juste bien l'ordre de "tabOrder" de tes composants Button1 = 1, Checkbox = 2, Button2 = 3. C'est le menu "voir ==> Ordre de tabulation" ce qui t'évite de jouer avec le onExit
    Ça, c'est valable quand il n'y a que 3 compos sur une maquette. Mais là, les compos sont regroupés dans des panels et autres TGroupBox dont certains apparaissent en fonction du contexte (dd externe branché ou pas), et l'ordre de tabulation va être ingérable.

    L'idée c'était de ne pas être obligé de chercher la souris pour cliquer sur "Exécuter", mais comm' d'hab' ça va être compliqué sous Linux, donc comm' d'hab' je vais laisser tomber.

    Merci d'avoir tenté quelque chose.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  4. #4
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Si non dans onKey(up, press) tu peux intercepter le tab et donner le focus a ton bouton
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Si non dans onKey(up, press) tu peux intercepter le tab et donner le focus a ton bouton
    Oui, mais c'est comme avec
    Citation Envoyé par Jipété Voir le message
    OnEditingDone -- ça fonctionne mais c'est violent : pas moyen de faire espace-espace-espace... pour voir la coche changer d'état, dès après le 1er coup d'espace, hop !, focus au button2.
    Bah, c'est comme ça. Ne perds pas ton temps avec ça.
    Merci encore,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    C'est vrai que ça rend un peu fou...

    Si tu ajoutes un ShowMessage dans le OnExit de la case à cocher avant le SetFocus, il se produit comme attendu, mais si le ShowMessage est remplacé par un appel à une procédure non visuelle, non !
    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 !

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    C'est vrai que ça rend un peu fou...
    Comme tu dis, Yves, comme tu dis…

    Bon, l'idée que j'ai eue (mais aurai-je le temps ?), c'est d'explorer les codes du TCheckBox.OnExit, OnKeyUp et OnEditingDone pour voir si je ne pourrais pas mixer tout ça dans un TCheckBoxPerso.
    Un jour peut-être…
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Peut-être juste une truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.checkBox1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin           
      if Key=VK_TAB then monBouton.setFocus;
    end;
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  9. #9
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Peut-être juste une truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.checkBox1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin           
      if Key=VK_TAB then monBouton.setFocus;
    end;
    Tu as tenté chez toi ? Parce que chez moi ça donne le focus à Button1 malgré le code qui dit Button2…

    Truc de fou il a dit, Yves !

    Pour ne pas mourir idiot, j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.CheckBox1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if Key=VK_TAB then begin
        Form1.Color:=clRed;
        Button2.setFocus;
      end;
    end;
    et quand je fais F9, le focus se met sur le checkbox (puisque je l'ai posé en premier sur la fiche) et si je fais espace-espace-espace je vois bien la case à cocher qui bagote, ok.
    Mais si je fais TAB, le focus est donné à Button1 et la fiche n'est pas rouge !
    Si je fais encore TAB, le focus passe à Button2 et il ne se passe rien de plus, par contre, si encore une fois TAB alors là c'est Woodstock : la fiche passe rouge et le focus revient à Button2 !
    "Revient" parce qu'une fraction de seconde on le voit passer sur le checkbox.

    1-) c'est épuisant ;
    2-) j'ai fouillé dans les codes source, il n'y a rien pour m'aider, rien de rien…
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  10. #10
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Derniere tentative essayes ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.CheckBox1Exit(Sender: TObject);
    begin
      LCLIntf.SetFocus(button1.Handle);
    end;
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  11. #11
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Pas mieux,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  12. #12
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Hello petite question est-ce que ta checkbox et ton bouton sont dans des panel différents ?
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  13. #13
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    J'ai trouvé 2 trucs chez les anglois. Essayes :

    Google translate
    J'ai eu un problème similaire sous Linux et maintenant j'utilise toujours SetFocusedControl(). De plus, TabSheet doit être visible, j'ai donc défini la mise au point dans un gestionnaire pour l'événement TPageControl.OnChange.

    Cela fonctionne généralement - pas toujours, Gtk étant assez capricieux, mais la plupart du temps, cela fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm1.CheckBox1Exit(Sender: TObject);
    begin
      SetFocusedControl(Button1);
    end;
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.CheckBox1Exit(Sender: TObject);
    begin
      Button1.setFocus;
      Application.processmessages;
    end;
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  14. #14
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Yep !
    Citation Envoyé par BeanzMaster Voir le message
    Hello petite question est-ce que ta checkbox et ton bouton sont dans des panel différents ?
    Oh que non !
    Tout est bêtement sur la form -- rappel : là c'est un test sur une maquette minimaliste : la form et dessus la checkbox et 2 buttons car je veux que le taf se fasse sur le button2 sinon on ne verra jamais le bug.

    Et justement, en parlant de bug,
    Citation Envoyé par BeanzMaster Voir le message
    J'ai trouvé 2 trucs chez les anglois. Essayes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm1.CheckBox1Exit(Sender: TObject);
    begin
      SetFocusedControl(Button2);
    end;
    Pas mieux. Et même pire : une fois le focus sur Button1 (oui ! Vous avez bien lu, tiens d'ailleurs je mets mon code par copier/coller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.CheckBox1Exit(Sender: TObject);
    begin
      SetFocusedControl(Button2);
    end;
    une fois le focus sur Button1 disais-je, l'appui sur <TAB> n'est plus actif, comme si le prog était planté.

    Mais là où on rigole, c'est que si je cache la fiche par la fenêtre de Firefox (qui me permet de répondre ici), quand je découvre la fiche le focus est sur le Button2 !

    Il doit y avoir une histoire de refresh/repaint qui m'échappe, là.

    Confirmé : F9, la fiche s'affiche, TAB et le focus passe à Button1, Alt-Tab pour donner le focus à un autre prog puis encore Alt-Tab pour le redonner à ma fiche à souci et là c'est bon, le Button2 a le focus.
    C'est dramatique ce bazar et je n'ai aucune idée de comment le gérer...

    Testé dans la machine neuve et Laz 2.0.10, c'est + ou - pareil. J'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.CheckBox1Exit(Sender: TObject);
    begin
      Button2.SetFocus; // tout seul --> focus sur Button1 et y reste malgré la manip Alt-Tab 2 fois
      // ajout de App.ProcMess 
      Application.ProcessMessages; // ne change rien au comportement précédent.
      // Par contre, utiliser juste ça (et donc les 2 lignes précédentes commentées) :
      SetFocusedControl(Button2); // foire as usual (focus sur Button1) mais là, la manip Alt-Tab 2 fois ramène le focus sur Button2
      // la question est donc : comment générer Alt-Tab 2 fois *ici* et sans flicker si possible !
      // à vous les studios, ;-)
    end;



    Citation Envoyé par BeanzMaster Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.CheckBox1Exit(Sender: TObject);
    begin
      Button2.setFocus;
      Application.processmessages;
    end;
    J'avais commencé par ça, bien sûr. Je ne l'ai pas écrit dans le 1er post ? Petit oubli mineur car c'est tellement évident.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  15. #15
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut t'as essayé en faisant un "form1.repaint/refresh" juste apres SetFocusedControl(Button2); ?
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  16. #16
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    J'ai testé avec Lazarus 2.0.12-3 / FPC 3.2.2-1 sur Manjaro Linux 64 bits et j'ai bien le comportement voulu : le focus passe du TCheckBox au Button2.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  17. #17
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Yep !

    Citation Envoyé par BeanzMaster Voir le message
    Salut t'as essayé en faisant un "form1.repaint/refresh" juste apres SetFocusedControl(Button2); ?
    Ben oui mais c'est pas mieux
    J'ai même essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.CheckBox1Exit(Sender: TObject);
    begin
      SetFocusedControl(Button2);
      Application.ProcessMessages;
      Form1.Update; //Refresh; //Repaint;
      Application.ProcessMessages;
    end;
    Pour rien ça foire toujours,

    Doit y avoir un bug dans le widgetset, et "ils" ont dû le corriger, la preuve :
    Citation Envoyé par Alcatîz Voir le message
    J'ai testé avec Lazarus 2.0.12-3 / FPC 3.2.2-1 sur Manjaro Linux 64 bits et j'ai bien le comportement voulu : le focus passe du TCheckBox au Button2.
    Plus qu'à attendre que je mette la nouvelle machine en prod' pour tester. Probablement l'affaire d'une à deux semaines.

    Merci à tous, restez attentifs, je ne manquerai pas de faire un retour.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  18. #18
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Bonjour,

    Citation Envoyé par Jipété Voir le message
    Plus qu'à attendre que je mette la nouvelle machine en prod' pour tester. Probablement l'affaire d'une à deux semaines.

    Merci à tous, restez attentifs, je ne manquerai pas de faire un retour.
    Et comme ça me démangeait, j'ai fait à l'ancienne : d'abord virer tout ce qui concerne fpcup puis dl des 3 points deb chez lazarus-ide.org et dpkg -i fpc-laz*.deb fpc-src*.deb laz*.deb dans cet ordre et roule ma poule, en une poignée de seconde c'est installé (magique les disques ssd !).

    Et donc j'ai testé, et quel désespoir...

    Bon d'accord, je n'ai pas exactement les mêmes versions que celles d'Alcatîz (2.0.12-0 vs 2.0.12-3 et fpc 3.2.0-1 vs 3.2.2-1), il va donc falloir encore patienter -- ou bidouiller, et ça, franchement, j'ai pas envie.

    Au fait, Alcatîz, tu nous as dit que ça fonctionnait bien chez toi, ok, mais tu ne nous as pas donné les lignes de code que tu as utilisées. Pour comparer, c'est quand même nécessaire.
    Merci,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  19. #19
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    as tu essayé sur le onclick du Tcheckbox
    dans mon souvenir on onexit est "trappé" par le label associé à la case merci windows

    c'est historique
    un peu comme le onclick qui se déclenche quant tu assigne la valeur check par programmation
    le tchekbox est un composant un peu déroutant au premier abort
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  20. #20
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Yop !

    Citation Envoyé par anapurna Voir le message
    as-tu essayé sur le onclick du Tcheckbox
    Non, parce que je pensais que ça ne conviendrait pas. Démonstration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.CheckBox1Click(Sender: TObject);
    begin
      Button2.SetFocus;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Close;
    end;
    F9 --> la fiche s'affiche, le tcheckbox a le focus, la case à cocher n'est pas cochée.
    <ESPACE> et la case devient cochée ET le Button2 a le focus, donc je ne peux plus appuyer sur ESPACE pour décocher car le Button2 y réagissant comme sur ENTER, le prog se ferme.

    Pour empêcher ce comportement, il faut repasser le contrôle au checkbox avec un coup de TAB, ce qui est contraire au fonctionnement usuel de l'ihm.
    De plus cette astuce n'est valable que dans la maquette à trois composants.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

Discussions similaires

  1. Boucle, ne fonctionne pas comme prévu
    Par ArzelPRO dans le forum Langage
    Réponses: 7
    Dernier message: 03/02/2019, 22h18
  2. Mon serveur proxy ne fonctionne pas comme prévu
    Par win_ubuntu dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 28/04/2015, 19h34
  3. Réponses: 2
    Dernier message: 15/04/2015, 10h30
  4. Filtrage au niveau de la requête qui ne fonctionne pas comme prévu
    Par hartecel dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/06/2008, 14h06
  5. [Bonne pratique] merge qui ne fonctionne pas comme prévu
    Par forex dans le forum Subversion
    Réponses: 1
    Dernier message: 19/05/2008, 04h28

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