AGB  ·  Datenschutz  ·  Impressum  







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

Buttons ansprechen in einer Schleife

Ein Thema von markon · begonnen am 7. Okt 2003 · letzter Beitrag vom 8. Okt 2003
Antwort Antwort
Seite 1 von 2  1 2      
markon

Registriert seit: 12. Sep 2003
229 Beiträge
 
#1

Buttons ansprechen in einer Schleife

  Alt 7. Okt 2003, 17:49
hallo.
habe 10 normale buttons, mit den namen bt1,bt2,.. bis bt10.
Delphi-Quellcode:
for i:=1 to 10 do
  bt1.caption:= inttostr(i);
der code soll nur das problem darstellen.
ich möchte in jdem durchlauf die button.caption ändern lassen.

dachte mir so kann man es realisieren:
Delphi-Quellcode:
for i:=1 to 10 do
  bt[i].caption:= inttostr(i);
aber so funzt das nicht. da "bt" ein array oder ähnliches sein müßte.

gibt es eine möglichkeit um mein problem zu lösen?

für hilfe bin ich sehr dankbar
gruß
marcus
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Buttons ansprechen in einer Schleife

  Alt 7. Okt 2003, 18:06
Moin Marcus,

such' hier mal nach Hier im Forum suchenFindComponent.
Da müsstest Du einige Beispiele bekommen.
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
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#3

Re: Buttons ansprechen in einer Schleife

  Alt 7. Okt 2003, 18:08
Jupp, gibt es.
Entweder alle Buttons zur Laufzeit in einem Array erstellen oder aber mit einer For-SChleife mit Componetcount alle Komponenten durchgehen
also so im Prinzip:
Delphi-Quellcode:
var
  i: Integer;
begin
  for i := Application.ComponentCount - 1 downto 0 do
  begin
    if Application.Components[i].Name = 'bt' + IntToStr(i)) then
      Application.Components[i].Caption := 'was auch immer';
  end;
end;
Sonst auch noch mal FindComponent ankucken, dmait geht das wahrscheinlich sogar schneller..
Alexander
  Mit Zitat antworten Zitat
markon

Registriert seit: 12. Sep 2003
229 Beiträge
 
#4

Re: Buttons ansprechen in einer Schleife

  Alt 8. Okt 2003, 10:55
danke erstmal eurer hilfe.
Delphi-Quellcode:
  for i := Application.ComponentCount - 1 downto 0 do
    if Application.Components[i].Name = 'bt' + IntToStr(i) then ...
funktioniert.
es werden alle objekte aufgelistet.

aber:
Application.Components[i].Caption := 'was auch immer'; funzt leider nicht.
man kann so keinen objekt etwas zuweisen. das caption oder egal was da steht funzt nicht.

jetzt mache ich den ganzen laden dynamisch. d.h. es werden nur soviele z.bsp. buttons zur laufzeit angelegt wie benötigt.

da ist schon meine nächste frage:
auch wenn man objekte zur laufzeit anlegen möchte, müssen diese ja deklariert werden.
aber wenn ich jetzt nicht wieß wieviel es werden, was soll ich da dann machen? etwa auf verdacht mal so 100 buttons deklarieren!?!?

hat jemand ne idee?

gruß
marcus
  Mit Zitat antworten Zitat
Honie

Registriert seit: 27. Sep 2003
Ort: Bielefeld
39 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Buttons ansprechen in einer Schleife

  Alt 8. Okt 2003, 12:54
Delphi-Quellcode:

Application.Components[i].Caption := 'was auch immer';
kann ja auch gar nicht funktionieren, da Caption keine Eigenschaft von TCompnent ist.
Dafür musst Du vorher den Typ casten.

Geht in etwa so:

Delphi-Quellcode:
if Application.Components[i] is TButton then
  (Application.Components[i] as TButton).Caption := 'was auch immer';
Zitat:
auch wenn man objekte zur laufzeit anlegen möchte, müssen diese ja deklariert werden.
aber wenn ich jetzt nicht wieß wieviel es werden, was soll ich da dann machen? etwa auf verdacht mal so 100 buttons deklarieren!?!?
Du brauchst doch nur eine Instanz eines TButtons. Nachdem die created wurde, kannst Du die gleiche Instanz für
den nächsten Button nehmen.

