Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Componentenart als String -> erstellen der Componente (https://www.delphipraxis.net/109760-componentenart-als-string-erstellen-der-componente.html)

HolgerCW 7. Mär 2008 08:05


Componentenart als String -> erstellen der Componente
 
Hallo zusammen,

ich habe eine ComboBox, in denen ich die Componentenarten als String hinterlegt habe, wie TTabSheet oder TBitBtn.

Nun möchte ich , wenn man z.B. TTabSheet auswählt in einer weiteren ComboBox alle verfügbaren Namen der TTabSheets auf einer Form dort eingefügt werden. Hier mein Code:

Delphi-Quellcode:
procedure TForm1.CB_Item_ArtChange(Sender: TObject);
var
 I: Integer;
 StrList: TStringList;
 Form: TForm;
begin
 
 Form := Form1;
 
 StrList := TStringList.Create();

 For I := 0 to Form.ComponentCount - 1 do
 begin

  if Form.Components[I] is CB_Item_Art.Text then
  begin

   StrList.add(Form.Components[I].Name);

  end;
 end;

 CB_Item.Clear;
 CB_Item := StrList;

end;
Gegen was muss ich in dem Code diesen Eintrag: "CB_Item_Art.Text" ersetzen, damit es klappt ?

Gruss

Holger

DeddyH 7. Mär 2008 08:09

Re: Componentenart als String -> erstellen der Componente
 
Das geht IMHO nur über einen Umweg:
Delphi-Quellcode:
if AnsiLowerCase(Form.Components[I].ClassName) = AnsiLowerCase(CB_Item_Art.Text) then

HolgerCW 7. Mär 2008 08:20

Re: Componentenart als String -> erstellen der Componente
 
Perfekt,

das funktioniert.

Gruss

Holger

TBx 7. Mär 2008 08:39

Re: Componentenart als String -> erstellen der Componente
 
Moin,
Jeder Nachfahre von TObject hat eine Methode ClassNameIs, die Du zu dieser Prüfung nutzen kannst.
Noch eine Anmerkung zu Deinem Quelltext: Du referenzierst hier in einer Methode eine Instanz des Methodeneigners. Dadurch ist es nicht mehr möglich, eine weitere Instanz zu erstellen, die wie gewünscht arbeitet.
Außerdem ist an dieser Stelle die Zuweisung zu einer lokalen Variablen überflüssig.
Delphi-Quellcode:
procedure TForm1.CB_Item_ArtChange(Sender: TObject);
var
  I: Integer;
  StrList: TStringList;
  // Form: TForm; ueberfluessig
begin
  //Form := Form1;
  StrList := TStringList.Create();
  For I := 0 to {Form.}ComponentCount - 1 do
  begin
    if Components[I].ClassNameIs (CB_Item_Art.Text) then
    begin
      StrList.add({Form.}Components[I].Name);
    end;
  end;
  CB_Item.Clear;
  CB_Item := StrList; // das funktioniert nicht

end;

DeddyH 7. Mär 2008 08:41

Re: Componentenart als String -> erstellen der Componente
 
Wenn ich das richtig überflogen habe, macht die Methode aber auch nichts Anderes als mein Vorschlag.

HolgerCW 7. Mär 2008 10:23

Re: Componentenart als String -> erstellen der Componente
 
Hi,

danke nochmals. Die Proceduren sind gleichwertig.

Zitat:

CB_Item := StrList; // das funktioniert nicht
funktioniert so:

Delphi-Quellcode:
CB_Item.List := StrList;
Zitat:

// Form: TForm; ueberfluessig
begin
//Form := Form1;
Dort werde ich später noch verschiedene Formen zuweisen. Zur Zeit ist das überflüssig.

Danke euch beiden

Gruss

Holger


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