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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2009, 12:25   #1
Juffin
Форумчянин
Форумчанин
 
Аватар для Juffin
 
Регистрация: 05.04.2009
Сообщений: 446
По умолчанию ошибка при создании TImage

вот куски кода:
Код:
...
Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
...
obj=record
         x:integer;
         y:integer;
         w:integer;
         h:integer;
         st:string;
         pic:TImage
         end;
...
var objects:array[1..10] of obj;
...
потом бла-бла-бла
и в одной из процедур:
Код:
...
for i:=1 to k
do begin
   objects[i].pic:=TImage.Create(self); //вот тут выделяет строку
   objects[i].pic.Parent:=self;
   if FileExists('./materials/objects/'+objects[i].st)
   then objects[i].pic.Picture.LoadFromFile('./materials/objects/'+objects[i].st)
   else ShowMessage('ERROR 4. No object file"'+objects[i].st+'"');
   objects[i].pic.Transparent:=true;
   end;
...
пишет ошибку: Undeclared Identifier: 'self'

что неправильно?
Nobody expects Spanish Inquisition!
Juffin вне форума Ответить с цитированием
Старый 22.04.2009, 12:29   #2
Juggernaut
Пользователь
 
Регистрация: 18.04.2009
Сообщений: 55
По умолчанию

А не проще будет вместо создания и использования своего класса использовать обычный TImage (имею ввиду в объявлении массива)? Self - это параметр, он есть у каждого готового класса. Ты можешь его и сам объявить, но это будет сишком сложно.
Весы слева, не забыли?

Абсурдопедия
Juggernaut вне форума Ответить с цитированием
Старый 22.04.2009, 12:32   #3
Juffin
Форумчянин
Форумчанин
 
Аватар для Juffin
 
Регистрация: 05.04.2009
Сообщений: 446
По умолчанию

ну, может и можно, но по мне так лучше сделать массив классов, чем массив и массив классов

по теме - что все-таки надо исправить? я искал поиском, там все так написано.
Nobody expects Spanish Inquisition!
Juffin вне форума Ответить с цитированием
Старый 22.04.2009, 12:33   #4
Juggernaut
Пользователь
 
Регистрация: 18.04.2009
Сообщений: 55
По умолчанию

ну тогда попробуй

Код:
objects[i].pic:=obj.pic.Create(self);
... нет нет я втупил...

или так

Код:
objects[i].pic:=TImage.Create(obj.pic.self); // или попробуй не указывать pic в конце, просто пропустить его
Весы слева, не забыли?

Абсурдопедия

Последний раз редактировалось Juggernaut; 22.04.2009 в 12:36.
Juggernaut вне форума Ответить с цитированием
Старый 22.04.2009, 12:43   #5
Juffin
Форумчянин
Форумчанин
 
Аватар для Juffin
 
Регистрация: 05.04.2009
Сообщений: 446
По умолчанию

ни так, ни так не работает. можно поподробнее о self?
Nobody expects Spanish Inquisition!
Juffin вне форума Ответить с цитированием
Старый 22.04.2009, 12:47   #6
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

укажите вместо self например form1 objects[i].pic:=TImage.Create(form1);
SERG1980 вне форума Ответить с цитированием
Старый 22.04.2009, 12:48   #7
Лукманов Александр
работа не волк....
Форумчанин
 
Аватар для Лукманов Александр
 
Регистрация: 09.06.2008
Сообщений: 337
По умолчанию

Прошу прощения за оффтоп. Juffin, что ты вообщем хочешь сделать, если не секрет.
Цель, для которой требуются неправые средства, не есть неправая цель.
Лукманов Александр вне форума Ответить с цитированием
Старый 22.04.2009, 12:54   #8
Juffin
Форумчянин
Форумчанин
 
Аватар для Juffin
 
Регистрация: 05.04.2009
Сообщений: 446
По умолчанию

SERG1980:
работает. Огромное спасибо!

Лукманов Александр:
Я вообще как-бы игру делаю. но мне кажется, что рисовать объекты (которые могут быть выше или ниже игрока) проще не через TBitMap на канву, а как TImage, потому что перерисовывать не надо.
Nobody expects Spanish Inquisition!
Juffin вне форума Ответить с цитированием
Старый 22.04.2009, 12:57   #9
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Ты пишешь в одной из процедур такой вызов objects[i].pic:=TImage.Create(self); //вот тут выделяет строку . Ошибка Undeclared Identifier: 'self' может выйти если процедура не прописана для формы. то есть надо объявить ее в public формы, а потом писать
например:
Код:
Procedure TForm1.dobav;
begin
objects[i].pic:=TImage.Create(self);
end;
и тогда ошибки не будет...
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 22.04.2009, 17:49   #10
Juffin
Форумчянин
Форумчанин
 
Аватар для Juffin
 
Регистрация: 05.04.2009
Сообщений: 446
По умолчанию

можно закрывать.
Nobody expects Spanish Inquisition!
Juffin вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при создании таблицы LAGOX SQL, базы данных 1 28.03.2009 00:46
Ошибка при создании типа Monte-Kristo Помощь студентам 4 04.03.2009 19:51
Ошибка при создании головного элемента двусвязного списка Дамир Помощь студентам 1 16.11.2008 16:09
Interbase ошибка при создании базы Алёна БД в Delphi 13 10.02.2008 16:45