![]() |
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 :? |
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:
Alternativ könntest du allen SpeedButtons den gleichen
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;
Delphi-Quellcode:
-Handler geben und so etwas in der Art:
OnClick
Delphi-Quellcode:
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:
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;
Delphi-Quellcode:
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.
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; |
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 |
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.
|
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 |
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 |
AW: segmentbuttons mit case of abfragen möglich?
Eigentlich müsste:
Delphi-Quellcode:
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:
if (speedbutton3.ispressed = true) and (speedbutton5.ispressed = true) then
Delphi-Quellcode:
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:
if (Alter = 18) and (Nachname = 'Horst') then
//
Delphi-Quellcode:
if speedbutton3.ispressed and speedbutton5.ispressed then
|
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 14:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz