Como Llamar un Componentes

Estoy haciendo una aplicacion en la cual necesito hacer referencia a un componente, mi problemas es que no se convertir una variable de cadena para poder llamar el componente por su nombre.
Ejemplo.
Tengo 10 componentes del tipo TLabel
Label1, Label2, etc.
Todas estan ocultos.
Tengo un procedimiento que las visualiza.
procedure MostrarComponente(Sender: TObject);
begin
(Sender as TLabel).visible:=True;
end;
A la hora de llamar ese procedimiento lo que necesito pasar como parametro es un texto para no tener que repetir el mismo codigo en la llamada sino utilizar un ciclo para hacerlo simple.
for i:=1 to 5 do
MostrarComponente('Label'+IntToStr(i));
Si esta en tus manos ayudarme te lo voy a agradecer.
Respuesta
1
Debes usar findcomponent, te paso un ejemplo:
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;
    // 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;
      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;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas