Показать сообщение отдельно

  #14  
Старый 20.05.2010, 17:19
Sams
Участник форума
Регистрация: 18.04.2009
Сообщений: 120
С нами: 8981650

Репутация: 80
По умолчанию

Как положено - разобрался сам, помоги другим. Потому чуток пораскинув мозгами и почитав дополнительную литературу, пришел к выводу, что работать с компонентами не обязательно через массив.
Можно сделать по такой схеме:
1. Создаём компонент.
2. Заносим в объект TList указатель на этот компонент.
3. Для обращения к любому из компонентов вытягиваем указатель из TList.

Таким образом мы не ограничиваемся размером массива.

Покажу на примере чуть выше (кинем на форму не одну кнопку, а две. Одна будет создавать поля, а другая - поменяет текст в определенном поле):

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a, y: integer;
  ListComp: TList;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
ListComp := TList.Create;
a := 10;
y := 10;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
x: TEdit;

begin
x := TEdit.Create(self);
x.Parent := Form1;
x.Top := y;
x.Left := a;
ListComp.Add(x);
a := a + 20;
y := y + 20;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
TEdit(CompList.Items[2]).Text := 'lol'; //Эта строка меняет текст в третьем текстовом поле. Номер текстового поля указываем в CompList.Items[номер полня] (счет ведется с нуля).
end;

end.
Создаём первой кнопкой несколько полей (больше, чем 3) и клацаем вторую кнопку - меняется содержимое третьего поля.

Последний раз редактировалось Sams; 20.05.2010 в 17:21..
 
Ответить с цитированием