Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Prism TButton1-X gleiche Funktionalität (https://www.delphipraxis.net/91871-tbutton1-x-gleiche-funktionalitaet.html)

Andi1985 11. Mai 2007 08:29


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;

ibp 11. Mai 2007 08:46

Re: TButton1-X gleiche Funktionalität
 
herzlich willkommen....

Delphi-Quellcode:
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;
und diese prozedur weist du im onclick-ereignis jedem der buttons zu.

Tormentor32 11. Mai 2007 08:47

Re: TButton1-X gleiche Funktionalität
 
Über den Parameter Sender, kannst du auf den jeweiligen Button zugreifen, das heißt du schreibst

Delphi-Quellcode:
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;
Das musst du jetzt nur noch mit jedem Button verlinken

edit: Zwei Dumme ein Gedanke :stupid: :wink: aber du warst schneller :mrgreen:

SaFu 11. Mai 2007 08:50

Re: TButton1-X gleiche Funktionalität
 
oder du schreibst ne eigene Procedure

Delphi-Quellcode:
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;
und fügst sie in jedem button ein

Delphi-Quellcode:

procedure TForm8.Button1......50(Sender: TObject);
begin
 ueberall
end;
Gruss sascha

SaFu 11. Mai 2007 08:52

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;

Robert Marquardt 11. Mai 2007 08:55

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:
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;
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.
Delphi-Quellcode:
procedure TForm8.Button1Click(Sender: TObject);
begin
  with Sender as TButton do
  begin
    Tag := Tag + 1;
    Caption := IntToStr(Tag);
  end;
end;
Jetzt mal ohne das "< 9" zu beruecksichtigen.

Andi1985 11. Mai 2007 09:01

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...

SaFu 11. Mai 2007 09:05

Re: TButton1-X gleiche Funktionalität
 
japp :lol:

ibp 11. Mai 2007 09:08

Re: TButton1-X gleiche Funktionalität
 
nein, du musst den 50 buttons im onclick-ereignis die eine prozedur angeben!

Robert Marquardt 11. Mai 2007 09:13

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 08:29 Uhr.
Seite 1 von 2  1 2      

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