![]() |
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:
kann man das nicht irgendwie kürzer schreiben mit ner schleife?
if btn_1.click then...
if btn_2.click then... //bis button 10 if btn_10.click then...
Delphi-Quellcode:
ach ja, alle buttons haben die selbe ereignisbehandlungsroutine, und er soll eben rausfinden welcher nu grad gedrückt wird
for i:=1 to 10 do
begin ????? end; ciao haegar |
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. |
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; |
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; |
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 |
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))
|
Dann siehe OH zu "chr" und "PChar".
Grüsse, Daniel :hi: |
Moin Haegar,
wenn's wirklich nur die Werte von 0 bis 9 betrifft kannst Du auch
Delphi-Quellcode:
nehmen.
chr(Byte(iVariable + 48));
(48 = ASCII Code von '0') |
Oder man kann bei den Buttons die Tag-Property einstellen, und dann die abfragen...
|
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 01:50 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