Handling von Komponenten zur Laufzeit

Hi

Bin neu hier und brauch direkt mal euere Hilfe!

Folgendes Problem bringt mich zur Verzweiflung,
weis aber nicht wie ichs lösen soll.

Man stelle sich folgendes vor:

Ich habe ein Formular mir 2 Image Komponenten (Image1, Image2)
einem Editfeld und einem Button.

In das Editfeld will ich den Namen der Komponente eingeben,
z.B. Image2, welche dann beim druck auf den Button ausgeblendet werden soll.

Sprich:

Ich will einen String als Objekt handeln.
Wie geht das ?!

hab mir folgendes überlegt, was aber nicht geht:

with edit1.text as TComponent do
visible := false;

bitte um Hilfe … :smiley:

-IIK-

Hallo,

with edit1.text as TComponent do
visible := false;

so direkt geht das nicht.
Du musst mit ComponentCount und Component[i] alle Komponenten der Form durchgehen und den Namen überprüfen:

for i := 0 to Form1.ComponentCount - 1 do begin
 if Form1.Component[i].Name = Edit1.text then 
end;

Gruß, Niels

Hallo Niels,

vielen Dank für deine schnelle antwort.

Jetzt wo ich das lese, ist mir alles klar.

Habs gestern auf ne ähnliche weise gelöst,
in dem ich mir ein array von nem record gebastelt habe,
in dem ich alle zur laufzeit erstellten objekte verwalte.

Harald

Hi!
Es gibt auch noch den Befehl ‚FindComponent‘. Schau mal in die Hilfe
von Delphi. Ist auch ein Beispiel dabei.

Gruß Markus

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,
Edit1.text ist ein String, wobei TComponent eine Klasse ist.
Du kannst hier nicht direct ansprechen.
Probiere mal mit diesem Source. Hoffenlich entspricht er deine Erwartung
Gruß

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
ok: TButton;
Image1: TImage;
Image2: TImage;
procedure okClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.okClick(Sender: TObject);
begin
if Edit1.Text = Image1.Name then Image1.Visible := Not Image1.Visible;
if Edit1.Text = Image2.Name then Image2.Visible := Not Image2.Visible;
end;

end.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]