AGB  ·  Datenschutz  ·  Impressum  







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

Buttons ansprechen

Ein Thema von Haegar · begonnen am 2. Feb 2003 · letzter Beitrag vom 2. Feb 2003
Antwort Antwort
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#1

Buttons ansprechen

  Alt 2. Feb 2003, 15:46
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:
if btn_1.click then...
if btn_2.click then... //bis button 10
if btn_10.click then...
kann man das nicht irgendwie kürzer schreiben mit ner schleife?
Delphi-Quellcode:
for i:=1 to 10 do
 begin
  ?????
 end;
ach ja, alle buttons haben die selbe ereignisbehandlungsroutine, und er soll eben rausfinden welcher nu grad gedrückt wird

ciao haegar
  Mit Zitat antworten Zitat
MadMason

Registriert seit: 9. Nov 2002
Ort: Altenburg
126 Beiträge
 
Delphi 2005 Architect
 
#2
  Alt 2. Feb 2003, 16:02
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.
Einstein ist tot
Newton ist tot
und mir ist auch schon ganz schlecht
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3
  Alt 2. Feb 2003, 16:03
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;
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.106 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 2. Feb 2003, 16:17
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;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#5
  Alt 2. Feb 2003, 17:05
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
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#6
  Alt 2. Feb 2003, 17:15
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 ):
Code:
Char(IntToStr(i))
Alexander
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#7
  Alt 2. Feb 2003, 17:15
Dann siehe OH zu "chr" und "PChar".

Grüsse, Daniel
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.106 Beiträge
 
Delphi 11 Alexandria
 
#8
  Alt 2. Feb 2003, 19:06
Moin Haegar,

wenn's wirklich nur die Werte von 0 bis 9 betrifft kannst Du auch

chr(Byte(iVariable + 48)); nehmen.

(48 = ASCII Code von '0')
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#9
  Alt 2. Feb 2003, 19:33
Oder man kann bei den Buttons die Tag-Property einstellen, und dann die abfragen...
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von City Light
City Light

Registriert seit: 17. Sep 2002
314 Beiträge
 
#10
  Alt 2. Feb 2003, 19:36
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;
Bis bald man liest sich
Tino
  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 23:46 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