Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:50 Uhr.
Seite 2 von 3     12 3      

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