TSpeedButton

Rund um die LCL und andere Komponenten
Antworten
Pf@nne
Beiträge: 12
Registriert: Fr 28. Feb 2014, 21:43

TSpeedButton

Beitrag von Pf@nne »

Moin,

ich tüftel mir hier gerade einen Wolf..... wahrscheinlich ist es eher einfach, wenn man weiß wie es geht....

Ich möchte folgende Funktionen haben:
  • Ich brauche eine 10 Buttons die nach dem drücken in ihrer Position bleiben (keine RadioButton oder CheckBox),
  • Die Buttons sollen unabhängig voneinander sein (Funktion wie CheckBox),

    Soweit kein Problem, wenn ich SpeedButtons nutze läuft es mit
    - AlowAllUp=True
    - GroupIndex=jeder einen eigenen
    so wie ich es haben will.
  • Zusätzlich möchte ich aber, dass alle Buttons die selbe Action in meiner ActionList nutzen,
    Im ActionEreignis will ich dann den .Tag abfragen um so den gedrückten Button zu identifizieren.
Sobalt die Buttons einem ActionList-Ereignis zugewiesen sind bleiben sie nicht mehr gedrückt.

Wäre nett wenn mir da jemand auf die Sprünge helfen kann.

Gruß
Pf@nne

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: TSpeedButton

Beitrag von Christian »

Nimm GroupIndex und AutoCheck der Action
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Pf@nne
Beiträge: 12
Registriert: Fr 28. Feb 2014, 21:43

Re: TSpeedButton

Beitrag von Pf@nne »

Hi Christian,
Nimm GroupIndex und AutoCheck der Action
Kannst du mir da noch ein oder zwei Sätze mehr spendieren?
Mit der Info komme ich noch nicht so richtig klar....

Danke
Pf@nne

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: TSpeedButton

Beitrag von Christian »

Das selbe kann ich dir jetzt sagen, wie wärs wenn du sagst womit du nicht klar kommst :)

Nimm Statt den beiden Eigenschaften des Speedbuttons die der Action, welche hab ich dir genannt. Woischproblem?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: TSpeedButton

Beitrag von pluto »

Muss der GroupIndex bei den TSpeedButtons nicht immer der gleiche sein? > 0 ?
MFG
Michael Springwald

Pf@nne
Beiträge: 12
Registriert: Fr 28. Feb 2014, 21:43

Re: TSpeedButton

Beitrag von Pf@nne »

AutoCheck der Action hab ich jetzt auf false gesetzt,
damit bleiben die Buttons wieder down.....

Aber der GroupIndex in der Action kann ja immer nur für alle gleich sein,
damit sind die Buttons immer alle in einer Group.
Die Buttons verhalten sich damir wie RadioButtons (immer nur einer),
ich brauche aber ein CheckBox-Verhalten (Egal wer wie).

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: TSpeedButton

Beitrag von Komoluna »

ich würde dafür ja eine TToolBar mit CheckButtons nehmen.
Da ich(wie in der Komponentenpalette bei Lazarus) immer nur einen Knopf gedrückt haben möchte
lässt sich wenn man bei jedem der Buttons bei OnClick

Code: Alles auswählen

For i := 0 To ToolBar1.ButtonCount - 1 Do
  Begin
    If Sender = ToolBar1.Buttons[i] Then
      ToolBar1.Tag := i;
    ToolBar1.Buttons[i].Down := False;
  End;
  (Sender As TToolButton).Down := True;
ausführt genau das erreichen, welcher button gedrückt ist, lässt sich mit ToolBar1.Tag auslesen...

Wenn man die Buttons jedoch wie eine CheckGroup verwenden will kann man einfach

Code: Alles auswählen

ToolBar1.Buttons[i].Down
abfragen...

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

wp_xyz
Beiträge: 5139
Registriert: Fr 8. Apr 2011, 09:01

Re: TSpeedButton

Beitrag von wp_xyz »

Nimm für alle Actions einen anderen GroupIndex (<> 0). Bei den Speedbuttons musst du dann noch AllowAllUp auf true setzen, sonst kommen die Buttons beim zweiten Click nicht mehr raus.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: TSpeedButton

Beitrag von pluto »

