![]() |
TButton1-X gleiche Funktionalität
Hallo,
ich bin noch ein ziemlicher Anfänger in Delphi, deswegen frag ich bei meinem folgenden Problem hier nach: Ich habe eine Procedure für einen Button geschrieben(siehe unten), dies ist noch nichts Tolles, aber nun besitzt mein Program geschlage 50 Buttons davon welche die gleiche Funktionaliät dieses Buttons übernehmen sollen. Wie man sehen kann zählt der Button beim Klick einen Zähler hoch, nun soll dies aber bei allen 50 Buttons geschehen, aber nur wenn man auf den jeweiligen Button klickt. Vielen Dank für eventuelle Hilfe, mfg Mogtar
Delphi-Quellcode:
procedure TForm8.Button1Click(Sender: TObject);
begin if (Button1.Caption <> '') then begin if (StrToInt(Button1.Caption) < 9) OR (Button1.Caption = '') then begin Button1.Caption := IntToStr(StrToInt(Button1.Caption) + 1); end else begin Button1.Caption := ''; end; end else begin Button1.Caption := '0'; end; end; |
Re: TButton1-X gleiche Funktionalität
herzlich willkommen....
Delphi-Quellcode:
und diese prozedur weist du im onclick-ereignis jedem der buttons zu.
procedure TForm8.ButtonClick(Sender: TObject);
var aval:integer; begin if sender is tbutton then begin aval:=0; if (Sender as Tbutton).Caption <> '' then begin aval:=StrToInt((Sender as Tbutton).Caption); if aval < 9 then inc(aval); end (Sender as Tbutton).Caption:=inttostr(aval); end; end; |
Re: TButton1-X gleiche Funktionalität
Über den Parameter Sender, kannst du auf den jeweiligen Button zugreifen, das heißt du schreibst
Delphi-Quellcode:
Das musst du jetzt nur noch mit jedem Button verlinken
procedure TForm8.Button1Click(Sender: TObject);
begin if (Sender is TButton) then begin if (TButton(Sender).Caption <> '') then begin if (StrToInt(TButton(Sender).Caption) < 9) OR (TButton(Sender).Caption = '') then begin TButton(Sender).Caption := IntToStr(StrToInt(TButton(Sender).Caption) + 1); end else begin TButton(Sender).Caption := ''; end; end else begin TButton(Sender).Caption := '0'; end; end; end; edit: Zwei Dumme ein Gedanke :stupid: :wink: aber du warst schneller :mrgreen: |
Re: TButton1-X gleiche Funktionalität
oder du schreibst ne eigene Procedure
Delphi-Quellcode:
und fügst sie in jedem button ein
procedure TForm8.ueberall(Sender: TObject);
begin if (Sender is TButton) then begin if (TButton(Sender).Caption <> '') then begin if (StrToInt(TButton(Sender).Caption) < 9) OR (TButton(Sender).Caption = '') then begin TButton(Sender).Caption := IntToStr(StrToInt(TButton(Sender).Caption) + 1); end else begin TButton(Sender).Caption := ''; end; end else begin TButton(Sender).Caption := '0'; end; end; end;
Delphi-Quellcode:
Gruss saschaprocedure TForm8.Button1......50(Sender: TObject); begin ueberall end; |
Re: TButton1-X gleiche Funktionalität
sorry
so mit deiner Procedur
Delphi-Quellcode:
procedure TForm8.ueberall(Sender: TObject);
begin if (Button1.Caption <> '') then begin if (StrToInt(Button1.Caption) < 9) OR (Button1.Caption = '') then begin Button1.Caption := IntToStr(StrToInt(Button1.Caption) + 1); end else begin Button1.Caption := ''; end; end else begin Button1.Caption := '0'; end; end; |
Re: TButton1-X gleiche Funktionalität
Dieser Event wird einfach allen Buttons zugewiesen.
Ich habe die Funktion etwas vereinfacht. Die Logik ist aber nicht ganz klar. Wie das "< 9" funktionieren soll ist unverstaendlich.
Delphi-Quellcode:
Besser ist es den Wert nicht in der Caption selbst aufzuheben, sondern die Tag-Property der Komponente zu verwenden. Die Caption sollte immer nur zur Darstellung verwendet werden.
procedure TForm8.Button1Click(Sender: TObject);
begin with Sender as TButton do if Caption <> '' then begin if StrToInt(Caption) < 9 then Caption := IntToStr(StrToInt(Caption) + 1) else Caption := ''; end else Caption := '0'; end;
Delphi-Quellcode:
Jetzt mal ohne das "< 9" zu beruecksichtigen.
procedure TForm8.Button1Click(Sender: TObject);
begin with Sender as TButton do begin Tag := Tag + 1; Caption := IntToStr(Tag); end; end; |
Re: TButton1-X gleiche Funktionalität
danke für die vielen Antworten, aber verstehe ich das jetzt richtig, das ich meine Procedure zwar nicht 50 mal schreiben
muss aber trotzdem 50 mal die OnClick events der Buttons generiere und da nun meine Funktion aufrufe? Ich dachte eigendlich das würde irgendwie sinvoller gehn... |
Re: TButton1-X gleiche Funktionalität
japp :lol:
|
Re: TButton1-X gleiche Funktionalität
nein, du musst den 50 buttons im onclick-ereignis die eine prozedur angeben!
|
Re: TButton1-X gleiche Funktionalität
Nein. Du weist allen Buttons diese eine Event-Methode zu. Du hast ja Button1Click bereits. Im Objektinspektor der IDE waehlst du jetzt erst mal den Namen Button1Click im OnClick-Event aus und nennst ihn um. Das aendert freundlicherweise den Namen ueberall in der Source. Danach markierst du alle anderen Buttons. Beim OnClick-Eintrag im Objektinspektor kannst du nun den Dropdown benutzen und den neuen Namen direkt auswaehlen. Damit haben dann alle Buttons diesen Event zugewiesen bekommen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:28 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