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/)
-   -   Delphi Komponenten dynamisch aufrufen (https://www.delphipraxis.net/13030-komponenten-dynamisch-aufrufen.html)

Patrick 9. Dez 2003 17:25


Komponenten dynamisch aufrufen
 
Hallo, ich hätte da mal wieder eine Frage...
Wie kann ich Komponenten (TEdit, TButton) dynamisch aufrufen, sprich: Ich wähle eine Zahl und Delphi soll die Komponente mit dieser Zahl aufrufen...
(1 => Edit1.Text, 2 => Edit2.Text,...)
Ich könnte zwar "Case of" benutzen, aber der ganze Quellcode wird dann zu lang und unübersichtlich...

Funky-Sepp 9. Dez 2003 17:30

Re: Komponenten dynamisch aufrufen
 
Hi Patrick!

da gibt es die Funktion FindComponent

z. B.:

Delphi-Quellcode:

procedure Test;
var x : integer;
begin

  for x := 1 to 10 do begin
   
    ( FindComponent( 'Edit' + IntToStr( x ) ) as TEdit ).Text
 
  end;

end;

Patrick 10. Dez 2003 11:44

Re: Komponenten dynamisch aufrufen
 
Danke, ich bin für jede Lösung offen, aber gibt es da nicht eine direktere Weise. Ich will die Komponente ja nicht finden, ich weis ja, dass sie da ist, ich will sie eigentlich direkt ansprechen... Oder gibt es da keine andere Lösung für???

Nalincah 10. Dez 2003 11:50

Re: Komponenten dynamisch aufrufen
 
So

4 Buttons rein und ein Edit. Da einfach ne Zahl reinschreiben und das ausführen:

Delphi-Quellcode:
  for i := 0 to Form1.ComponentCount - 1 do
  begin
    if Form1.Components[i] is TButton then
    begin
      if TButton(Form1.Components[i]).Caption = 'Button' + Edit1.Text then
      begin
        TButton(Form1.Components[i]).SetFocus;
      end;
    end;
  end;

Funky-Sepp 10. Dez 2003 12:01

Re: Komponenten dynamisch aufrufen
 
Ich hab das ja auch anders gemeint.

Ich hab z. B. 10 Editfelder:
Edit1
Edit2
Edit3
...
Edit10

dann eine SpinEdit
und einen Button:

Delphi-Quellcode:

procedure TForm1.ButtonClick( Sender : TObject );
begin
  ShowMessage( ( FindComponent( 'Edit' + IntToStr( SpinEdit.Value ) ) as TEdit ).Text );
end;
So jetzt gebe ich im Edit3.Text = 'Hallo' ein
und in der SpinEdit.Value = 3
drücke auf den Button
und er gibt mir den Text der in Edit3 hinterlegt ist als message aus.

Nalincah 10. Dez 2003 12:12

Re: Komponenten dynamisch aufrufen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i :Integer;
begin
  for i := 0 to 9 do
  begin
    if Form1.Components[i] is TEdit then
    begin
      if TEdit(Form1.Components[i]).Name = 'Edit' + SpinEdit1.Text then
      begin
        ShowMessage(TEdit(Form1.Components[i]).Text);
      end;
    end;
  end;
end;

Funky-Sepp 10. Dez 2003 12:19

Re: Komponenten dynamisch aufrufen
 
Zitat:

Zitat von General2003
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i :Integer;
begin
  for i := 0 to 9 do
  begin
    if Form1.Components[i] is TEdit then
    begin
      if TEdit(Form1.Components[i]).Name = 'Edit' + SpinEdit1.Text then
      begin
        ShowMessage(TEdit(Form1.Components[i]).Text);
      end;
    end;
  end;
end;


macht FindComponent nicht das gleiche?? :gruebel:

Müsste doch so viel einfacher gehen und man sparrt sich ein haufen Code?

Patrick 12. Dez 2003 13:20

Re: Komponenten dynamisch aufrufen
 
Vielen Dank erstmal, ihr habt mir weiter geholfen, ich werde mir jetzt eine Lösung herauspicken, die am Besten auf mein Problem passt!

Ricane 9. Jan 2004 17:45

Re: Komponenten dynamisch aufrufen
 
Diese FindComponent - Geschichte ist genau das was ich brauche um mein Problem zu lösen, aber sie will nicht funzen...

Mein Problem: Ich will ein Bild von einem TImage in ein anderes kopieren ...

Dieser Happen Quellcode sorgt für das Problem: Das Problem ist "Ungültige Typenumwandlung"!

Delphi-Quellcode:
        (FindComponent('imgStein' + IntToStr(I)) As
          TImage).Picture.Bitmap.Assign((FindComponent('imgRoh' +
          IntToStr(AktNummer)) As TImage).Picture.Bitmap);
Das hier funktioniert ....

Delphi-Quellcode:
        imgStein1.Picture.Bitmap.Assign(imgRoh9.Picture.Bitmap);
... es liegt also nicht daran ist, das er die Bilder nicht kopieren will....

Hat jemand eine Idee?!



Beste Grüsse,

Ricane

scp 9. Jan 2004 18:34

Re: Komponenten dynamisch aufrufen
 
@Ricane
Das scheint nicht an FindComponent() zu liegen, denn bei mir gehts. Habe zwei TImage mit deinen Namen auf der Form erstellt und es deine Methode verwendet.

Deshalb mach bitte einen neuen Thread für die Frage auf, sonst gibts hier nur Chaos :-)


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