@Komoluna
Genau so müsste er es auch bei den SpeedButtons machen können(ungetestet).
MFG
Michael Springwald

Pf@nne
Beiträge: 12
Registriert: Fr 28. Feb 2014, 21:43

Re: TSpeedButton

Beitrag von Pf@nne »

OK,

es klappt wie gewünscht wenn ich die ActionList umgehe
und nicht über die Eigenschaft.Action
sondern über das Ereignis.OnClick in eine gemeinsame Routine springe.
Zusätzlich hat jeder Button hat einen anderen GroupIndex und AllowAllUp=true.
(Das wäre dann wohl über die ActionList nicht möglich gewesen)
Im Ereignis.OnClick werte ich dan .Tag aus.

Code: Alles auswählen

procedure TFrm_HW_Control.Set_GPIOExecute(Sender: TObject);
begin
  if Sender is TSpeedButton then
    hwGPIO.ConfigPin(TSpeedButton(Sender).Tag, TSpeedButton(Sender).Down)
end;
Gruß und Danke
Pf@nne

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: TSpeedButton

Beitrag von Christian »

Na für n Checkbox Verhalten musst doch nur Autocheck der Action anmachen und den group Index für jede Action nen anderen damit hast genau das gemacht was du vorher mit den Speedbuttons gemacht hast.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Pf@nne
Beiträge: 12
Registriert: Fr 28. Feb 2014, 21:43

Re: TSpeedButton

Beitrag von Pf@nne »

Moin,

welche Action genau meinst du?
Eigenschaften.Action oder Ereignisse.Action
In der Eigenschaften.Action kann doch nur für alle ein gemeinsamer GroupIndex gewählt werden.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: TSpeedButton

Beitrag von Christian »

Die dinger in einer ActionList heissen Action !!
ansonsten versteh ich deine Frage nicht.
die Urfrage war doch das du ne Action verwenden willst statt die SpeedButton Eigenschaften direkt zu verwenden.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

wp_xyz
Beiträge: 5139
Registriert: Fr 8. Apr 2011, 09:01

Re: TSpeedButton

Beitrag von wp_xyz »

Ich glaube, das Problem ist, dass nur EINE Action für alle Speedbuttons verwendet werden soll - zumindest in meinen eigenen Antworten zu dem Thema habe ich das übersehen. Entweder du verwendest für jeden Speedbutton eine eigene Action, dann funktioniert alles wie oben beschrieben, oder du lässt die Actions und arbeitest mit den Eigenschaften der Speedbuttons allein.

Pf@nne
Beiträge: 12
Registriert: Fr 28. Feb 2014, 21:43

Re: TSpeedButton

Beitrag von Pf@nne »

Zusätzlich möchte ich aber, dass alle Buttons die selbe Action in meiner ActionList nutzen,
Im ActionEreignis will ich dann den .Tag abfragen um so den gedrückten Button zu identifizieren.
So war es gedacht....
Entweder du verwendest für jeden Speedbutton eine eigene Action, dann funktioniert alles wie oben beschrieben, oder du lässt die Actions und arbeitest mit den Eigenschaften der Speedbuttons allein.
......und dann
über das Ereignis.OnClick in eine gemeinsame Routine springe.
Geht ja jetzt, vielen Dank

Ich habe aber noch ein weiteres Problem....

Ich möchte den TSpeedButton sowohl als Schalter als auch als Rückmeldung verwenden.
Für die Rückmeldung nutze ich zum einen ja die .Down-Eigenschalft als auch ein wechselnden .Glyph (rot oder grün).
Das klappt soweit auch ganz gut.
Nun möchte ich aber NUR die Schaltfunktion des TSpeedButton sperren können.
Ich möchte weiterhin das .Glyph-Bitmap sehen und verändern können.
Mit .Enable=false wird aber auch das .Glyph-Bitmap grau.

Als Workaround hole ich den Button mutwillig wieder zurück, gibt es da noch was eleganteres?

Code: Alles auswählen

  if TSpeedButton(Sender).Down then
    TSpeedButton(Sender).Down:=false
  else
    TSpeedButton(Sender).Down:=true;
 
Gruß
Pf@nne

Antworten