Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблемы с указателями на TImage, оказывается равной NULL 
:(
    Опции темы
artsb
Дата 15.1.2009, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Всем привет!

Я, так сказать, балуюсь...
Так баловался, что запутался в указателях smile

Код

TForm1 *Form1;
TImage *iSender;
bool flag = false;

//---------------------------------------------------------------------------
void __fastcall TForm1::iBtnMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
if(!flag)
{
  iSender = (TImage*)Sender;
  // всякие операции и изменение изображения iSender
  flag = true;
  Timer1->Enabled = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
// получение координат
if(/* проверка: не ушёл ли курсор */)
{
  // изменение картинки обратно
  iSender = NULL;
  flag = false;
  Timer1->Enabled = false;
}
}


На форме панель. На панели 6 объектов типа TImage. У всех у них OnMouseMove = iBtnMouseMove. При наведении на один из Image'ов сохраняю указатель на него в iSender для того, чтобы знать у кого потом менять картинку обратно.
Так вот, при первом наведении всё ОК. При последующих iSender = NULL. Не могу понять почему...


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Romikgy
Дата 15.1.2009, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 11
Всего: 146



логически нужны события mouseenter & mouseleave
у тя уж очень не безопасный код , сендер у тя будет формой (или батоном харит перепроверять) а ты его к имаге ....


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
mrbrooks
Дата 15.1.2009, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



artsb, я так делать бы не стал. Попробуй так.

Код

void __fastcall TForm1::iBtnMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
  TImage *img = dynamic_cast<TImage*>(Sender);
  MStatusBar->SimpleText = img->Name;
}


Вот мой пример.


Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  artsb.rar 263,50 Kb
PM MAIL   Вверх
mrbrooks
Дата 15.1.2009, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Кстати по поводу создание события OnEnter для TImage - хорошая мысль.

Это сообщение отредактировал(а) mrbrooks - 15.1.2009, 09:07
PM MAIL   Вверх
artsb
Дата 15.1.2009, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



2Romikgy
Цитата(Romikgy @  15.1.2009,  00:35 Найти цитируемый пост)
логически нужны события mouseenter & mouseleave

Не помешали бы. Кстати, начиная с 2006-го они есть.

Цитата(Romikgy @  15.1.2009,  00:35 Найти цитируемый пост)
у тя уж очень не безопасный код , сендер у тя будет формой (или батоном харит перепроверять) а ты его к имаге .... 

Почему??? Это событие назначено только Image'ам. Как там может быть форма?


2mrbrooks
Хм.. сейчас попробую.

Цитата(mrbrooks @  15.1.2009,  09:06 Найти цитируемый пост)
Кстати по поводу создание события OnEnter для TImage - хорошая мысль.

Мысль хорошая - это точно. Но нужно писать свой компонент. А я не умею (точнее, не нашёл ни каких толковых статей по их написанию), да и времени нет.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Romikgy
Дата 15.1.2009, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 11
Всего: 146





--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
artsb
Дата 15.1.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Решил проблему!

У меня был вот такой кусок:
Код

AnsiString nm = iSender->Name.Delete(1, 4).LowerCase();

Я та думал, что возвращается изменённая строка, а исходная остаётся. А оказывается, исходная тоже меняется. В общем, я сделал так:
Код

AnsiString nm = iSender->Name.LowerCase();
nm.Delete(1, 4);
// теперь использую nm

Теперь всё ОК.

Ещё раз всем спасибо за участие!

Добавлено через 1 минуту и 13 секунд
Мне плюс за мою же глупость! smile

Добавлено через 4 минуты и 1 секунду
Romikgy, всё для Delphi :(


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Romikgy
Дата 15.1.2009, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 11
Всего: 146



artsb, билдер очень похож на дельфи , основы можно взять из них а писать и на си
http://www.sysman.ru/index.php?showtopic=8423

Это сообщение отредактировал(а) Romikgy - 15.1.2009, 14:49


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
artsb
Дата 15.1.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(Romikgy @  15.1.2009,  14:48 Найти цитируемый пост)
билдер очень похож на дельфи , основы можно взять из них а писать и на си

Я знаю. Даже писал небольшие программки на Delphi. Но просто, когда начинаю разбирать код, приходится перенапрягаться smile Привычней всё-таки C++.

Добавлено через 21 секунду
Но всё-равно спасибо.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0491 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.