[ dejov @ 09.09.2004. 18:15 ] @
MOzda je lakse kroz primer:
Imam 3 mala panela. Sva 3 su crne boje. Isod njih se nalazi editbox i dugme. Pritiskom na dugme, panel cije je ime upisano u editboxu menja boju u npr plavu. Kako to da uradim?
Odnosno, ako imam podatak koji je tipa string, kako da programu dam do znanja da mislim na komponentu koja se zove kao taj string, odnosno da kasnije radim nesto sa tom komponentom(kao sto je menjanje boje u nevedenom primeru)

Ne verujem da je moguca konverzija tipa StrToInt ili tako nesto.
[ Almedin @ 09.09.2004. 21:40 ] @
Pogledaj FindComponent metod i Components property.
[ burex @ 09.09.2004. 22:36 ] @
Code:

procedure TForm1.Button1Click(Sender: TObject);
var Komponenta:TComponent;
begin
Komponenta := FindComponent(Edit1.Text); 
with TPanel(Komponenta) do
Color := clBlue;
end;

//Ako je u pitanju Edit, onda zameniti TPanel sa TEdit



Samo pazi, ako ne postoji komponenta sa imenom npr. "Panel1", doci ce do greske tipa "Access violation at xxxblablaxxx".
[ morlic @ 10.09.2004. 08:47 ] @
Nece ako stavi:

Code:

procedure TForm1.Button1Click(Sender: TObject);
Var Komponenta : TComponent;
begin
  // Trazimo
  Komponenta := FindComponent(Edit1.Text);
  // Izlazimo ako je nema
  if not Assigned(Komponenta) then Exit;

  // Ako je TPanel
  if Komponenta is TPanel then
    with (Komponenta as TPanel) do
      begin
        Caption := 'Proba';
        Exit
      end;

  // Ako je TEdit
  if Komponenta is TEdit then
    with (Komponenta as TEdit) do
      begin
        Text := 'Proba';
        Exit
      end;

  // Ako nije kliknuto na TPanel ili TEdit
  With Komponenta do
    ShowMessageFmt('Izabrali ste na komponentu tipa %s ciji je naziv %s', [ClassName,Name]);
end;