Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   segmentbuttons mit case of abfragen möglich? (https://www.delphipraxis.net/189390-segmentbuttons-mit-case-abfragen-moeglich.html)

iFox 7. Jun 2016 19:44

segmentbuttons mit case of abfragen möglich?
 
ich habe 3 speedbuttons zu einem einzigen segment gemacht und dafür auch einen gemeinsamen gruppennamen vergeben.

ich möchte mit Button1 eine berechnung durchführen. wie kann ich dabei das segment (bestehend aus den 3 x speedbuttons) mit case of abfragen? evtl. anhand des gruppennamens vielleicht? mit If klappte das iwie net :?

Der schöne Günther 7. Jun 2016 21:22

AW: segmentbuttons mit case of abfragen möglich?
 
Hallo und Herzlich Willkommen in den Heiligen Hallen des Wissens und des Wahnsinns :drunken:

Was willst du an deinem "segment" groß abfragen? Welcher grade gedrückt ist? Oder willst du mitbekommen wenn sich die Auswahl ändert?

Letzteres ist etwas fummelig, man registriert sich für eine "TSpeedButtonGroupMessage":
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  TMessageManager.DefaultManager.SubscribeToMessage(
    TSpeedButtonGroupMessage,
    procedure(const Sender: TObject; const msg: TMessage)
    begin
      Caption :=
        (Sender as TSpeedButton).Name
        +' from '
        + (msg as TSpeedButtonGroupMessage).Value
        +' was pressed';
    end
  );
end;
Alternativ könntest du allen SpeedButtons den gleichen
Delphi-Quellcode:
OnClick
-Handler geben und so etwas in der Art:
Delphi-Quellcode:
procedure TForm1.SpeedButtonClick(Sender: TObject);
begin
  if SpeedButton1.IsPressed then
    Caption := 'SpeedButton1 is pressed'
  else if SpeedButton2.IsPressed then
    Caption := 'SpeedButton2 is pressed'
  else
    Caption := 'SpeedButton3 is pressed';
end;
Ansonsten ist da noch die Tag-Eigenschaft von allen Controls. Du gibst deinen drei SpeedButtons die Tags 1, 2 und 3. Dann könnte man den hier machen:
Delphi-Quellcode:
procedure TForm1.SpeedButtonClick(Sender: TObject);
begin
  case (Sender as TSpeedButton).Tag of
    1: Caption := 'SpeedButton1 was pressed';
    2: Caption := 'SpeedButton2 was pressed';
    3: Caption := 'SpeedButton3 was pressed';
  else
    Caption := 'Somewhere, something went terribly wrong';
  end;
end;
Kurzum: Entweder liege ich falsch, oder die GruppenNamen-Eigenschaft sorgt nicht dafür es irgendwo ein Gruppenobjekt gibt, an das man herankommt. Beispielsweise um es nach dem "Index" zu fragen, welcher Button gedrückt ist.

Sherlock 8. Jun 2016 06:57

AW: segmentbuttons mit case of abfragen möglich?
 
Ich verwende Alternative 2. Funktioniert tadellos. Für erweiterten Komfort kann man seiner Formklasse ja noch ein private Member spendieren, daß die aktuell gedrückte Taste beinhaltet...

Sherlock

DeddyH 8. Jun 2016 07:03

AW: segmentbuttons mit case of abfragen möglich?
 
Vielleicht übersehe ich ja etwas, aber könnte man nicht einfach den Sender auswerten? Für irgendwas muss dieser Parameter ja gut sein.

Sherlock 8. Jun 2016 07:09

AW: segmentbuttons mit case of abfragen möglich?
 
Ich hoffe doch sehr, daß der TE im OnClick Event genau sowas macht, aber zusätzlich zu einem anderen Zeitpunkt den "Clickzustand" der Gruppe benötigt.

Sherlock

iFox 8. Jun 2016 09:55

AW: segmentbuttons mit case of abfragen möglich?
 
ok habt zunächst vielen dank für eure lösungsvorschläge. ich glaube den fehler bei meiner if-variante gefunden zu haben.

aus
if speedbutton3.ispressed = true and speedbutton5.ispressed = true then

muss

if speedbutton3.ispressed and speedbutton5.ispressed = true then

ach ja die Basics :P

Jumpy 8. Jun 2016 12:18

AW: segmentbuttons mit case of abfragen möglich?
 
Eigentlich müsste:

Delphi-Quellcode:
if (speedbutton3.ispressed = true) and (speedbutton5.ispressed = true) then
sprich bei der Verknüpfung von mehreren boolchen Aussagen (mit and oder or) müssen diese in Klammern, damit der Compiler? das richtig auswerten kann. Gilt vor allem eher bei sowas:

Delphi-Quellcode:
if (Alter = 18) and (Nachname = 'Horst') then
//
In dem konkreten Fall hier ist es aber noch besser den Vergleich mit true ganz wegzulassen, Gründe kann man vielfachst hier im Forum nachlesen, d.h. am saubersten wäre:

Delphi-Quellcode:
if speedbutton3.ispressed and speedbutton5.ispressed then

iFox 8. Jun 2016 13:03

AW: segmentbuttons mit case of abfragen möglich?
 
auch diesen tipp nehme ich gerne mit, danke dir:thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz