Wie ein Delphi TSpeedButton machen gedrückt bleiben, wenn es in der Gruppe der einzige ist

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

  •  03-07-2019
  •  | 
  •  

Frage

Ich bin mir nicht sicher, warum die TSpeedButton diese Eigenschaft hat, aber wenn ein TSpeedButton die einzige Taste eines bestimmten Group ist, es bleibt nicht gedrückt wird, ob oder ob nicht „AllowAllUp“ gedrückt wird. Vielleicht wäre eine Jedi Kontrolle genügen, aber hoffentlich gibt es einige Verlegenheit. Jede Hilfe oder Anekdoten werden geschätzt.

BTW, ich bin (noch) mit Delphi 7, nicht sicher, ob dies ein auf dem ganzen Linie Rätsel ist.

War es hilfreich?

Lösung

Ich habe keine D7 hier, aber in D2006 ein Speedbutton bleibt aktiviert, wenn der Groupindex einen Wert> 0 ist.

Wenn das nicht das Verhalten Sie möchten, können Sie den Nach-unten-Property manuell in den OnClick-Eventhandler festlegen (stellen Sie sicher, dass der Groupindex ist 0).

Andere Tipps

Ich habe gerade versucht, dass in Delphi 7 (Build 4.453):

  • Neue Anwendung
  • hinzufügen TSpeedButton bilden
  • set AllowAllUp := true;
  • set GroupIndex := 1;
  • Anwendung ausführen

Wenn die Schaltfläche klicken sie schaltet seinen heruntergefahrenen Zustand ohne weiteren Code benötigt.

knight_killer ist richtig. ich kann Ihnen sagen, es in einem beliebigen Version von delphi arbeiten werden:

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

Delphi macht die Arbeit für Sie so "schreiben Sie keinen CODE".

In der IDE alle Ihre Speedbuttons auswählen, die Sie wollen als Gruppe arbeiten und dann die ganze „Group“ andere etwas Gruppe als „0“ und Sie sind fertig - mit NO CODE - NADA !!

Hm, merkwürdig, ich erinnere mich mit diesem schon ein paar Mal mit Erfolg. Vielleicht sollten Sie mit dem Down Unterkunft Speedbutton zu spielen versuchen? Ich glaube nicht, es schaltet sich automatisch, wenn Sie darauf klicken --- Sie sollten explizit umschalten Down, ich denke ...

[edit: ersetzt Checked mit Down --- TSpeedButton keine Checked Eigenschaft haben, sorry]

Um dies zu arbeiten, können Sie nicht nur die Eigenschaft Down wechseln, weil sie immer nach unten in das OnClick-Ereignis ist. Sie müssen einen anderen Wert haben:

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

Der Trick ist, den Groupindex auf einen eindeutigen Wert zu setzen und AllowAllUp auf true gesetzt. Wenn Sie die erste vergessen, wird es nicht unten bleiben, wenn Sie die zweite vergessen, wird es nicht bleiben, wenn es nach unten gewesen ist.

Set AllowAllUp auf True fest.

Set Group auf non 0.

Um alles in der OnClick zu halten, versuchen

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

GroupIndex Gruppen die Tasten. Nur ein Tasten in der Gruppe aktiv sein. Alle von ihnen brauchen den gleichen Index höher als 0 haben.

AllowAllUp erlaubt Taste, um nach oben und unten, wenn es 2 mal in einer Reihe angeklickt wird.

Ich war auf der Suche nach einer Lösung für mein Problem und ich denke, diese Art von dem gleichen ist. Ich wollte die nach oben und unten Zustand eines Speedbutton wechseln wie ein Schalter machen, und ich konnte dies durch die Einstellung von Eigenschaften:

AllowAllUp := True; 
GroupIndex := 1;

Dann in dem OnClick-Ereignisse der Schaltfläche schrieb ich:

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;

Dies schaltet die Taste gedrückt, wenn es angeklickt wird und, wenn es wieder angeklickt wird.

Die Hoffnung, es wird eine Hilfe sein

Set AllowAllUp auf true, und unten auf false gesetzt.

Dann in OnClick Ereignisse:

....
btn.AllowAllUp := not btn.AllowAllUp;
btn.Down       := not btn.Down;
....
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top