Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   SpeeedButton Properties: Down nicht manipulierbar (https://www.delphipraxis.net/201398-speeedbutton-properties-down-nicht-manipulierbar.html)

Minz3 18. Jul 2019 13:59

SpeeedButton Properties: Down nicht manipulierbar
 
Huhu Gemeinde,

ich bin schon seit einer Weile ein stiller Leser und habe bisher auch immer recht schnell Lösungsansätze gefunden. Danke schon mal dafür!
Jetzt habe ich allerdings auch mal ein kleines Problem, welches ich zur Sprache bringen möchte. Also hab ich mich fix registriert und da bin ich.

Ich möchte mit Hilfe eines BitButtons die "Down" Eigenschaft eines SpeedButtons manipulieren, also true bzw. false setzen. Leider gelingt es mir nicht, diesen Status zu verändern. Nicht einmal im Eigenschaften-Fenster lässt sich der Haken setzen. Die Option "AllowAllUp" bringt leider auch nicht das gewünschte Ergebnis.
Das Setzen des Status im Quellcode funktioniert ebenso wenig, hier mal der Code für den BitButton:
Delphi-Quellcode:
procedure TMainForm.Dice1Click(Sender: TObject);

begin
   if Take1.Down = true then
  begin
    Take1.Down := false;
    exit;
  end;

  if (Take1.Down = false) and (Dice1.Caption = '0') then
    application.messagebox ('Bitte erst würfeln!', 'Fehler', mb_OK + mb_IconExclamation)
  else
    Take1.Down := true;

  if RollButton.Enabled then
    RollButton.SetFocus;
end;
Der Code ist Bestandteil eines Delphi Kurses. Ziel ist es einen Kniffel-Klon zu programmieren.
*Edit: "Dice1" ist ein BitButton, welcher "Take1" (SpeedButton) manipulieren soll. "RollButton" ist ebenfalls ein BitButton, welche dann zum "würfeln" gedacht ist.

Hoffe ich konnte mich soweit verständlich ausdrücken. :nerd:

Grüße!

Redeemer 18. Jul 2019 14:07

AW: SpeeedButton Properties: Down nicht manipulierbar
 
OH lesen nicht vergessen. Delphi-Referenz durchsuchenVcl.Buttons.TSpeedButton.Down sagt: GroupIndex darf nicht 0 sein.

Delphi.Narium 18. Jul 2019 14:10

AW: SpeeedButton Properties: Down nicht manipulierbar
 
Damit Down funktioniert, muss GroupIndex einen Wert <> 0 haben.

Down wird dann für alle die Speedbuttons aktuallisiert, die über den gleichen GroupIndex verfügen.

Hat man z. B. 10 SpeedButtons und davon sind 5 mit GroupIndex = 1 versehen, so führt das Setzen von Down auf True für einen dieser SpeedButtons dazu, dass Down für die anderen 4 SpeedButtons mit GroupIndex = 1 auf False gesetzt wird.

Die 5 SpiedButtons, deren GroupIndex <> 1 ist, bleiben davon unberührt.

Zitat:

Zitat von Delphi 7-Hilfe
VCL-Referenz
GroupIndex (Eigenschaft von TSpeedButton)

TSpeedButton Siehe auch

Die Eigenschaft GroupIndex ermöglicht das Gruppieren mehrerer Mauspalettenschalter.

Delphi-Syntax:

property GroupIndex: Integer;

C++ Syntax:

__property int GroupIndex = {read=FGroupIndex, write=SetGroupIndex, default=0};

Beschreibung

Mit GroupIndex können Sie festlegen, wie sich der Schalter beim Anklicken verhält.

Hat GroupIndex den Wert 0, ist der Schalter von den anderen Schaltflächen im Formular unabhängig. Klickt der Benutzer auf diesen Schalter, wird er gedrückt angezeigt. Sobald der Benutzer die Maustaste loslässt, wird er wieder in seinen nicht gedrückten Zustand versetzt.

Ist GroupIndex größer als 0, bleibt der Schalter ausgewählt (gedrückt), wenn der Benutzer auf ihn klickt. Durch das Klicken auf einen ausgewählten Schalter wird dieser in den nicht gedrückten Status versetzt, es sein denn, Caption hat den Wert False. Wird die Eigenschaft GroupIndex eines einzelnen Mauspalettenschalters auf einen Wert größer als 0 gesetzt, verhält sich der Schalter wie eine Schaltfläche mit zwei Zuständen, sofern Caption True ist.

Mauspalettenschalter, die denselben Wert in der Eigenschaft GroupIndex aufweisen (dieser Wert darf nicht Null sein), fungieren als Gruppe. Wenn der Benutzer auf einen dieser Mauspalettenschalter klickt, bleibt dieser gedrückt, bis der Benutzer auf einen anderen Schalter der Gruppe klickt. Auf diese Weise verwendete Mauspalettenschalter bieten dem Benutzer Auswahlmöglichkeiten an, die sich gegenseitig ausschließen.


hoika 18. Jul 2019 14:12

AW: SpeeedButton Properties: Down nicht manipulierbar
 
Hallo,
http://docs.embarcadero.com/products...tton_Down.html

GroupIndex muss >0 sein.

Minz3 18. Jul 2019 14:13

AW: SpeeedButton Properties: Down nicht manipulierbar
 
Zitat:

GroupIndex darf nicht 0 sein.
Zitat:

Damit Down funktioniert, muss GroupIndex einen Wert <> 0 haben.

Down wird dann für alle die Speedbuttons aktuallisiert, die über den gleichen GroupIndex verfügen.

Hat man z. B. 10 SpeedButtons und davon sind 5 mit GroupIndex = 1 versehen, so führt das Setzen von Down auf True für einen dieser SpeedButtons dazu, dass Down für die anderen 4 SpeedButtons mit GroupIndex = 1 auf False gesetzt wird.

Die 5 SpiedButtons, deren GroupIndex <> 1 ist, bleiben davon unberührt.
Hey,

Danke für die schnellen Antworten, eins hab ich vergessen zu erwähnen. Den "GroupIndex" hatte ich bereits mal geändert. Allerdings lässt sich der Status dann genau ein Mal ändern und bleibt dann auf true. Ich krieg ihn dann weder per Code noch im Eigenschaften-Fenster zurückgesetzt.

Ich glaub ich hab da ein Feature gefunden.

Grüße!

Delphi.Narium 18. Jul 2019 14:21

AW: SpeeedButton Properties: Down nicht manipulierbar
 
Bei allen betroffenen SpeedButtons auch den gleichen Wert für GroupIndex gesetzt?

Sonst geht das nicht.

Hab' hier gerade ein Programm laufen, bei dem das einwandfrei funktioniert (seit bestimmt schon 10 Jahren), sowohl beim Anklicken per Maus, als auch durch Setzen im Quelltext.

Delphi-Quellcode:
procedure TMainForm.Dice1Click(Sender: TObject);
begin
  if Take1.Down then
    Take1.Down := false
  else begin
    if (not Take1.Down) and (Dice1.Caption = '0') then
      application.messagebox ('Bitte erst würfeln!', 'Fehler', mb_OK + mb_IconExclamation)
    else
      Take1.Down := true;

    if RollButton.Enabled then
      RollButton.SetFocus;
  end;
end;

hoika 18. Jul 2019 14:26

AW: SpeeedButton Properties: Down nicht manipulierbar
 
Hallo,
mache mal ein Minimal-Bsp.

1 BitBtn, 1 SpeedBtn.

Und dann
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  SpeedButton1.Down:= not SpeedButton1.Down;

  // Fürs Debuggen
  if Sender=nil then
  begin

  end;
end;
Dann hänge das Projekt als Zip hier an, also das ganze Verzeichnis ohne die Exe.

Minz3 18. Jul 2019 14:28

AW: SpeeedButton Properties: Down nicht manipulierbar
 
Zitat:

Bei allen betroffenen SpeedButtons auch den gleichen Wert für GroupIndex gesetzt?
:oops: Oh shit... Ja sowas in der Art war es.

Also der Fehler ist jetzt behoben. Es haben wohl einige Faktoren hier hineingespielt.
Ich hatte mehrere SpeedButtons mit dem selben GroupIndex versehen. 6/7 waren disabled und 1/7 war enabled, mit welchem ich dann getestet hatte. Als ich den GroupIndex vom einzigem eingeschalteten Button geändert hatte ( von 1 auf 2 ) funktionierte der Spaß.

Allerdings sollte doch für die Buttons im selben Index es keine Rolle spielen, ob die anderen Buttons enabled oder disabled sind oder doch?

Aber danke nochmals für die echt schnellen Antworten! :love:

Grüße!

Delphi.Narium 18. Jul 2019 14:37

AW: SpeeedButton Properties: Down nicht manipulierbar
 
Zitat:

Zitat von Minz3 (Beitrag 1436995)
Allerdings sollte doch für die Buttons im selben Index es keine Rolle spielen, ob die anderen Buttons enabled oder disabled sind oder doch?

Doch, in einem GroupIndex kann nur ein Button Down = True haben, die anderen werden automatisch auf False gesetzt.
Innerhalb eines GroupIndex kann immer nur ein Button gedrückt sein.
Man kann aber für alle Buttons in einem GroupIndex Down auf False setzen, also dafür Sorgen, dass kein Button gedrückt ist.
Das gleichzeitige Drücken mehrere Buttons in einem GroupIndex ist jedoch nicht möglich.

Minz3 18. Jul 2019 14:44

AW: SpeeedButton Properties: Down nicht manipulierbar
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1436996)
Zitat:

Zitat von Minz3 (Beitrag 1436995)
Allerdings sollte doch für die Buttons im selben Index es keine Rolle spielen, ob die anderen Buttons enabled oder disabled sind oder doch?

Doch, in einem GroupIndex kann nur ein Button Down = True haben, die anderen werden automatisch auf False gesetzt.
Innerhalb eines GroupIndex kann immer nur ein Button gedrückt sein.
Man kann aber für alle Buttons in einem GroupIndex Down auf False setzen, also dafür Sorgen, dass kein Button gedrückt ist.
Das gleichzeitige Drücken mehrere Buttons in einem GroupIndex ist jedoch nicht möglich.

Ok verstanden.
Aber wie genau verhalten sich dann die "ausgeschalteten" Buttons? Ich hatte jetzt das Gefühl, dass diese verhindert haben, den Status des einen Buttons zu ändern.

Grüße!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 Uhr.
Seite 1 von 2  1 2      

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