Помощь - Поиск - Пользователи - Календарь
Полная версия: Создание обьектов
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
CMOS
Как создать массив обьектов?

Например:

var a: Array[1..36] of TImage;

Мне нужно чтобы каждый обьект появлялся в свое время и в нужном месте
Пробовал:

a[n].Create(...)

А что в скобках писать?
Если:

a[1]:=TButton.CreateParented(Form1.Handle)

Не получается.
Объект не появляется даже если задать все размеры, координаты, указать картинку.
virt
может,

a[1]:=TImage.CreateParented(Form1.Handle)
?
Romtek
Complementary Metal-Oxyde Semiconductor, простите, CMOS,
во первых, принято использовать не массив, а TList - массив указателей.

const
count = 36;
var
List : TList;
Image: TImage;
i: integer;

begin
List := TList.Create(); // создать список

// создать список картинок
for i := 0 to Pred (count) do
begin
Image := TImage.Create;
List.Add (Image);
end;

//
{использовать этот список}
//

// освободить память для картинок
for i := 0 to Pred (count) do
begin
Image := List.Items[i];
Image.Free ();
end;

List.Free (); // освободить память списка
end.

Во-вторых, не делай всё сразу, а поэтапно.
CMOS
В строчке

Image := TImage.Create;

Ошибка "Non enough actual parametrs", просит параметр типа TComponent.
Мне картинки нужно перебирать по индексу:

for n:= 1 to 36 do
i[n].Picture.BitMap.LoadFromResourceID (0, 13*Get2High(a[n])+GetLow(a[n])-1);

А в Вашем случае как? Так что-ли:

List.Items[i].Picture...
volvo
Цитата(CMOS @ 8.07.05 21:13)
В строчке
Image := TImage.Create;
Ошибка "Non enough actual parametrs", просит параметр типа TComponent.

Ну, так дай ему этот параметр... Создание списка картинок происходит при создании формы?
Image := TImage.Create(Self);


Цитата(CMOS @ 8.07.05 21:13)
Мне картинки нужно перебирать по индексу:

For i := 0 to 35 do // На индексы обрати внимание ...
List.Items[i].Picture.BitMap.LoadFromResourceID...
CMOS
В строчке

List.Items[i].Picture.BitMap.LoadFromResourceID...

Ошибка "Record, object or class type required"
Ругается на List.Items[i]. Говорит, что точку после Items[i] не надо ставить.

var
List : TList;

Мне прогу сдавать в понедельник. Помогите, пожалуйста, кто чем может.
Алгоритм в принципе готов, осталось только это.
volvo
Да, вот так делай:
For i := 0 to 35 do begin
image := List.Items[i];
...
image.Picture.BitMap.LoadFromResourceID...
end;


А вообще ты бы весь проект прикрепил, а то получается игра в "глухие телефоны"... Я же не знаю, КАК у тебя что описано, и ГДЕ что ты вызываешь...
CMOS
Кажется, начинает работать!
Картинка, правда, не появляется.
Ошибка на

image.Picture.BitMap.LoadFromResourceID(0,1);

Project Project1.exe raised exception class EAccessViolation with message 'Access violation at addres 00408382 in module'PROJECT1.EXE'. Read of address FFFFFFFF. Process stopped. Use Step or Rn to continue.

Файл ресурсов добавлен.
Кстати, такая ошибка часто возникает и изчезает сама собой, даже если я ничего не делаю. Что это за ошибка?
Guest
Цитата(CMOS @ 9.07.05 21:34)
Кажется, начинает работать!
Картинка, правда, не появляется.
Ошибка на

image.Picture.BitMap.LoadFromResourceID(0,1);

Project Project1.exe raised exception class EAccessViolation with message 'Access violation at addres 00408382 in module'PROJECT1.EXE'. Read of address FFFFFFFF. Process stopped. Use Step or Rn to continue.

Файл ресурсов добавлен.
Кстати, такая ошибка часто возникает и изчезает сама собой, даже  если я ничего не делаю. Что это за ошибка?


Во первых LoadFromResourceID(hInstance, 1);
И перед запуском если менялись ресурсы Build вместо Complite!
volvo
Цитата(Guest @ 18.08.05 12:06)
И перед запуском если менялись ресурсы Build вместо Complite!

Во-первых, не Complite, а Compile... (Прежде чем давать советы, надо хотя-бы научиться правильно писать...)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.