AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OnClick ereigniss für ganz viele buttons??

Ein Thema von snow · begonnen am 22. Sep 2007 · letzter Beitrag vom 22. Sep 2007
Antwort Antwort
snow

Registriert seit: 28. Jun 2007
277 Beiträge
 
#1

OnClick ereigniss für ganz viele buttons??

  Alt 22. Sep 2007, 09:49
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:
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;
Keyboardschalternummer ist der Spinedit
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
  Mit Zitat antworten Zitat
Benutzerbild von pilic
pilic

Registriert seit: 10. Aug 2006
Ort: Aschbach
131 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: OnClick ereigniss für ganz viele buttons??

  Alt 22. Sep 2007, 10:28
Ruf doch aus dem onClick eine Funktion auf, die einen TButton als Parameter erwartet.
  Mit Zitat antworten Zitat
snow

Registriert seit: 28. Jun 2007
277 Beiträge
 
#3

Re: OnClick ereigniss für ganz viele buttons??

  Alt 22. Sep 2007, 10:41
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: OnClick ereigniss für ganz viele buttons??

  Alt 22. Sep 2007, 10:48
Schreib dir eine neue Methode:
procedure Tform1.DoSomething(Sender: TObject); 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:
Delphi-Quellcode:
var
  Tag: Integer;
begin
  Tag := (Sender as TButton).Tag;
  case Tag of
    0: ...;
    1: ...;
  end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von pilic
pilic

Registriert seit: 10. Aug 2006
Ort: Aschbach
131 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: OnClick ereigniss für ganz viele buttons??

  Alt 22. Sep 2007, 10:48
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;
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#6

Re: OnClick ereigniss für ganz viele buttons??

  Alt 22. Sep 2007, 10:51
Delphi-Quellcode:
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;
Gruß Jürgen

[OT]Drei ähnliche Beiträge fast gleichzeitig sollten Dir die Richtung zeigen.
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#7

Re: OnClick ereigniss für ganz viele buttons??

  Alt 22. Sep 2007, 10:57
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:
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;
das verändert zB die caption des geklickten buttons. alternativ und ohne zusätzliche variable geht auch:
Delphi-Quellcode:
procedure TKeyboardfenster.MGKeyboardbuttonClick(Sender: TObject);
begin
  if (Sender is TButton) then
    (Sender as TButton).caption := 'Ich auch...';
end;
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:
if GecklickterButton.tag = 5 then // 5.button wurde angeklickt
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
snow

Registriert seit: 28. Jun 2007
277 Beiträge
 
#8

Re: OnClick ereigniss für ganz viele buttons??

  Alt 22. Sep 2007, 11:05
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
  Mit Zitat antworten Zitat
snow

Registriert seit: 28. Jun 2007
277 Beiträge
 
#9

Re: OnClick ereigniss für ganz viele buttons??

  Alt 22. Sep 2007, 11:57
Delphi-Quellcode:
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;
damit hat es geklappt!


MfG snow
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 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