Comment faire en sorte qu'un TSpeedButton de Delphi reste enfoncé s'il est le seul du groupe

StackOverflow https://stackoverflow.com/questions/202702

  •  03-07-2019
  •  | 
  •  

Question

Je ne suis pas sûr de savoir pourquoi TSpeedButton a cette propriété, mais lorsqu'un TSpeedButton est le seul bouton d'un index de groupe donné, il ne reste pas enfoncé, qu'il soit ou non "AllowAllUp". est pressé. Peut-être qu'un contrôle Jedi suffirait, mais j'espère qu'il y a une solution. Toute aide ou anecdote est appréciée.

BTW, j'utilise (toujours) Delphi 7, je ne suis pas sûr qu'il s'agisse d'une énigme générale.

Était-ce utile?

La solution

Je n'ai pas de D7 ici, mais dans D2006, un bouton Speed ??reste inactif si GroupIndex a une valeur > 0.

Si ce n'est pas le comportement que vous souhaitez, vous pouvez définir manuellement la propriété Down dans OnClick-Eventhandler (assurez-vous que GroupIndex est 0).

Autres conseils

Je viens d'essayer cela dans Delphi 7 (version 4.453):

  • créer une nouvelle application
  • ajoutez TSpeedButton pour former
  • définir AllowAllUp: = true;
  • set GroupIndex: = 1;
  • exécuter l'application

Lorsque vous cliquez sur le bouton, il passe en mode veille sans qu'aucun autre code ne soit nécessaire.

knight_killer est correct. Je peux vous dire que cela fonctionnera dans n'importe quelle version de Delphi:

object SpeedButton1: TSpeedButton
  Left = 152
  Top = 384
  Width = 23
  Height = 22
  AllowAllUp = True
  GroupIndex = 99
end

Delphi fait le travail pour vous, donc "n'écrivez AUCUN CODE".

Dans l’EDI, sélectionnez TOUS vos boutons Speed ??que vous vouloir fonctionner en tant que groupe, puis définir l'ensemble " GroupIndex & group; vers quelque chose d'autre que " 0 " et vous avez terminé - sans code - NADA !!

Hm, étrange, je me souviens de l’avoir utilisé plusieurs fois avec succès. Peut-être devriez-vous essayer de jouer avec la propriété Down du SpeedButton? Je ne pense pas que cela bascule automatiquement lorsque vous cliquez dessus - vous devriez explicitement basculer Bas , je suppose ...

[modifier: coché remplacé par bas --- TSpeedButton n'a pas de propriété Coché , désolé!]

Pour que cela fonctionne, vous ne pouvez pas simplement basculer la propriété Down, car elle est toujours en panne dans l'événement OnClick. Vous devez avoir une autre valeur:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  MyBoolProperty := not MyBoolProperty;
  SpeedButton1.Down := MyBoolProperty;
end;

L'astuce consiste à définir GroupIndex sur une valeur unique et à définir AllowAllUp sur true. Si vous oubliez le premier, il ne restera pas en bas, si vous oubliez le second, il ne restera pas en place une fois qu'il est tombé.

Définissez AllowAllUp sur True.

Définissez GroupIndex sur une valeur autre que 0.

Pour tout conserver dans OnClick, essayez

 with Speedbutton1 do
 begin
      if tag = 1 then tag := 0 else tag := 1;
      down := (tag = 1);
 end;

GroupIndex regroupe les boutons. Un seul bouton du groupe peut être actif. Tous doivent avoir le même index supérieur à 0 .

AllowAllUp permet de basculer le bouton vers le haut et le bas lorsque l'utilisateur clique dessus 2 fois de suite.

Je cherchais une solution à mon problème et je pense que c'est un peu la même chose. Je voulais faire en sorte qu'un SpeedButton permute les états haut et bas comme un commutateur, et j'ai réussi en définissant les propriétés:

AllowAllUp := True; 
GroupIndex := 1;

Ensuite, dans l'événement OnClick du bouton que j'ai écrit:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  if( SpeedButton1.AllowAllUp ) then 
  begin 
    SpeedButton1.AllowAllUp := False; 
    SpeedButton1.Down := True; 
  end else 
  begin 
    SpeedButton1.AllowAllUp := True; 
    SpeedButton1.Down := False; 
  end; 
end;

Ceci fait basculer le bouton vers le bas quand il est cliqué et vers le haut quand il est cliqué à nouveau.

J'espère que ça vous sera utile

Définissez AllowAllup sur true et Down sur false.

Puis dans l'événement OnClick :

....
btn.AllowAllUp := not btn.AllowAllUp;
btn.Down       := not btn.Down;
....
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top