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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2009, 20:08   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Смена изображения при наведении не на белую область

Имеется:
На фоне - карта мира (в арихиве - урезанная часть)
На ней сверху расположена картика Image 1 с частью южной америки.
Как сделать, что бы при наведении на америку (именно на америку, а не на область картинки) картинка сменялась на другую (В архиве - 1.bmp)?
Вложения
Тип файла: rar Ex.rar (378.0 Кб, 20 просмотров)
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 09.05.2009, 21:03   #2
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
Как сделать, что бы при наведении на америку
Ну наверное попадание в область проверять...

А вы уже реализовали это "при наведении"..? В обычном TImage нет событий "OnMouseEnter" и "OnMouseLeave".....
Или у вас не Delphi 7, а какой-то более новый, где эти события добавили?

А вообще я бы сделал HTML-страницу и её в браузере выводил...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 09.05.2009, 21:07   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Дельфя обыкновенная - семерка, Leave и Enter там действительно нет.
Цитата:
А вообще я бы сделал HTML-страницу и её в браузере выводил...
Тогда бы я делал не приложение, а HTML страницу.
Цитата:
Ну наверное попадание в область проверять...
Не получится, так как очертания америки - не прямоугольник и даже не квадрат (глупые латиносы - не могли нормально страну создать).

Так что...
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 09.05.2009, 21:29   #4
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
очертания америки - не прямоугольник и даже не квадрат
Ну и что?
Через регионы же вроде можно... Сейчас попробую вспомнить как.....
В самом крайнем случае через много уравнений прямых...

Цитата:
Дельфя обыкновенная - семерка, Leave и Enter там действительно нет
И как же вы тогда сделали..?
Я находил примеры как так сделать, но может есть что получше...


UpDate

Вспомнил...
Код:
Проверить принадлежит ли точка заданому региону:
If PtInRegion(R, X, Y) Then ...
где R - регион, X и Y - координаты точки
I am the First of Cyber Evolution...
I am the First to Program your Future...

Последний раз редактировалось DomiNick; 09.05.2009 в 22:41. Причина: UpDate
DomiNick вне форума Ответить с цитированием
Старый 10.05.2009, 09:34   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Делал примитивно - через проверку координат мыши:
Var P: TPoint;
If (p.X>150) And (p.X<200) And (p.Y>100) And (p.Y<200) Then ...

А как задавать регион? С этого места пожалуйста поподробней.
Кстати пришла в голову мысль... Правда не знаю долго ли это реализовывать. Но ... Если создать копию этого изображения (по размерам) а все изображение закрасить к примеру белым, а область америки сделать например синей. После этого загрузить это изображение в Дельфи и проверять в зависимости от положения мыши (тот же p.Y) точку с соответствующими координатами на этой новой карте. И если пиксель синего цвета, то включить флаг. Думаю так можно реализовать не только одну страну. Достаточно будет добавить цвет на карту и проверку.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 10.05.2009, 16:20   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Все! Готово! Сделал еще проще - создал в отдельной папке текстовый файл с матрицей чисел 256*192 (То бишь 1024*768, но деленные на 4), Вот его обрывок:
...000000000011111000000...
...000000000001110000000...
...000000000000110000000...
...000000000000010000000...
...000000000000000000000...

Потом загружаю его в отдельный массив:
Код:
 Begin
  Assign(F,'FCMAP.txt');
  Reset(F);
  For A:=0 to 191 do
   Begin
    Readln(F,S);
    For B:=0 to 255 do
     Begin
      FCDATAMAP[B,A]:=StrToInt(Copy(S,1,1));
      Delete(S,1,1);
     End;
   End;
  CloseFile(F);
 End;
После чего создал такую процедурку:
Код:
procedure TForm1.FCMAPMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 If FCDATAMAP[Trunc(X/4),Trunc(Y/4)] = 1 Then Form1.Label1.Caption:='1';
end;
И вуаля - все работает. Теперь бы только создать программу, которая будет создавать мне txt, что бы столько чисел от руки не вводить, но это не проблема.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 10.05.2009, 17:17   #7
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
Лампочка

Цитата:
А как задавать регион?
Код:
Var R: HRGN;
...
R:=CreateRectRgn(100, 300, 250, 400); // Создать прямоугольный регион
R:=CreateEllipticRgn(10, 10, 100, 100); // Создать овальный регион
R:=CreatePolygonRgn(Points, 10, WINDING); // Создать многоугольный регион
Уважаемый mihali4 как-то посоветовал поинтересоваться регионами и дал пару ссылок...
Я в качестве тренировки над TButton издевался:
Код:
Procedure TForm1.FormCreate(Sender: TObject);
Begin
Button1.Left:=10;
Button1.Top:=10;
Button1.Height:=200;
Button1.Width:=200;
Form1.Color:=clNavy;
End;

Procedure TForm1.Button1Click(Sender: TObject);
Var i: Integer; R1, R2: HRGN; Points: Array [0..9] Of TPoint;
Begin
Randomize;
For i:=0 To 9 Do
      Begin
      Points[i].X:=Random(160)+20;
      Points[i].Y:=Random(160)+20;
      End;
R1:=CreateRectRgn(0, 0, 200, 200);
R2:=CreateRectRgn(20, 20, 180, 180);
CombineRgn(R1, R1, R2, RGN_XOR);
R2:=CreateEllipticRgn(70, 70, 130, 130);
CombineRgn(R1, R1, R2, RGN_OR);
R2:=CreatePolygonRgn(Points, 10, WINDING);
CombineRgn(R1, R1, R2, RGN_OR);
SetWindowRgn(Button1.Handle, R1, True);
End;
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение изображения при наведении мышки? lionman Общие вопросы Delphi 24 12.06.2010 13:03
Смена картинки при наведении мыши на меню Unknown-As HTML и CSS 4 31.03.2009 16:17
увеличение излбражения при наведении курсора SKS HTML и CSS 4 08.03.2009 13:39
Выдвижение формы при наведении Stanislav Общие вопросы Delphi 11 24.08.2008 00:24