AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Feststellen ob eine Komponente vorhanden ist?

Ein Thema von Chemiker · begonnen am 8. Apr 2008 · letzter Beitrag vom 8. Apr 2008
Antwort Antwort
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#1

Feststellen ob eine Komponente vorhanden ist?

  Alt 8. Apr 2008, 06:52
Hallo,

wie kann man feststellen, ob eine Komponente die dynamisch erzeugt wird, unter einen bestimmten Komponenten – Name schon vorhanden ist.

Mein Versuch:

Delphi-Quellcode:
for I := 0 to MessStellenLst.Count - 1 do
   begin
     if TChart(FindComponent('c'+TMSV1(MessStellenLst.Objects[i]).MaNr))=Nil then
     begin
       MessChart:= TChart.Create(ChartPanel);
       if not(Assigned(TChart(FindComponent('c'+TMSV1(MessStellenLst.Objects[i]).MaNr)))) then
       begin
         DiaErstellen(ChartPanel,MessChart,TMSV1(MessStellenLst.Objects[i]).MaNr,
                     (TMSV1(MessStellenLst.Objects[i]).MaBez));
       end;
     end;
   end;
ist leider fehlgeschlagen.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Feststellen ob eine Komponente vorhanden ist?

  Alt 8. Apr 2008, 07:23
Wenn du FindComponent verwendest so ist das gleichbedeutend mit Self.FindComponent
Das heißt das FindComponent bezieht sich auf die aktuelle Klasse. Du musst beim erzeugen deiner Komponente den richtigen Owner angeben. Wenn du keinen angibst kannst du auch nirgends mit FindComponent danach suchen. Gibst du als Owner Form2 an obwohl die Komponente auf Form1 liegt findet nur FindComponent von Form2 die Komponente.

Was allerdings nicht vergessen werden sollte!! Die Methode heißt FindComponent.
Es wird also anhand des Namens danach gesucht. Wenn du die Komponente dynamsich erzeugst spricht aber auch nix dagegen das du dir das Ergebnis auf eine Variable sicherst oder wenn es mehrere sind in einem Array/Liste. Das ist bedeutend performanter weil du in deinem Array/Liste dann nur die Komponenten hast die auch wirklich von dir gefunden werden sollen. Beim normalen FindComponenten hingegen werden alle Komponenten des Forms mit geprüft (also jedes Edit, Label etc. was du zur Designzeit plaziert hast)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Feststellen ob eine Komponente vorhanden ist?

  Alt 8. Apr 2008, 07:27
Moin Chemiker,

meine zur Laufzeit erstellten Komponenten bekommen alle einen eindeutigen Namen. Laut OH soll '' auch gültig sein, aber das scheint dich und mich ja nicht zu interessieren. Hier meine Methode meiner Basiskomponente einen gültigen Namen beim Create zu finden.
Delphi-Quellcode:
procedure TBaseCustomControl.SetFirstName;
var Counter : Integer;
    Component : TComponent;
    NewComponentName : String;
begin
  // neuer Name
  if not Assigned(Application) then begin
    if self.Owner = nil then
      Component := self
  end else
    Component := Application.MainForm;
  Counter := 0;
  NewComponentName := '';
  try
    while NewComponentName = 'do begin
    NewComponentName := GetNewComponentName(
      Copy(ClassName + InttoStr(Counter), 2, Length(ClassName + InttoStr(Counter))),
      Component);
      Inc(Counter);
    end;
  finally
    SetName(NewComponentName);
  end;
end;

function GetNewComponentName(NewName: string; Component: TComponent): String;
var Counter : Integer;
begin
  Result := NewName;
  for Counter := 0 to Component.ComponentCount - 1 do begin
    if Component.Components[Counter].ComponentCount > 0 then
      Result := GetNewComponentName(NewName, Component.Components[Counter]);
    if Result = 'then
    Exit;
    if Component.FindComponent(NewName) <> nil then begin
      Result := '';
      Exit;
    end;
  end;
end;
Ob das nun der Brüller ist, keine Ahnung. Aber es funzt.


Gruß oki
42
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Feststellen ob eine Komponente vorhanden ist?

  Alt 8. Apr 2008, 20:57
Hallo SirThornberry und oki,

Danke für die Tipps. Habe übersehen, dass ich TChar auf einem Panel erstelle und dadurch nicht mehr Form1 der Inhaber von TChart ist, sondern das Panel. Mit FindComponent wird jetzt auch nur auf dem Panel gesucht.

Delphi-Quellcode:
for I := 0 to MessStellenLst.Count - 1 do
   begin
     if TChart(ChartPanel.FindComponent('c'+TMSV1(MessStellenLst.Objects[i]).MaNr))=Nil then
     begin
       MessChart:= TChart.Create(ChartPanel);
       if not(Assigned(TChart(ChartPanel.FindComponent('c'+TMSV1(MessStellenLst.Objects[i]).MaNr)))) then
       begin
         DiaErstellen(ChartPanel,MessChart,TMSV1(MessStellenLst.Objects[i]).MaNr,
                     (TMSV1(MessStellenLst.Objects[i]).MaBez));
       end;
     end;
   end;
Es scheint so, dass nun alle TCharts erstellt werden.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:23 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