Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Button mit Variable ansteuern (https://www.delphipraxis.net/156548-button-mit-variable-ansteuern.html)

rob60 6. Dez 2010 18:27

Button mit Variable ansteuern
 
Hi bin mir sicher dass so was ändliches schon gefragt wurde aber ich find trozdem nichts also
meine Frage:


for i := 1 to 20 do
begin
tbutton[i].caption := '';

end;


So das problem wie kann ich klarmachen dass ich button1.caption , button2.caption ... ''
zuweisen will dass funktioniert nämlich nicht, wen wunderts ;-) ?

s.h.a.r.k 6. Dez 2010 18:27

AW: Button mit Variable ansteuern
 
Hier im Forum suchenFindComponent ist das Stichwort.

DeddyH 6. Dez 2010 18:32

AW: Button mit Variable ansteuern
 
Oder selbst verwalten (Array, TObjectList, TComponentList, ...)

rob60 6. Dez 2010 18:39

AW: Button mit Variable ansteuern
 
danke für die superschnelle antwort aber mein turbodelphi scheint das wort nicht zu kennen "undefinierter bezeichner Findcomponent"

gibts das erst später?

DeddyH 6. Dez 2010 18:40

AW: Button mit Variable ansteuern
 
Ist die Unit Classes eingebunden?

rob60 6. Dez 2010 18:42

AW: Button mit Variable ansteuern
 
jop sie is eingebunden

DeddyH 6. Dez 2010 18:45

AW: Button mit Variable ansteuern
 
Komisch. Ich weiß jetzt nicht, seit wann es die Funktion gibt, aber so neu wird sie nicht sein. Hast Du Dich auch nicht vertippt?

s.h.a.r.k 6. Dez 2010 18:48

AW: Button mit Variable ansteuern
 
Also
Delphi-Quellcode:
Form1.FindComponent('xyz')
müsste schon gehen!? :gruebel:

DeddyH 6. Dez 2010 18:50

AW: Button mit Variable ansteuern
 
Wenn das in einer Methode von TForm1 steht, dann aber lieber Self nehmen. Wobei die Array-/Listenlösung eh performanter ist, zumindest, wenn die Liste öfter durchlaufen werden soll.

rob60 6. Dez 2010 18:51

AW: Button mit Variable ansteuern
 
Dass nicht aber villeicht falsche syntax stimmt das so tbutton(findcomponent('button1').caption := '');

implementation 6. Dez 2010 18:56

AW: Button mit Variable ansteuern
 
Zitat:

Zitat von rob60 (Beitrag 1066671)
Dass nicht aber villeicht falsche syntax stimmt das so tbutton(findcomponent('button1').caption := '');

Nope,
Delphi-Quellcode:
TButton(FindComponent('button1')).Caption := '';
.

Quellcode schließt man übrigens in [delphi]-Tags ein :wink:

DeddyH 6. Dez 2010 18:56

AW: Button mit Variable ansteuern
 
Delphi-Quellcode:
var Button: TButton;
...
Button := FindComponent('Button1') as TButton;
if Assigned(Button) then
  Button.Caption := '';

s.h.a.r.k 6. Dez 2010 18:56

AW: Button mit Variable ansteuern
 
Naja, nach dem ersten Aufruf legt FindComponent (von TComponent) eine interne Liste der Controls an:

Delphi-Quellcode:
{ Fill the sorted list (and sort it) }
FSortedComponents := TList.Create;
FSortedComponents.Count := FComponents.Count;
for I := 0 to FComponents.Count - 1 do
  FSortedComponents[I] := FComponents[I];

FSortedComponents.SortList(
  function(Item1, Item2: Pointer): Integer
  begin
    Result := CompareText(TComponent(Item1).Name, TComponent(Item2).Name);
  end);
Hab jetzt nur nicht näher geschaut, ob diese Liste beim Hinzufügen und Löschen von Komponenten auch geupdated wird -- aber ich gehe mal stark davon aus. Von daher sollte das von der Performance her auch noch okay sein.

