Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2009, 16:08   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию Создание массива компонентов

Код создания во время работы программы компонента Edit:
Код:
Edit1:=TEdit.Create(self);   
Edit1.Parent:=self;
Как сделать, чтобы при каждом нажатии на кнопку создания, новые Edit-ы создавались друг под другом и у каждого Edit-a было свое новое имя (т.е. новый порядковый номер Edit1, Edit2 и т.д. Хотя это необязательно делать)?
Пробовал так:
Код:
procedure TForm1.ButtonClick(Sender: TObject);
var
 i:integer;
begin
 i:=40;
 Edit1:=TEdit.Create(self);   
 Edit1.Parent:=200 + i; 
 Edit1.Parent:=self;
Но не получилось
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 29.03.2009, 16:23   #2
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Странная операция Edit1.Parent:=200 + i;
Свойству Parent должен присваиваться указатель, а не число. Поместить компонент под другим можно, поменяв его Z-порядок, например Edit1.SendToBack, а чтобы присвоить имя Edit1.Name := 'NewEdit' + IntToStr(I);
Jeni вне форума Ответить с цитированием
Старый 29.03.2009, 16:30   #3
lexaltd
Форумчанин
 
Регистрация: 21.07.2008
Сообщений: 192
По умолчанию

Код:
var
  Form1: TForm1;
  e : TEdit;
  n : integer =0;
  n2 : integer =1;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  e := TEdit.Create(self);
  e.Parent := self;
  e.Name := 'Edit' + IntToStr(n2);
  e.Left := 10;
  e.Top := n;
  n := n +25;
  Inc(n2);
end;
lexaltd вне форума Ответить с цитированием
Старый 29.03.2009, 16:42   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Код:
var
  Form1: TForm1;
  e : TEdit;
  n : integer =0; //ругается на эту строчку 
  n2 : integer =1; //и на эту
 
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  e := TEdit.Create(self);
  e.Parent := self;
  e.Name := 'Edit' + IntToStr(n2);
  e.Left := 10;
  e.Top := n;
  n := n +25;
  Inc(n2);
end;
Что делать? Пишет: [Error] Unit6.pas(102): Cannot initialize local variables
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 29.03.2009, 16:47   #5
lexaltd
Форумчанин
 
Регистрация: 21.07.2008
Сообщений: 192
По умолчанию

Что делать? Пишет: [Error] Unit6.pas(102): Cannot initialize local variables
Код:
 n : integer =0; //ругается на эту строчку 
 n2 : integer =1; //и на эту
эти переменные надо объявлять как глобальные ,а не вставлять в процедуру

Код:
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  e : TEdit;
  n : integer =0;
  n2 : integer =1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  e := TEdit.Create(self);
  e.Parent := self;
  e.Name := 'Edit' + IntToStr(n2);
  e.Left := 10;
  e.Top := n;
  n := n +25;
  Inc(n2);
end;

Последний раз редактировалось lexaltd; 29.03.2009 в 16:59.
lexaltd вне форума Ответить с цитированием
Старый 29.03.2009, 16:55   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

lexaltd, имена изменил, но по прежнему если в разделе var добавить после integer 0 и 1, то выводит ту же ошибку. И еще, почему когда создается первый компонент, он помещается в самый низ формы?) И почему когда я второй раз нажимаю на кнопку создания, то второй раз компонент не создается, а пишет ошибку: A component named Edit0 already exists. ((
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 29.03.2009, 17:30   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Создайте новый проект, вставьте в него только то, что вы привели в п.4 и убедитесь, что все работает нормально. Я специально проверил.
Поэтому искать вам нужно в другом месте...
mihali4 вне форума Ответить с цитированием
Старый 29.03.2009, 17:43   #8
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Понял У меня просто уже были до этого созданы edit-ы с этими именами
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 30.03.2009, 15:43   #9
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

для удобства работы с эдитами советую обьявить их как динамический массив вместо
Код:
  e : TEdit;
обьявить как
Код:
  e : array of TEdit;
и потом при создании..
Код:
SetLength(e, Length(e)+1);
e[High(e)] := TEdit.Create(self);
**
(*и дальше по кду как у вас там етсь.. вместо е при создании
  писать e[High(e)].. в таком случае обращаться к каждому эдиту
  так:  e[номер эдита]...
*)
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
динамическое создание компонентов DOLBY Компоненты Delphi 10 17.10.2010 14:03
OnClick для массива компонентов Dj_smart Компоненты Delphi 5 30.04.2008 14:16
Создание компонентов во время работы программы Rusl92 Компоненты Delphi 23 05.04.2008 08:38
Литература создание компонентов delphi D7_beginner Свободное общение 1 20.11.2007 15:01