![]() |
OnClick ereigniss für ganz viele buttons??
So Ich bins noch mal.
ICh stehe vor einem schreibproblem. ICh hab auf einer form 16 Buttons. Wenn jemand auf einen button klickt dann wecheselt der die fabe zwischen 'cllime' und 'clred'. Klappt auch alles prima. Außerdem ändert er einen Zustand in einem array. Das array ist 256 blöcke groß. oben in der Form ist ein SpinEdit, welches werte zwischen 1 und 16 annehmen kann.
Delphi-Quellcode:
Keyboardschalternummer ist der Spinedit
procedure TKeyboardfenster.MGKeyboardbutton10Click(Sender: TObject);
begin Keyboardschalternummer := (KeyboardNummer.Value - 1) * 16 + 10; If MGAdresse[(KeyboardNummer.Value - 1) * 16 + Keyboardschalternummer] = false then begin; MGAdresse[(KeyboardNummer.Value - 1) * 16 + Keyboardschalternummer] := true; MGKeyboardbutton10.Color:=clred; end else if MGAdresse[(KeyboardNummer.Value - 1) * 16 + Keyboardschalternummer] = true then begin MGAdresse[(KeyboardNummer.Value - 1) * 16 + Keyboardschalternummer] := false; MGKeyboardbutton10.Color:=clLime; end end; MGadresse ist das Array Keyboardbutton10 ist der Button Keyboardschalternummer ist vom type integer. wenn ich jetzt bei allen 16 buttons ein ONclick event schreiben müsste und jeweis ein paar werte ändern müsste dann tun mit die finger weh, und die unit wird unübersichtlich. wie kann ich ein ONclick ereigniss für alle buttons machen, indem sich je nachdem welcher button gedrückt wurde ein paar parameter ändern??? Die parameter wären : (MGkeyboardButton zwischen 1 und 16) eine normale variable. Edit:// Ok stell ich die frage mal anders. wenn ich 2 buttons habe, kann ich die ja auf die selbe procedure zugreifen lassen. (onclick-procedure). ICh will aber, dass sie auf die selbe Procedure zugreifen und dabei ihren namen nennen. Die procedure soll bei button2 ein label mir 'button2' füllen und bei button1 das selbe label mir 'button1' füllen MfG snow |
Re: OnClick ereigniss für ganz viele buttons??
Ruf doch aus dem onClick eine Funktion auf, die einen TButton als Parameter erwartet.
|
Re: OnClick ereigniss für ganz viele buttons??
Muss ich trozdem für jeden button eine eigene onclick procedure erstellen, die dann die funktion aufruft???
Oder kann ich auch die funktion als ONclick aufrufen und in der funktion irgendwie herausfinden welcher button geclickt hat?? MfG snow |
Re: OnClick ereigniss für ganz viele buttons??
Schreib dir eine neue Methode:
Delphi-Quellcode:
und ruf diese in den Ereignisprozeduren der Schaltflächen auf. Dann kannst du jeder Schaltfläche in der Eigenschaft Tag einen eindeutigen Wert zuweisen, den du dann in DoSomething auswertest:
procedure Tform1.DoSomething(Sender: TObject);
Delphi-Quellcode:
var
Tag: Integer; begin Tag := (Sender as TButton).Tag; case Tag of 0: ...; 1: ...; end; |
Re: OnClick ereigniss für ganz viele buttons??
Nein, du kannst den Sender auswerten. Einfach im OI die selbe Prozedur eintragen und dann sieht das z.B. so aus:
Delphi-Quellcode:
procedure TForm1.allgemein(Sender: TObject);
begin Showmessage((Sender as TComponent).Name); end; |
Re: OnClick ereigniss für ganz viele buttons??
Delphi-Quellcode:
Gruß Jürgen
procedure TKeyboardfenster.MGKeyboardbutton10Click(Sender: TObject);
var btnName: string; i0: integer; begin if (Sender is TButton) then begin btnName := (Sender as TButton).Name; // jetzt kannst Du z.B. das letzte Zeichen als Zahl herausholen // oder wie auch immer Du die Buttons unterscheiden willst; // bei Bedarf ist auch Tag geeignet: i0 := (Sender as TButton).Tag; case i0 of 1: // usw. end; end; end; [OT]Drei ähnliche Beiträge fast gleichzeitig sollten Dir die Richtung zeigen. |
Re: OnClick ereigniss für ganz viele buttons??
hi
du kannst eine onKlick-Prozedur erstellen und dann im OI für alle buttons dieses onKlick-Ereignis einstellen. egal welchen button man klickt, es wird immer diese prozedur aufgerufen... und rate mal was der parameter Sender bringt? genau, hier steht das Objekt der dieses event ausgelöst hat, also der button auf den geklickt wurde. blöd nur das der von typ TObject ist. aber du kannst ganz einfach casten:
Delphi-Quellcode:
das verändert zB die caption des geklickten buttons. alternativ und ohne zusätzliche variable geht auch:
procedure TKeyboardfenster.MGKeyboardbuttonClick(Sender: TObject);
var GecklickterButton: TButton; begin if (Sender is TButton) then begin GecklickterButton := (Sender as TButton); GecklickterButton.caption := 'Ich wurde geklickt!'; end; end;
Delphi-Quellcode:
außerdem kannst du jedem button einen TAG geben, dh du schreibst (am besten im IO) in deinen ersten Button1.tag := 1 und in den zweiten 2 usw dann kannst ganz leicht schauen welcher button geklickt wurde:
procedure TKeyboardfenster.MGKeyboardbuttonClick(Sender: TObject);
begin if (Sender is TButton) then (Sender as TButton).caption := 'Ich auch...'; end;
Delphi-Quellcode:
if GecklickterButton.tag = 5 then // 5.button wurde angeklickt
|
Re: OnClick ereigniss für ganz viele buttons??
Danke an alle!
Mit pilic's code konnte ich ein label beschreiben. Entweder mit 'Button1' oder 'Button2' jetzt werd ich das ganze in meine Keyboard-unit einbauen. Sollte klappen. Werde jedem Button eine zahl zuweisen und dann sollte es klappen ich meld mich wenn ich erfolg habe. MfG snow |
Re: OnClick ereigniss für ganz viele buttons??
Delphi-Quellcode:
damit hat es geklappt!
procedure TKeyboardfenster.MGKeyboardbutton1Click(Sender: TObject);
var buttonclickedname : string; lokal : integer; begin Buttonclickedname:=(Sender as TComponent).Name; begin for lokal := 1 to 16 do begin if Buttonclickedname = 'MGKeyboardbutton'+(inttostr(lokal)) then Keyboardschalternummer := lokal; end; end; Keyboardschalternummer := (KeyboardNummer.Value - 1) * 16 + Keyboardschalternummer; If MGAdresse[(KeyboardNummer.Value - 1) * 16 + Keyboardschalternummer] = false then begin; MGAdresse[(KeyboardNummer.Value - 1) * 16 + Keyboardschalternummer] := true; TLabel(Sender).Color:=clred; end else if MGAdresse[(KeyboardNummer.Value - 1) * 16 + Keyboardschalternummer] = true then begin MGAdresse[(KeyboardNummer.Value - 1) * 16 + Keyboardschalternummer] := false; TLabel(Sender).Color:=cllime; end end; MfG snow |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 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