BTW: Darf ich SourceCode aus der VCL hier einfach posten?! -> Copyright!

Bummi 6. Dez 2010 19:00

AW: Button mit Variable ansteuern
 
Delphi-Quellcode:
TButton(findcomponent('button' + IntToStr(i))).caption := IntToStr(i);

DeddyH 6. Dez 2010 19:01

AW: Button mit Variable ansteuern
 
Tatsächlich, das sieht hier unter Delphi 2007 zwar etwas anders aus, aber diese Liste wird auch bei mir erzeugt. Das war IIRC früher aber mal anders, da wurde bei jedem Aufruf das komplette Components-Array durchlaufen.

[edit] @implementation, Bummi: was ist, wenn die Komponente nicht gefunden wird? Dann sollte es beim Zugriff auf Caption knallen. [/edit]

rob60 6. Dez 2010 19:08

AW: Button mit Variable ansteuern
 
killllllll mich ,danke

Bummi 6. Dez 2010 19:08

AW: Button mit Variable ansteuern
 
@DeddyH
man kann das schon kapseln, Du möchtest sowas

Delphi-Quellcode:
var
B:TButton;
begin
 b := TButton(FindComponent('Button' + IntToStr(i)));
 if Assigned(B) then
    begin
       //was auch immer
    end;
aber wenn ich weiß was ich tue spare ich mir das mitunter ...

DeddyH 6. Dez 2010 19:11

AW: Button mit Variable ansteuern
 
Das entspricht jetzt ziemlich meinem eigenen Code aus #12 ;) Und ich denke mir immer: sicher ist sicher, die eine Assigned-Abfrage tut keinem weh, macht das Programm aber stabiler.

rob60 6. Dez 2010 19:25

AW: Button mit Variable ansteuern
 
Ach noch ne kleine info ich habs jetzt findcomponent darf ich ja nur in einer procedur der form1 benutzen ich hab aber meine eigene proc muss die jetzt halt ersetzen

Sir Rufo 6. Dez 2010 19:44

AW: Button mit Variable ansteuern
 
Zitat:

Zitat von rob60 (Beitrag 1066685)
Ach noch ne kleine info ich habs jetzt findcomponent darf ich ja nur in einer procedur der form1 benutzen ich hab aber meine eigene proc muss die jetzt halt ersetzen

Das stimmt zwar so nicht ... aber du hast recht, dass man FindComponent nicht einfach so aufrufen kann.

Denn es handelt sich hierbei um eine Methode von TForm
Delphi-Quellcode:
procedure MachWas( Form : TForm );
  begin
    Form.FindComponent( ... );
  end;

// Aufruf z.B. so

procedure TForm1.EineMethode;
  begin
    MachWas( Self ); // Self ist die Referenz auf die aktuelle Instanz
  end;

s.h.a.r.k 6. Dez 2010 20:18

AW: Button mit Variable ansteuern
 
Zitat:

Zitat von rob60 (Beitrag 1066685)
Ach noch ne kleine info ich habs jetzt findcomponent darf ich ja nur in einer procedur der form1 benutzen ich hab aber meine eigene proc muss die jetzt halt ersetzen

Ist jetzt nicht böse gemeint, daher auch nicht falsch verstehen, aber Punkt und Komma gibt es nicht ohne Grund. Ebenso haben Satzzeichen auch einen gewissen Zweck. Du würdest uns das Leben durchaus erleichtern :thumb: Danke.

Bummi 6. Dez 2010 20:30

AW: Button mit Variable ansteuern
 
oder universeller:

Delphi-Quellcode:
Function MyFindComponent( Component : TComponent ):TComponent;

mkinzler 6. Dez 2010 21:53

AW: Button mit Variable ansteuern
 
Nein

Delphi-Quellcode:
(findcomponent('button1') as TButton).caption := '';


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 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