Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi SpeedButton down funktioniert nicht richtig (https://www.delphipraxis.net/94445-speedbutton-down-funktioniert-nicht-richtig.html)

Reyam 21. Jun 2007 14:06


SpeedButton down funktioniert nicht richtig
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo

Ich habe ein Feld von 8 mal 8 SpeedButtons zur Laufzeit erstellt, und möchte nun, nachdem man drei Buttons gedrückt hat, dass alle wieder ungedrückt sind.
Ich versuche es mit Groupindex und 'Down'. Bei jedem Klick wird der Groupindex auf 1, 2 oder 3 gesetzt und 'Down' auf true. Nachdem 3 Buttons gedrückt wurden, wird der GroupIndex auf 0 gesetzt und Down := false. Nur leider funktioniert das nicht richtig, wie man in der .exe-Datei ausprobieren kann. :(

Hier der Quellcode:

Delphi-Quellcode:
...
var
  Form1: TForm1;
  nummern: Array[1..8,1..8] of TSpeedButton;
  drei : integer;
  gedrueckt: Array[1..3] of TPoint;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
var i,j,x,y: integer;
begin
 drei := 1;

 x := 20;
 y := 20;
 for i := 1 to 8 do
  begin
   for j := 1 to 8 do
      begin
         Nummern[i,j] := TSpeedButton.Create(Self);
         Nummern[i,j].Parent := GroupBox1;
         Nummern[i,j].Show;
         Nummern[i,j].Left := y;
         Nummern[i,j].Top := x;
         Nummern[i,j].Height := 50;
         Nummern[i,j].Width := 50;
         Nummern[i,j].OnClick := ZahlClick;
         Nummern[i,j].Tag := i*10+j;
         inc(x,50);
       end;
     x := 20;
     inc(y,50);
  end;
end;

procedure TForm1.ZahlClick(Sender: TObject);
var x,y, i, j: integer;
begin
  If Sender is TSpeedButton then
  begin
    If drei in [1,2,3] then
    begin
      x := StrToInt(Copy(IntToStr(TSpeedButton(Sender).Tag),1,1));
      y := TSpeedButton(Sender).Tag Mod 10;
      If not Nummern[x,y].Down then
      begin
        Nummern[x,y].GroupIndex := drei;
        Nummern[x,y].Down := true;
        gedrueckt[drei].X := x;
        gedrueckt[drei].Y := y;
        inc(drei);
      end;
      If drei = 4 then
      begin
        for i := 1 to 3 do
        begin
          Nummern[gedrueckt[i].X,gedrueckt[i].Y].Down := false;
          Gedrueckt[i].X := 0;
          Gedrueckt[i].Y := 0;
        end;
        drei := 1;
      end;

    end;
  end;
end;
Ich habe schon längere Zeit ausprobiert, aber ich finde den Fehler nicht.
Ich hoffe, ihr könnt mir helfen

Mfg
Florian Mayer

CCRDude 21. Jun 2007 14:12

Re: SpeedButton down funktioniert nicht richtig
 
Da gab's doch so ne Eigenschaft AllowAllUp oder so, ist die per Default vllt. auf false?

Reyam 21. Jun 2007 14:21

Re: SpeedButton down funktioniert nicht richtig
 
Das habe ich auch schon ausprobiert, hat aber nicht wirklich geklappt

Jelly 21. Jun 2007 14:23

Re: SpeedButton down funktioniert nicht richtig
 
Du musst der Eigenschaft GroupIndex einen grösseren Wert geben als 0.
Hast du mehrere Buttons mit gleichem Groupindex, so wird hierüber gesteuert, dass immer nur ein Button aus der Gruppe gedrückt sein kann.

Reyam 21. Jun 2007 14:29

Re: SpeedButton down funktioniert nicht richtig
 
das heißt: ich soll jedem Button einen Eigenen GroupIndex geben?
also jedem eine eigene Zahl (button1 eine 1 und Button 64 die Zahl 64)

Jelly 21. Jun 2007 14:43

Re: SpeedButton down funktioniert nicht richtig
 
Wenn die Buttons unabhängig voneinander arbeiten sollen, ja.

Reyam 21. Jun 2007 15:06

Re: SpeedButton down funktioniert nicht richtig
 
Aber wenn ich nun direkt nach der Erstellung der SpeedButtons den GroupIndex mit

Delphi-Quellcode:
Nummern[i,j].GroupIndex := i*j;
auf jeden Button zuweise und dann immer nur 'Down' ändere, dann funktioniert das auch noch nicht!
Selbst wenn ich den GroupIndex wieder auf 0 und bei einem neuen Klick wieder die zahl zuweise, klappt das auch noch nicht :(

thkerkmann 21. Jun 2007 15:30

Re: SpeedButton down funktioniert nicht richtig
 
Hi,

willst Du beim Drücken auf den 4ten Button die anderen wieder ungedrückt haben, oder direkt beim dritten ?

Der Groupindex ist dafür nicht geeignet das zu realisieren.
Du musst das in deiner Liste der gedrückten Buttons verwalten. Das ist viel einfacher.

Gruss

Reyam 21. Jun 2007 15:38

Re: SpeedButton down funktioniert nicht richtig
 
Also ich wollte eigendlich, dass man nach dem dritten SpeedButton nichts mehr drücken kann, um dann mit einem normalen Button alles wieder ungedrückt zu machen

Reyam 21. Jun 2007 16:23

Re: SpeedButton down funktioniert nicht richtig
 
Zitat:

Zitat von thkerkmann
Der Groupindex ist dafür nicht geeignet das zu realisieren.
Du musst das in deiner Liste der gedrückten Buttons verwalten. Das ist viel einfacher.

Wie genau soll ich das machen? So richtig verstehe ich das noch nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:03 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