Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.06;
Скачать: CL | DM;

Вниз

создание динамического массива объектов TImage   Найти похожие ветки 

 
Nikoss   (2004-05-16 14:00) [0]

Как объявить динамический массив объектов TImage, после чего загрузить в них картинки? При объявлениии такого массива:
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 edmas: array of TImage;

implementation

появляется ошибка:
[Error] Unit1.pas(22): Undeclared identifier: "TImage"
Таким способом у меня получалось создать массив объектов TLabel и TEdit, а TImage не удается. В чем тут дело?
Мне удалось объявить массив вот такой:
edmas: array of TImageList;, но видимо, это не то что мне  нужно, так как подгрузить картинки я не смог (отсутствует свойство Picture).


 
begin...end ©   (2004-05-16 14:12) [1]

Класс TImage описан в модуле ExtCtrls.


 
GuAV ©   (2004-05-16 14:17) [2]


> но видимо, это не то что мне  нужно


А что, собственно нужно?


 
Мыш ©   (2004-05-16 14:52) [3]

Если тебе нужен какой-то класс, описанный в определенном модуле, этот модуль нужно влючить в uses


 
GuAV ©   (2004-05-16 15:10) [4]


> А что, собственно нужно?

Я к тому, что если надо просто загрузить куда-то картики, то это TImageList, а если array, то of TPicture. TImage - визуальный компонент


 
Nikoss   (2004-05-16 18:16) [5]


> А что, собственно нужно?

нужно следующее, на форму в зависимости от задачи будут выводиться разное кол-во объектов TImage и в них загружаться картинки формата gif (для того, чтобы корректно понимал объект TImage формат gif я установил компонент TGifImage v2.2).
Посоветуйте, как мне лучше это сделать?


 
GuAV ©   (2004-05-16 18:53) [6]


>
> нужно следующее...


если один раз за запуск - массив не нужен.
если динамически добавлять/удалять - есть TComponentList - несколько проще будет


 
Nikoss   (2004-05-16 19:55) [7]

