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