Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пара вопросов по компоненту TImage, всплывающая подсказка и слоистость 
V
    Опции темы
Нитонисе
Дата 5.11.2010, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

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



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

2. Нужно реализовать слоистость рисунка. То есть имеется некий сложный рисунок и хочу по клику мыши обводить некую область рисунка в кружок с центром в месте клика. Затем хочу кликнуть в другом месте рисунка, при этом первый кружок должен стереться и нарисовать в новом месте, где я только что кликнул. Как стирать первый кружок, не повредив основную картинку?

Это сообщение отредактировал(а) Нитонисе - 5.11.2010, 18:01
PM MAIL   Вверх
586
Дата 6.11.2010, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Нитонисе @  5.11.2010,  18:01 Найти цитируемый пост)
1. Если активировать на TImage всплывающую подсказку и на событии перемещения мыши попросить выводить во всплывающую подсказку координаты мыши, то получается не очень красивая картинка. Сразу как только мышь попадает на TImage - подсказка всплывает. А вот потом ведет себя неадекватно. Как сделать, чтобы по мере перемещения мыши за курсором постоянно ползла и всплывающая подсказка с текущими координатами?

Можно всплывающую подсказку заменить компонентом TLabel, и при перемещении мыши перемещать этот TLabel, меняя в нём текст.

Цитата(Нитонисе @  5.11.2010,  18:01 Найти цитируемый пост)
2. Нужно реализовать слоистость рисунка. То есть имеется некий сложный рисунок и хочу по клику мыши обводить некую область рисунка в кружок с центром в месте клика. Затем хочу кликнуть в другом месте рисунка, при этом первый кружок должен стереться и нарисовать в новом месте, где я только что кликнул. Как стирать первый кружок, не повредив основную картинку?

Можно этот кружок нарисовать в отдельном TImage, установить у него свойство Transparent, и переместить в нужную область над Image1.
PM   Вверх
Нитонисе
Дата 6.11.2010, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

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



Цитата(586 @  6.11.2010,  02:40 Найти цитируемый пост)
Можно всплывающую подсказку заменить компонентом TLabel, и при перемещении мыши перемещать этот TLabel, меняя в нём текст.

Спасибо, опробую.

Цитата(586 @  6.11.2010,  02:40 Найти цитируемый пост)
Можно этот кружок нарисовать в отдельном TImage, установить у него свойство Transparent, и переместить в нужную область над Image1

Переместить каким образом? Есть Image1 - там сложный рисунок. Кликаю где-то мышкой,в Image2 рисую кружок... а дальше что?
PM MAIL   Вверх
586
Дата 6.11.2010, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Нитонисе @  6.11.2010,  09:52 Найти цитируемый пост)
Переместить каким образом? Есть Image1 - там сложный рисунок. Кликаю где-то мышкой,в Image2 рисую кружок... а дальше что? 

Кружок можно нарисовать заранее в Image2.
Код
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    TPoint pt = this->ScreenToClient(Image1->ClientToScreen(TPoint(X, Y)));
    Image2->Left = pt.x - Image2->Width / 2;
    Image2->Top = pt.y - Image2->Height / 2;
    Image2->Visible = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image2MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    TPoint pt = Image1->ScreenToClient(Image2->ClientToScreen(TPoint(X, Y)));
    Image1MouseDown(Image1, Button, Shift, pt.x, pt.y);
}


Это сообщение отредактировал(а) 586 - 6.11.2010, 11:20
PM   Вверх
Нитонисе
Дата 6.11.2010, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

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



Цитата(586 @  6.11.2010,  11:16 Найти цитируемый пост)
Кружок можно нарисовать заранее в Image2.

Нарисовал его так
Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Image2->Canvas->Ellipse(10,10,30,30);
}

Добавил ваши обработчики событий. Установил Image2->Transparent в true. При клике на Image1 появляется Image2 с кружочком, только почему-то прозрачная область у него только внутри, а снаружи белый фон.

Добавлено через 9 минут и 3 секунды
С Label получилось почти как надо, только при перемещении мыши по самой метке она не перемещается, а надо чтобы показывала текущие координаты на Image1.
PM MAIL   Вверх
586
Дата 6.11.2010, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Нитонисе @  6.11.2010,  11:35 Найти цитируемый пост)
появляется Image2 с кружочком, только почему-то прозрачная область у него только внутри, а снаружи белый фон.

Предварительно нужно закрасить фон:
Код
Image2->Canvas->Pen->Color = clWhite;
Image2->Canvas->Rectangle(0, 0, Image2->Width, Image2->Height);
Image2->Canvas->Pen->Color = clBlack;
Image2->Canvas->Ellipse(0, 0, Image2->Width, Image2->Height);


Цитата(Нитонисе @  6.11.2010,  11:35 Найти цитируемый пост)
С Label получилось почти как надо, только при перемещении мыши по самой метке она не перемещается, а надо чтобы показывала текущие координаты на Image1.

Перенаправляй событие в Image:
Код
void __fastcall TForm1::Label1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
    TPoint pt = Image1->ScreenToClient(Label1->ClientToScreen(TPoint(X, Y)));
    Image1MouseMove(Image1, Shift, pt.x, pt.y);
}

PM   Вверх
Нитонисе
Дата 6.11.2010, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

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



586, спасибо!  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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