Petit bug tout bête [Résolu]

Signaler
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009
-
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
-
Salut à tous.

J'ai mis en place un "MainMenu" dont l'une des colonne est un "RadioItem". Quand je selectionne deux fois le même élément dans cette colonne, cet élément se déselectionne alors que normalement il devrait conserver son état (comme tout RadioItem qui se respecte ).

Vous auriez une solution ?

21 réponses

Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
Aide Delphi  sur le RadioItem:
Utilisez la
propriété RadioItem pour que l'élément de menu se comporte comme un
bouton radio avec un groupe d'autres éléments.Le groupe d'éléments de
menu est constituéde tous les éléments d'un même menu déroulant ou
surgissant ayant la même valeur pour la propriété GroupIndex.Quand
RadioItem a la valeur true, un seul élément de menu de son groupe
d'éléments peut être coché à la fois.L'élément sélectionné du groupe
est indiqué par un rond apparaissant à côté de son libellé.

Remarque : RadioItem ne sélectionne pas automatiquement l'élément
lorsque l'utilisateur clique dessus àl'exécution :vous devez
explicitement attribuer à la propriétéChecked la valeur true en réponse
àl'événement OnClick.RadioItem change simplement l'apparence de l'état
Checked (en remplaçant la coche par un point rond) et désactive
automatiquement les autres éléments de menu du même groupe lorsque vous
attribuez à la propriétéChecked la valeur true.
Aide Delphi sur l'AutoCheck :
Quand AutoCheck a la valeur true,
chaque clic sur l'élément de menu provoque le basculement automatique
de la propriétéChecked avant l'événement OnClick.Quand AutoCheck a la
valeur false, l'application doit définir explicitement la valeur de la
propriétéChecked (par exemple,dans un gestionnaire d'événement OnClick).

Ce que tu fais :

Tu crées une procedure que tu vas lier à tous tes menuitems qui sont des radioitem.
procedure TForm1.CheckIt(Sender: TObject);

begin

 (Sender as TMenuItem).Checked := true;

end;
Voila un zip de demo avec screens au cas ou : http://diabloporc.free.fr/delphi/demos/johndogget.zip
(463k, dpr+pas+dfm+exe)
Messages postés
3838
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 février 2021
119
Rien ne t'empeche de le forcer.
Essaie ceci (je le fait de tête juste pour le principe):

procedure TForm1.RadioItem1Click(Sender: TObject);
begin
  if RadioItem1.Cheked then
    RadioItem1.Checked := true;
end;
Messages postés
3838
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 février 2021
119
Je viens de me rendre compte que j'ai écrit une betise. Ca ne peux evidemment pas fonctionner...
Apres quelques recherches sur le sujet, je n'ai pas trouvé non plus. Désolé pour les posts inutiles !
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

Ben ça peut marcher, mais il faudra écrire ...

procedure TForm1.RadioItem1Click(Sender: TObject);
begin
  if not RadioItem1.Cheked then
    RadioItem1.Checked := true;
end;

Mais ça parait bizarre comme bug, me demande si c'est pas simplement une propriété qui n'as pas été initialisé comme il faut
Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
38
Salut,

 c'est le fonctionnement normal de tous RadioItem

  1° selection --> Checked = True   //à condition que Checked est à False (je vous ai vu venir)
  2° selection --> Checked = False

Sinon le fonctionnement serait impossible ... imagine qu'il ne fasse qu'une fois sur deux le changement

ce que tu demandes n'existe pas

@+
Cirec
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
@cirec : le comportement des RadioItems des menus est différents des boutons radios habituels. une fois un bouton radio enfoncé, il est IMPOSSIBLE de revenir en arrière, un choix doit être fait parmis les choix possibles, cependant dans les menus, les radioitems qui ont un "autocheck" ont aussi implicitement un "autodécheck" qui fait que meme si un élément a été sélectionné, on a (bizzarement) la possibilité de désélectionner tous les radioitems.
ce que veux john c'est que ses radioitems se comportent comme des radiobuttons : une fois un choix fait, un élément doit obligatoirement être selectionné, la selection vide n'est pas autorisée.
me trompe-je john ?
Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
38
@ JulioDelphi :

superbe la démo et très pédagogique avec les ScreenShoot, c'est une bonne idée de présentation pour un tuto par exemple...

Et merci pour la précision je ne savais même pas que le comportement des RadioItems des menus étaient différents (jamais utilisé)

@+
Cirec
Messages postés
1173
Date d'inscription
mercredi 2 novembre 2005
Statut
Membre
Dernière intervention
10 septembre 2011
3
Le grand retour de JulioDelphi...

@+
 Matt

<hr size="2" width="100%" />La paresse est la mère du génie...
http://www.delphilab.com
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

JulioDelphi a tout compris !

Je teste ta soluc dés que j'ai le temps
J'ai regarder rapidement ta source, c'est vraiment tout simple à mettre en place, bravo et félicitation !

Je vous tiens au courant
Messages postés
1724
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2020
6
Tout à fait d'accord avec la manière de procéder de JulioDelphi.

et pour se référer à une question posée il y a trois siècles et demi :
(Sender as TMenuItem).Checked := True;
c'est plus sûr que
TMenuItem(Sender).Checked := True;
sinon, ça revient au même...

Bonne prog'
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
john ? alors ça donne quoi ?
Messages postés
215
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
1 septembre 2006

Le fait d'utiliser le "as" ne nous assure-t-il pas d'un test, alors que l'autre non?

j!nH
Messages postés
1724
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2020
6
Salut j!nH

Exact !

J'ai lu récemment quelque chose là-dessus, mais comme je ne peux pas citer mes sources, je viens de faire un petit test afin de vérifier.

Il nous faut :
- 1 Form,
- 1 Button,
- 1 RadioGroup avec 4 choix possibles :
    - as correct
    - as incorrect
    - transtypage correct
    - transtypage incorrect

et ce code :

procedure TForm1.Button1Click(Sender: TObject);
begin
  case RadioGroup1.ItemIndex of
    0: ShowMessage((Sender as TButton).ClassName);
    1: ShowMessage((Sender as TEdit).ClassName);
    2: ShowMessage(TButton(Sender).ClassName);
    3: ShowMessage(TEdit(Sender).ClassName);
  end;
end;

A l'exécution (hors environnement Delphi, pas de problèmes dans les cas 1 et 3, comme de bien entendu...
Dans le cas n°2, on nous signale un transtypage incorrect.
Dans le cas n°4, ça passe comme une lettre à la poste. Dans ce cas précis, pas de problème, mais éventuellement, bonjour les dégâts...

Bonne prog'
Messages postés
215
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
1 septembre 2006

Re,

J'avais également lu un article il y'a assez longtemps sur la compatibilité du code Win32 et .Net.

L'article ressemblait un peu à ça:

http://hallvards.blogspot.com/2004_09_01_hallvards_archive.html

j!nH
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
Quelques fois on se casse le *** pour des gens qui ne viennent même pas vous dire si ça marche, si c'est bien etc. Trop bon trop ***.
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

Je passe pas ma vie ici mon lapin ...
J'ai une vie à coté (sisi je t'assure c'est possible)
J'ai pas eu le temps de tester c'est pas une drame ? Si ?

C'est dommage que tu le prenne comme ça en vérité ...
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
Je sais bien que tu n'y passe pas ta vie, mais quand on pose une question sur un problème et qu'on dit "je te dis quoi", sachant que tu reçois un mail pour chaque réponse postée, la moindre des choses et de donner des nouvelles et cliquer sur "Reponse acceptée" si elle l'est. Ce n'est pas comme si tu n'étais pas l'auteur du sujet.
Enfin bref, tu viens de répondre mais on sais pas si ça t'a réellement aidé sagoin ^^
Allez donne moi cette réponse que je sache si j'ai bon :D
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

Bon puisque t'es colère, je vais tester dans la soirée ...
Je te dis pas à quelle heure hein
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
Contrôle des copies, demain matin 10h :D
EKSSASSOTE !!
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

Bon, sans surprises ça marche nickel
Je voulais tester pour être sûre que je n'avais pas d'autres questions à ce sujet ...

Encore merci