Bsp:

Delphi-Quellcode:
var
  aButton: TButton

begin
  aButton := TButton.create(self);
  with aButton do begin
    caption := '1. Button';
    top := 20;
  end;
  aButton := TButton.create(self);
  with aButton do begin
    caption := '2. Button';
    top := 50;
  end;
end;
oder sogar ganz auf die Instanz verzichten:

Delphi-Quellcode:
begin
  with TButton.create(self) do begin
    caption := '1. Button';
    top := 20;
  end;
  with TButton.create(self) do begin
    caption := '2. Button';
    top := 50;
  end;
end;
wobei diese Proceduren Methoden des Formulars sein sollten, damit self (als Owner) einen Sinn macht
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Buttons ansprechen in einer Schleife

  Alt 8. Okt 2003, 13:14
Hallo,
eigentlich darf es mit Application.Components gar nicht funktionieren. Da hier nur die Formulare
einer Anwendung enthalten sind.
Wenn man auf Komponenten auf einem Formular zugreifen möchten muss es eigentlich so gehen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  iCnt : Integer;
begin
  ListBox1.Clear;
  For iCnt:=ComponentCount - 1 downto 0 do
    ListBox1.Items.Add(Components[iCnt].Name);
end;
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#7

Re: Buttons ansprechen in einer Schleife

  Alt 8. Okt 2003, 14:44
In Application.Components sind alle alle Komponenten gelistet, meine ich zumindest.
Aber das mit dem Caption fällt mir jetzt auch auf
Aber wie gesagt war nciht getestet...
Man muss natürlich noch -wie jetzt uach schon gesagt - den Typ festlegen bzw. casten
Alexander
  Mit Zitat antworten Zitat
markon

Registriert seit: 12. Sep 2003
229 Beiträge
 
#8

Re: Buttons ansprechen in einer Schleife

  Alt 8. Okt 2003, 15:02
dankeuch. habs rausbekommen. button's werden dynamisch angelegt. egal wieviele ich benötige.

wie kann ich jetzt erkennen welcher der angelgten button gedrückt wurden??

Delphi-Quellcode:
TButton.Create(self).Name := 'bt' + IntToStr(position);
            with TButton(FindComponent('bt' + IntToStr(position))) do
            begin
              caption := DM_Tabelle.adoquery1.FieldByName('Name').AsString;
              Left := 16;
              Top := position * 27 + 30;
              Parent := panel2;

              onclick(position);
            end;
es soll praktisch die zahl wiedergegeben werden mit der der button erstellt wurde. das ist in dem fall die variable position. wenn der button gedrückt wurde so ist das ja das onclick ereignis. aber finde keine lösung.
onclick soll lediglich die position wiedergeben.

sorry das ich soviel frage,aber ich bin nah an der lösung. kann mir jemand weiterhelfen.
thx
marcus
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Buttons ansprechen in einer Schleife

  Alt 8. Okt 2003, 15:08
Moin markon,

das könntest Du so machen:

Delphi-Quellcode:
// Methode im Formular hinzufügen
procedure TForm1.ButtonClick(Sender: TObject);
begin
  ShowMessage(IntToStr((Sender as TButton).Tag));
end;

  with TButton.Create(self) do
  begin
    Name := 'bt' + IntToStr(position);
    caption := DM_Tabelle.adoquery1.FieldByName('Name').AsString;
    Left := 16;
    Top := position * 27 + 30;
    Parent := panel2;
    Tag := position;
    OnClick := ButtonClick;
  end;
ungetestet sollte aber so gehen.
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
markon

Registriert seit: 12. Sep 2003
229 Beiträge
 
#10

Re: Buttons ansprechen in einer Schleife

  Alt 8. Okt 2003, 15:21
@christian seehase

DANK dir vielmals.

die lösung, mit den wert in die eigenschaft tag zu schreiben und von da aus wieder zurückzulesen ist einfach spitze.

danke

und bye
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:49 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