Форум: "Начинающим";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];
ВнизСоздание объявлений для большого числа компонентов. Найти похожие ветки
← →
Rendal © (2009-08-31 17:21) [0]Всем привет! Требуется после запуска формы создать с помошью конструктора n компонентов TImage, для того, чтобы в последствии можно было бы получить доступ к i-му.
Проблема в том, что возникает ошибка: Необъявлен i-ый компонент. Каким образом можно объявить компонент после запуска формы?
А также, какой тип имеет название компонента?
P.S. Это потребуется для процедуры в параметрах которой стоит номер компонента:
Например:
procedure moveleft(ComponentName:string;x:integer);
begin
// объявитькомпонент
Component:=TImage.Create(nil);
Component.name:=ComponentName;
ComponentName.Left:=ComponentName.Left-x;
end;
В процедуре, конечно полная ерунда. Хотелось бы узнать, как это можно записать по-другому.
← →
Медвежонок Пятачок © (2009-08-31 17:36) [1]Каким образом можно объявить компонент после запуска формы?
1. форма не запускается.
2. объявить что-либо можно только во время программирования. до компиляции.
← →
Rendal © (2009-08-31 17:48) [2]Т.е. мне придется объявлять все n-компонентов, даже если их тысяча?
← →
Медвежонок Пятачок © (2009-08-31 17:53) [3]если хочешь объявлять, то объявлять придется.
← →
Vitalts (2009-08-31 18:12) [4]Динамические массивы в помощь
← →
Rendal © (2009-08-31 18:13) [5]Массивы из компонентов? Это что-то новенькое)
← →
Медвежонок Пятачок © (2009-08-31 18:19) [6]зато сантехники на формуме программистов - дело привычное
← →
Rendal © (2009-08-31 18:27) [7]более чем привычное)
← →
Юрий Зотов © (2009-08-31 19:31) [8]> Rendal © (31.08.09 18:13) [5]
> Массивы из компонентов? Это что-то новенькое)
А что в этом странного? Самая обычная вещь, ничего нового. Тип элементов массива может быть любым - хоть компонент, хоть вообще процедура.
Именно массив компонентов Вам и нужен.
var
A: array of TImage;
procedure TForm1.MoveLeft(X: integer);
var
C: TImage;
begin
C := TImage.Create(Self);
try
C.Left := C.Left - X;
C.Parent := Self;
SetLength(A, Length(A) + 1);
A[High(A)] := C
except
C.Free;
raise
end
end;
А имена созданным в run-time компонентам присваивать незачем, имя только в design-time требуется. Работайте с ними через массив, например:
A[i].LoadFromFile(...);
← →
stas © (2009-08-31 21:02) [9]Rendal © (31.08.09 17:21)
Можно для этих целей использовать, TStringList, TObjectList.
← →
Leonid Troyanovsky © (2009-08-31 21:58) [10]
> Юрий Зотов © (31.08.09 19:31) [8]
> А что в этом странного?
Вот, для конструктора даже raise излишен.
Возможно, что Array properties спасут ОРД.
--
Regards, LVT.
← →
Юрий Зотов © (2009-09-01 00:35) [11]> Leonid Troyanovsky © (31.08.09 21:58) [10]
Не понял. Совсем.
← →
Leonid Troyanovsky © (2009-09-01 08:10) [12]
> Юрий Зотов © (01.09.09 00:35) [11]
> Не понял. Совсем.
Юрий, ты, безусловно, гигант мысли,
но спасаем мы вопрошающего.
--
Regards, LVT.
← →
KSergey © (2009-09-01 11:44) [13]> Leonid Troyanovsky © (31.08.09 21:58) [10]
> > Юрий Зотов © (31.08.09 19:31) [8]
> Вот, для конструктора даже raise излишен.
Пачиму? не вижу в нем излишества в приведенном коде.
← →
Leonid Troyanovsky © (2009-09-01 13:16) [14]
> KSergey © (01.09.09 11:44) [13]
> > Вот, для конструктора даже raise излишен.
> Пачиму? не вижу в нем излишества в приведенном коде.
Приведен-то не конструктор.
Большое количество объектов удобно держать в контейнере,
создавая их в его конструкторе. При желании можно, конечно,
и форму использовать как контейнер, но, в данном случае, проще
отдельный компонент, например, собственник всех изображений.
Любое исключение в конструкторе приведет к вызову
его деструктора, где все насозданное и удалится.
Для доступа по имени - array property, на основе, хоть FindComponent.
Использовать же для подобных целей простых списков или массивов
несколько рискованно, бо валидность хранимых ссылок не обеспечена.
--
Regards, LVT.
← →
Rendal © (2009-09-01 14:58) [15]Спс за процедуру! Если я правильно понял: если я вызову процедуру 100 раз, то получу массив из 100 компонентов, причем без необходимости указания типа всех ста компоненитов. Также можно получить и доступ к i-ому. Это как раз то, что было нужно!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.056 c