а нельзя ли сделать вот так:
var
 Form1: TForm1;
 immas: array of TImage;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
  SetLength(immas,5);
  for i:= 0 to 4 do begin
     Form1.Create(immas[i]);
     immas[i].Picture.LoadFromFile("c:\"+IntToStr(i)+".bmp");
  end;
end;

end.

По-моему это верное решение вот тоьлко при нажатие кнопки появляется ошибка:
Project xxx.exe raised exception class EComponentError with message "A component named Button1 already exists". Process stopped...
Как я понимаю, мне сообщают, что компонент кнопки уже существует, ноя же создаю компонент TImage, в чем тут дело?


 
GuAV ©   (2004-05-17 00:02) [8]


> Form1.Create(immas[i]);

Чё за бред !!!


 
European   (2004-05-17 00:17) [9]


> for i:= 0 to 4 do begin
>      Form1.Create(immas[i]);
>      immas[i].Picture.LoadFromFile("c:\"+IntToStr(i)+".bmp");
>   end;


 
European   (2004-05-17 00:18) [10]


> for i:= 0 to 4 do begin
>      Form1.Create(immas[i]);
>      immas[i].Picture.LoadFromFile("c:\"+IntToStr(i)+".bmp");
>   end;



> По-моему это верное решение


После этого не многие захотят вам отвечать


 
European   (2004-05-17 00:19) [11]

Во-первых, массив не нужен.


 
European   (2004-05-17 00:29) [12]

Во-вторых, создавайте TImage динамически.

Пример из интернета:

 Image:=TImage.Create(self);
 Image.Parent:=Form1;
 Image.Picture.LoadFromFile("c:\windows\Волны.bmp");


В-третьих, если число Image неизвестно, то можно найти нужный при помощи FindComponent. Пример есть в хелпе, нежно только поискать.
 Желаю удачи!


 
GuAV ©   (2004-05-17 00:48) [13]


> Во-первых, массив не нужен.


А может ему надо уничтожать/добавлять, не трогая форму
или другие действия делать с ними, через массив быстрее к ним доступ, чем FindComponent или Controls[i]


 
Nikoss   (2004-05-17 20:26) [14]

Спасибо за помощь.
Как вы посоветовали я создал массив, но беда в том, что не отображаются картинки вгруженные в массив. Какое свойство нужно активировать, чтобы отображались бы картинки?


 
GuAV ©   (2004-05-17 22:34) [15]


> Как вы посоветовали

Если именно так:

>  Image:=TImage.Create(self);
>  Image.Parent:=Form1;
>  Image.Picture.LoadFromFile("c:\windows\Волны.bmp");

, то должны быть видны.

если через массив, то соответственно Image[i] в начале кажндой строки.


 
Palladin ©   (2004-05-17 22:39) [16]

А координаты кто будет назначать, или картинки обладают интеллектом у тебя?
И вообще, рекомендую поизучать литературу, да попроще задачи порешать. Кто знает сколько там у тебя нюансов еще...


 
European   (2004-05-18 01:04) [17]

to Palladin ©  (17.05.04 22:39) [16]

Например, разобраться что за зверь
  Form1.Create(immas[i]);


 
Nikoss   (2004-05-19 20:34) [18]

Подскажите, как мне отследить клик по динамически созданному объекту? Например, у меня 5 динамически созданных объектов Image[i], при клике мыши на любом из них, в Lable1 должно отобразиться порядковое число того объекта, на который был сделан щелчек. Подскажите, как должна быть офомлена такая процедура?


 
begin...end ©   (2004-05-19 21:05) [19]

Процедура должна быть оформлена обычным образом.
Её нужно назначить в качестве обработчика.
Например, так:
for I := LowIndex to HighIndex do
 Image[I].OnClick := MyProc;


 
Nikoss   (2004-05-20 00:00) [20]


> for I := LowIndex to HighIndex do
>  Image[I].OnClick := MyProc;

При это компилятор выдает ошибку:
[Error] Unit1.pas(39): Incompatible types: "method pointer and regular procedure"
Процедуру MyProc создал и объявил, в чем тут ошибка?


 
Gero ©   (2004-05-20 00:12) [21]


> Nikoss   (20.05.04 00:00)

procedure TForm1.MyProc(Sender : TObject);
begin
 // Вот она
end;


 
GuAV ©   (2004-05-20 09:16) [22]

Delphi Help -> Index -> method pointers


 
nikoss   (2004-05-20 16:59) [23]

А как мне узнать, номер объекта, по которому был сделан щелчек миши? Допустим, у меня 5 объектов Timage и мне необходимо выполнить разный программный код в зависимости от номера объекта. Как мне узнать этот номер?


 
NAlexey ©   (2004-05-20 17:06) [24]

>щелчек миши
Имена пишутся с большой буквы.


 
Keyboard   (2004-05-20 17:29) [25]

Спасение студентов - дело рук самих студентов...


 
Nikoss   (2004-05-20 19:05) [26]


> NAlexey


> Keyboard

Вы, наверное, себя чувствуете очень умными, если это так то ответьте по существу, а не разводите базар, а если по существу написать нечего, то не стоит умничать.



Страницы: 1 вся ветка

Текущий архив: 2004.06.06;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.059 c
3-1084518929
TransparentGhost
2004-05-14 11:15
2004.06.06
Где находятся SHGetSpecialFolderPath и SHGetFolderPath ?


1-1085179106
DelPHist
2004-05-22 02:38
2004.06.06
Компиляция математических выражений


1-1085583210
Barsky
2004-05-26 18:53
2004.06.06
Как файлу поставить атрибут "скрытый"?


3-1084363746
Term
2004-05-12 16:09
2004.06.06
MIDAS, обратные вызовы или чтото типа того


3-1084793850
Tomkat
2004-05-17 15:37
2004.06.06
"Мир InterBase" скачать