...eine Komponente über ihren Namen finden/ansprechen ?

Autor: Thomas Stutz

Kategorie: VCL

{Instead of writing: / Anstatt so was zu schreiben:}

Edit1.Text := 'Text 1';
Edit2.Text := 'Text 2';
Edit3.Text := 'Text 3';
Edit4.Text := 'Text 4';
{...}
Edit9.Text := 'Text 9';

{...it's easier to write / ...geht's so einfacher:}

{
  Use the forms FindComponent to find a component on the form.
  TypeCast the Result of FindComponent to the TComponent to be able to use it.
}


for i := 1 to do
  
TEdit(FindComponent('Edit'+IntToStr(i))).Text := 'Text' + IntToStr(i);

{or/oder:}

for i:= 1 to do
  
(Findcomponent('Edit'+IntToStr(i)) as TEdit).Text := IntToStr(i);



{
  Another example: find a component on any form with
  a search string like this: 'MyForm10.Edit2'

  Ein anderes Beispiel:
  Eine Komponente auf irgendeiner Form finden mittels einer
  solchen Zeichenfolge: 'MyForm10.Edit2'
}

function FindComponentEx(const Name: string): TComponent;
var
  
FormName: string;
  CompName: string;
  P: Integer;
  Found: Boolean;
  Form: TForm;
  I: Integer;
begin
  
// Split up in a valid form and a valid component name
  
P := Pos('.', Name);
  if P = 0 then
  begin
    raise 
Exception.Create('No valid form name given');
  end;
  FormName := Copy(Name, 1, P - 1);
  CompName := Copy(Name, P + 1, High(Integer));
  Found    := False;
  // find the form
  
for I := 0 to Screen.FormCount - 1 do
  begin
    
Form := Screen.Forms[I];
    // case insensitive comparing
    
if AnsiSameText(Form.Name, FormName) then
    begin
      
Found := True;
      Break;
    end;
  end;
  if Found then
  begin
    for 
I := 0 to Form.ComponentCount - 1 do
    begin
      
Result := Form.Components[I];
      if AnsiSameText(Result.Name, CompName) then Exit;
    end;
  end;
  Result := nil;
end;

procedure TFrom1.Button1Click(Sender: TObject);
var
  
C: TComponent;
begin
  
C := FindComponentEx('MyForm10.Edit2');
  TEdit(C).Caption := 'Hello';
end;



 

printed from
www.swissdelphicenter.ch
developers knowledge base