Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Buttons ansprechen (https://www.delphipraxis.net/2684-buttons-ansprechen.html)

Haegar 2. Feb 2003 15:46


Buttons ansprechen
 
ich hab an die 10 buttons (btn_1....btn_10) auf mein formular gelegt.
kann ich dir irgendwie mit nem array verbinden oder so?
ich hatte mal was, da hab ich radiobuttons als array definiert, aber diese wurden erst zur laufzeit erzeugt.
und die buttons jetzt, sind ja schon in der entwicklungsumgebung fest an ihrer position! und ich wollte nicht folgendes schreiben:
Delphi-Quellcode:
if btn_1.click then...
if btn_2.click then...  //bis button 10
if btn_10.click then...
kann man das nicht irgendwie kürzer schreiben mit ner schleife?
Delphi-Quellcode:
for i:=1 to 10 do
 begin
  ?????
 end;
ach ja, alle buttons haben die selbe ereignisbehandlungsroutine, und er soll eben rausfinden welcher nu grad gedrückt wird

ciao haegar

MadMason 2. Feb 2003 16:02

rausfinden welcher button gedrückt wurde kanst du über die Sender variable, die bei jedem ereignis definiert ist.
sie zeigt auf das auslösende objekt.

jbg 2. Feb 2003 16:03

Du kannst entweder FindComponent direkt nutzen, oder du baust mit Hilfe dieser Funktion ein Array auf, dass den Zugriff dann etwas beschleunigt und den Code leichter lesbar macht.
Delphi-Quellcode:
private
  Buttons: array of Button;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  Btn: TButton;
begin
 // Achtung: Buttons[0] entspricht danach Btn_1
  i := 1;
  repeat
    Btn := Form1.FindComponent('btn_' + IntToStr(i));
    if Btn <> nil then
    begin
      SetLength(Buttons, Length(Button) + 1);
      Buttons[i - 1] := Btn;
    end;
  until Btn = nil;
end;

procedure TForm1.Btn_1Click(Sender: TObject);
var i: Integer;
begin
  for i := 0 to High(Buttons) do // High(dynA) = Length(dynA) - 1
    Buttons[i].Enabled := False;
end;

Christian Seehase 2. Feb 2003 16:17

Moin Haegar,

da die Button ja nicht dynamisch erzeugt werden ginge auch folgende Variante:

Du markierst alle betroffenen Button (den ersten einfach anklicken, die restlichen mit gedrückter Shift Taste).

Dann gehst Du im Objektinspektor auf den Reiter Ereignisse und schreibst dort unter OnClick den Namen für die Prozedur rein, den Du für die OnClick Prozdur haben willst, und Enter. (oder Du machst einen Doppelclick auf das Feld wenn der Name generiert werden soll).

In der OnClick Routine kannst Du jetzt folgendes schreiben:

Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject);
begin
  // Annahme:
  // Der Name lautet btn_xx, wobei xx eine maximal 2 stellige Zahl ist
  // (die 5 weist auf das erste x, die 2 weil es maximal 2 Stellen sein dürfen)
  if (sender is TButton) then
  begin
    case StrToInt(copy(TButton(Sender).Name,5,2)) of
      1 :
        begin
          // Was bei btn_1 passieren soll
        end;
      // ....
      10 :
        begin
          // Was bei btn_10 passieren soll
        end;
    end;
  end;
end;

Haegar 2. Feb 2003 17:05

jo danke klappt primstens.
gibts ne möglichkeit, ein integer-wert(0..9) in ein Char zu wandeln??
hab nix gefunden, wie ich das machen kann.
(der Char-wert entspricht den Werten in der Case of Auswahl)!
also bei case...of 0 -> CHAR-variable=0
7 -> CHAR-variable=7 und so weiter

Alexander 2. Feb 2003 17:15

oh man
da hatten wir doch neulich mal einen recht ausführilichen Thread drüber.
Keine Ahnung was bei raus gekommen ist, aber du kannst zb so machen:
(ist zwar nicht die feinste möglichkeit, aber eine :mrgreen: ):
Code:
Char(IntToStr(i))

Daniel B 2. Feb 2003 17:15

Dann siehe OH zu "chr" und "PChar".

Grüsse, Daniel :hi:

Christian Seehase 2. Feb 2003 19:06

Moin Haegar,

wenn's wirklich nur die Werte von 0 bis 9 betrifft kannst Du auch

Delphi-Quellcode:
chr(Byte(iVariable + 48));
nehmen.

(48 = ASCII Code von '0')

nailor 2. Feb 2003 19:33

Oder man kann bei den Buttons die Tag-Property einstellen, und dann die abfragen...

City Light 2. Feb 2003 19:36

Delphi-Quellcode:
{
Diese Procedure wird bei jedem Klick auf einen Button ausgeführt.
Als Form.Caption wird der Name des geklickten Buttons angezeigt.

Läßt sich z.B. gut verwenden um eine Vielzahl von Anweisungen
ohne onClick-Procedur für jeden Button nutzen zu müssen.
}


private
    procedure DoActiveControl(Sender: TObject);


procedure TForm1.DoActiveControl(Sender: TObject);
begin
  if ActiveControl is TButton then
     caption:=(ActiveControl as TButton).Name;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Screen.OnActiveControlChange := DoActiveControl;
end;


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