![]() |
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... |
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; |
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???
|
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; |
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:
So jetzt gebe ich im Edit3.Text = 'Hallo' einprocedure TForm1.ButtonClick( Sender : TObject ); begin ShowMessage( ( FindComponent( 'Edit' + IntToStr( SpinEdit.Value ) ) as TEdit ).Text ); end; 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. |
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; |
Re: Komponenten dynamisch aufrufen
Zitat:
macht FindComponent nicht das gleiche?? :gruebel: Müsste doch so viel einfacher gehen und man sparrt sich ein haufen Code? |
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!
|
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:
Das hier funktioniert ....
(FindComponent('imgStein' + IntToStr(I)) As
TImage).Picture.Bitmap.Assign((FindComponent('imgRoh' + IntToStr(AktNummer)) As TImage).Picture.Bitmap);
Delphi-Quellcode:
... es liegt also nicht daran ist, das er die Bilder nicht kopieren will....
imgStein1.Picture.Bitmap.Assign(imgRoh9.Picture.Bitmap);
Hat jemand eine Idee?! Beste Grüsse, Ricane |
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 :-) |
Re: Komponenten dynamisch aufrufen
Das Problem habe ich gelöst!
Lag aber an meiner Dummheit, da eines der Images ein Label war und daher klappte es natürlich nicht... :wall: :wall: :wall: Beste Grüsse, Ricane |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 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