AGB  ·  Datenschutz  ·  Impressum  







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

Komponenten dynamisch aufrufen

Ein Thema von Patrick · begonnen am 9. Dez 2003 · letzter Beitrag vom 9. Jan 2004
Antwort Antwort
Seite 1 von 2  1 2      
Patrick

Registriert seit: 15. Sep 2003
184 Beiträge
 
Delphi 2010 Professional
 
#1

Komponenten dynamisch aufrufen

  Alt 9. Dez 2003, 18:25
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...
Genieße jede Minute deines Lebens, denn sie wird nicht wieder kommen.
  Mit Zitat antworten Zitat
Funky-Sepp

Registriert seit: 14. Okt 2003
Ort: Freudenricht/Velburg
56 Beiträge
 
#2

Re: Komponenten dynamisch aufrufen

  Alt 9. Dez 2003, 18:30
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;
Wolfgang
  Mit Zitat antworten Zitat
Patrick

Registriert seit: 15. Sep 2003
184 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Komponenten dynamisch aufrufen

  Alt 10. Dez 2003, 12:44
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???
Genieße jede Minute deines Lebens, denn sie wird nicht wieder kommen.
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#4

Re: Komponenten dynamisch aufrufen

  Alt 10. Dez 2003, 12:50
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;
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Funky-Sepp

Registriert seit: 14. Okt 2003
Ort: Freudenricht/Velburg
56 Beiträge
 
#5

Re: Komponenten dynamisch aufrufen

  Alt 10. Dez 2003, 13:01
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.
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#6

Re: Komponenten dynamisch aufrufen

  Alt 10. Dez 2003, 13:12
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;
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Funky-Sepp

Registriert seit: 14. Okt 2003
Ort: Freudenricht/Velburg
56 Beiträge
 
#7

Re: Komponenten dynamisch aufrufen

  Alt 10. Dez 2003, 13:19
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??

Müsste doch so viel einfacher gehen und man sparrt sich ein haufen Code?
Wolfgang
  Mit Zitat antworten Zitat
Patrick

Registriert seit: 15. Sep 2003
184 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Komponenten dynamisch aufrufen

  Alt 12. Dez 2003, 14:20
Vielen Dank erstmal, ihr habt mir weiter geholfen, ich werde mir jetzt eine Lösung herauspicken, die am Besten auf mein Problem passt!
Genieße jede Minute deines Lebens, denn sie wird nicht wieder kommen.
  Mit Zitat antworten Zitat
Benutzerbild von Ricane
Ricane

Registriert seit: 21. Mär 2003
Ort: Quickborn
170 Beiträge
 
Delphi 7 Architect
 
#9

Re: Komponenten dynamisch aufrufen

  Alt 9. Jan 2004, 18:45
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 ....

        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
Hendrik
So much to Code... so less Time....

www.RicaneSoftware.de
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#10

Re: Komponenten dynamisch aufrufen

  Alt 9. Jan 2004, 19:34
@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
  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 16:58 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