Тема: Звернення до динамічно створеного компонента

як звернутися до компонента створеного програмно?

spl4:=TShape.Create(Form3);
spl4.Parent:=Form3;
spl4.Left:=xc-10;
spl4.Top:=yc-50;
spl4.Visible:=true;
spl4.Shape:=stCircle;
spl4.Height:=25;
spl4.Width:=25;
spl4.Brush.Color:=clGreen;
spl4.Enabled:=false;

2

Re: Звернення до динамічно створеного компонента

Це питання чи порада новчакам?

3 Востаннє редагувалося raxp (15.06.2016 10:19:00)

Re: Звернення до динамічно створеного компонента

То й що заважає звернутися до компонента, створеного дiнамiчно? Це глобальний об'єкт, звертайтесь. Ось якщо потрібно використовувати його події, то їх треба описати:

  public
    { Public declarations }

    procedure sma(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y, HitTest: Integer;
      var MouseActivate: TMouseActivate);


  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var spl_mas: array [0..1] of TShape;

procedure TForm1.sma(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y, HitTest: Integer;
  var MouseActivate: TMouseActivate);
begin
 with (sender as TShape) do begin
  case tag of
   0: ;
   1: ;

  end;
 end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
 spl_mas[0].Brush.Color:= rgb(255, 0, 0);
end;

procedure TForm1.FormCreate(Sender: TObject);
const xc = 200;
      yc = 200;
var i, tmp: integer;
begin
 for i:= low(spl_mas) to high(spl_mas) do begin

    spl_mas[i]:= TShape.Create(Form3);
    spl_mas[i].Left:= tmp-10;
    tmp:= spl_mas[i].Left;

    spl_mas[i].Top:=yc-50;

    spl_mas[i].Shape:=stCircle;
    spl_mas[i].Height:=25;
    spl_mas[i].Width:=25;
    spl_mas[i].Brush.Color:=clGreen;

    spl_mas[i].Tag:= i;
    spl_mas[i].OnMouseActivate:= sma;

    spl_mas.Parent:=Form3;
 end;
end;
Білоруський журнал «Радиолюбитель»
Lead Radar systems engineer & Software developer of industrial automation
Мої розробки та відеоблог
Подякували: leofun01, Torbins2

4

Re: Звернення до динамічно створеного компонента

Dontsov_kostya
raxp правильно підказує, найпростіший варіант - занести контроли в масив.
Можна іще Controls використовувати, як я вам у попередній темі радив. І такий приклад був у статті Єлени Філіпової.

var
  Shape: TShape;
//...
for i:=0 to Form3.ControlCount-1 do
  if Form3.Controls[i] is TShape then
  begin
    Shape := Form3.Controls[i] as TShape;
    //...