Wie ein Delphi TSpeedButton machen gedrückt bleiben, wenn es in der Gruppe der einzige ist
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.
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;
....