Griser un item d'un radiogroup [Résolu]

Signaler
Messages postés
21
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
27 décembre 2014
-
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
-
Bonjour,
Dans la réalisation d'un jeu style 1000 bornes, je n'arrive pas, au sein d'un radiogroup à griser UN seul item de manière qu'il soit incliquable.
Nous pensions à radiogroup1.items[I].enabled:=false mais cette solution semble bien trop simple pour Delphi vu qu'il ne compile pas.

Merci d'avance.
Très cordialement.

8 réponses

Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
BOUH !
On peut :
 MonRadioGroup.Controls[MonIndex].Enabled := MonBoolean;

De rien ^^
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Ce n'est malheureusement pas possible avec un TRadioGroup.
Ce que tu peux faire, c'est mettre autant de TRadioButtons qu'il y avait d'items dans le TRadioGroup, et là tu peux utiliser la propriété Enabled de chaque bouton. Après, il faudra gérer toi-même l'unicité de la sélection (1 seul radiobutton coché, pas plus). Pour cela, rien de très difficile : tu décoches tous les boutons cochés puis tu coches celui sur lequel on a cliqué).

Cordialement, Bacterius !
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
Salut,




Comme dit Bacterius ou plus simple :

utilise une GroupBox contenant tes RadioButtons et fait :

MonRadioButton.Enabled := not MonRadioButton.Enabled;
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Ou alors, en plus compliqué, et pour une utilisation extensive, crée un nouveau composant TRadioGroup et, à la place des chaînes pour mettre des items, mets plutôt des TRadioButtons :)

Cordialement, Bacterius !
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
*Gros silence dans la salle*
*kof kof*
Non mais oui très bonne idée, je ne savais pas que les composants TRadioButton contenus dans le TRadioGroup étaient référencés dans les Controls ... j'aurais dû m'en douter en même temps lol puisqu'ils sont créés en prenant comme propriétaire le TRadioGroup ...

Cordialement, Bacterius !
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
... Ah bein ouais.

C'est Julio le plus fort au 1000 bornes !..
Messages postés
21
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
27 décembre 2014

Merci Julio!


Désolé pour le retard mais merci beaucoup.


Donc voilà un problème en moins. Niveau 2:


Nous cherchons à présent (je vais essayer d'expliquer clairement mais je vous garantis rien) à changer la couleur de la colonne du joueur. Par exemple, lorsque le joueur ne peut pas jouer et est bloqué (notamment au début de la partie tant qu'il n'a pas de feu vert), nous cherchons à ce que sa colonne reste avec un fond ROUGE(ou au moins la première case de cette colonne (comportant le numéro du joueur)). Dès qu'il obtient un feu vert paf, ça passe en fond VERT. Nous avons tenté avec le paragraphe MASELECTION vu en cours mais cette option semble faire des siennes. Je comprends pas pourquoi Delphi ne propose pas une propriété plus simple car dans le fond nous ne demandons pas grand chose, juste quelque chose du genre: MonStringgrid[1,2].fixedcolor:=ClLime

En vous remerciant à nouveau.
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
En gros tu voudrais colorier une cellule du TStringGrid ... Delphi ne peut pas tout faire pour toi lol, mais il t'offre un événement intéressant, qui est appelé à chaque dessin de cellule : OnDrawCell.
Regarde :

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
{ On vérifie que ça soit bien la colonne (et la ligne, optionnellement) voulue - chaque cellule mérite un événement OnDrawCell) }
if (ACol ColonneVoulue) {and ARow LigneVoulue} then
begin
StringGrid1.Canvas.Brush.Color := clLime; { Couleur verte }
StringGrid1.Canvas.Rectangle(Rect);
{ On dessine un rectangle vert dans la cellule - le rectangle est fourni }
end;
end;

Ici, par exemple, si tu définis ColonneVoulue à 1, la deuxième colonne sera toute verte après avoir connecté cette procédure à l'événement OnDrawCell de ta stringgrid. Après, il faudra peut-être créer un tableau booléen bidimensionnel pour savoir si une cellule est verte, rouge, ... etc ...

Cordialement, Bacterius !