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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2011, 19:51   #1
Averon
 
Регистрация: 04.11.2011
Сообщений: 8
По умолчанию Движение компонента TImage.

Здравствуйте. Нужна помощь в реализации движения компонента TImage.
В программе есть класс. У каждого объекта класса есть свои параметры, в т.ч указатель на TImage компонент, создаваемый динамически.
При попытке изменения параметров Top и Left выдаёт ошибку.

Есть ли другой способ организации движения компонента, если да, то какой? Или я что-то не правильно делаю?

Ошибка:
Изображения
Тип файла: jpg 1122.JPG (10.8 Кб, 85 просмотров)
Averon вне форума Ответить с цитированием
Старый 04.11.2011, 20:05   #2
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Значит не правильно создавался у вас компонент ! Выложите код создания компонента и где происходят изменения Top и Left.
An1ka вне форума Ответить с цитированием
Старый 04.11.2011, 20:26   #3
Averon
 
Регистрация: 04.11.2011
Сообщений: 8
По умолчанию

Код функции вызываемой в конструкторе объекта класса:
void SetImg(int k,int x,int y,int w,TImage *image)
{
AnsiString Fpath="K:\\Projects\\p\\ball"; AnsiString Fr;
image=new TImage(Form1);
image->Parent=Form1;
image->Transparent=true;
image->Top=y;
image->Left=x;
image->Height=w;
image->Width=w;
Fr=Fpath+IntToStr(k)+".bmp";
image->Picture->LoadFromFile(Fr);
image->Visible=true;
image->Enabled=true;
}
------------------------------------------------------------------
Код функции для движения. X и Y-целые. kx,ky -целые. ax,ay-double.
void Dot::fly(int i,Dot *K[10],Rectn*R)
{
..................
..................
..................
X=X+kx*ax;
Y=Y+ky*ay;
img->Top=Y;
img->Left=X;
}
Averon вне форума Ответить с цитированием
Старый 04.11.2011, 20:42   #4
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

И сразу видно ошибку
Вы передаете указатель в функцию, а потом его меняете там. Но в функцию передается копия указателя ! И меняется так же копия указателя. Если вы хотите изменить указатель, то этот указатель передавать через другой указатель или через ссылку.

Передача указателя через ссылку так:
Код:
void SetImg(int k,int x,int y,int w,TImage *&image)
An1ka вне форума Ответить с цитированием
Старый 04.11.2011, 20:57   #5
Averon
 
Регистрация: 04.11.2011
Сообщений: 8
По умолчанию

Спасибо большое, позабыл
Averon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Движение компонента TImage. Averon C++ Builder 0 04.11.2011 19:35
Синхронизация визуального компонента (label) поверх TImage с возможностью прокрутки/маштабир. последнего Hmmmm Мультимедиа в Delphi 1 20.05.2011 15:34
Использование компонента idUdpClient без компонента TForm. Riply Компоненты Delphi 2 18.02.2011 21:21
Почему у компонента TImage не работает метод Perform? devi409 Win Api 7 22.12.2008 17:51