Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.04.2014, 09:04
Demlan Demlan вне форума
Прохожий
 
Регистрация: 09.09.2011
Сообщения: 27
Репутация: 10
По умолчанию ГИС самопал

Всем привет. Надо сделать план местности. Кинул на форму ScrollBox. В него поместил Image. В него поместил большую картинку, чтобы края были за пределами. На картинке есть дома. Мне надо чтобы при наведении на определенный дом во втором Image выводилась фото этого дома. Решаю данную проблему через опу... кидаю на изображение на место дома другой Image и при наведении на него срабатывает событие... Но домов много и как мне кажется это не выход... Подскажите другой способ решения данной проблы пожалуйста.
Ответить с цитированием
  #2  
Старый 14.04.2014, 09:32
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Demlan
Надо сделать план местности. Кинул на форму ScrollBox. В него поместил Image. В него поместил большую картинку, чтобы края были за пределами. На картинке есть дома. Мне надо чтобы при наведении на определенный дом во втором Image выводилась фото этого дома. Решаю данную проблему через опу... кидаю на изображение на место дома другой Image и при наведении на него срабатывает событие... Но домов много и как мне кажется это не выход... Подскажите другой способ решения данной проблы пожалуйста.
В событии OnMouseMove у Image проверяй координаты X, Y на попадание в один из прямоугольников (PtInRect).
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Demlan (14.04.2014)
  #3  
Старый 14.04.2014, 10:07
Demlan Demlan вне форума
Прохожий
 
Регистрация: 09.09.2011
Сообщения: 27
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
В событии OnMouseMove у Image проверяй координаты X, Y на попадание в один из прямоугольников (PtInRect).
Данный метод не подходит, так как изображение выходит за пределы одной формы. Точнее одного экрана...
Ответить с цитированием
  #4  
Старый 14.04.2014, 10:11
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Demlan
Данный метод не подходит, так как изображение выходит за пределы одной формы. Точнее одного экрана...
Разве при выходе изображения за пределы формы/экрана событие OnMouseMove у Image даёт неверные координаты X, Y ?
Ответить с цитированием
  #5  
Старый 14.04.2014, 10:23
Demlan Demlan вне форума
Прохожий
 
Регистрация: 09.09.2011
Сообщения: 27
Репутация: 10
По умолчанию

Использовал Mouse.CursorPos.X. А надо было использовать IntToStr(x) в Image1MouseMove...Это я немного запупил. Спасибо большое.

А если здание стоит ромбом, как тогда отследить положение7

Последний раз редактировалось M.A.D.M.A.N., 14.04.2014 в 11:57.
Ответить с цитированием
  #6  
Старый 14.04.2014, 11:12
draginimp draginimp вне форума
Прохожий
 
Регистрация: 02.04.2014
Сообщения: 37
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Да так же квадратом!!
Еще можно прописать +/- погрешность. Если, конечно, у Вас дома не слишком плотно стоят.
Ответить с цитированием
  #7  
Старый 14.04.2014, 13:18
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Вот, еле нашёл в сорцехране свой ну очень (1998) старинный проект - делал тогда по работе каталог инструментов и для него пришлось разрабатывать компонент с "подсветкой" областей на рисунке, вам это не нужно точно, но там организуются "не прямоугольные" сообщества регионов (хранятся в самом рисунке), а при попадании на них мышки возможна реакция, вот это вам скорее всего подойдёт. Есть и редактор полигонов, посмотрите пжлст

З.Ы. А вот и пример (exe+src) отыскался того, как это должно было работать

Последний раз редактировалось Alegun, 14.04.2014 в 15:45.
Ответить с цитированием
  #8  
Старый 15.04.2014, 02:45
Demlan Demlan вне форума
Прохожий
 
Регистрация: 09.09.2011
Сообщения: 27
Репутация: 10
Печаль

Безымянный.png
Может я что-то не так делаю, но появляется эта ошибка при открытии программы, на которую вы дали ссылку..
Ответить с цитированием
  #9  
Старый 15.04.2014, 04:45
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Рисунок что в свойстве PictureNormal компонента LedImage прописан немного глючит из-за возраста - не ходовая часть, но если хотите, то можете свой "двухцветный" битмап в Picture запихнуть через инспектор, автоматом ошибка исчезнет

З.Ы. Не могли бы вы выложить здесь фрагмент (больше не нужно) используемого вами изображения плана местности, это вероятно пригодится чтоб понять как лучше решить поставленную задачу

Последний раз редактировалось Alegun, 15.04.2014 в 04:57.
Ответить с цитированием
  #10  
Старый 15.04.2014, 09:19
Demlan Demlan вне форума
Прохожий
 
Регистрация: 09.09.2011
Сообщения: 27
Репутация: 10
По умолчанию

Безымянный.png вот вид программы.
Код:
if (x>918) and (X<990) then
  begin
  if (y>2456) and (y<2512) then
    begin
    If LoadImage<>'Штаб тыла' then
       begin
       Image5.Picture.LoadFromFile('..\Foto\Тыл.jpg');
       LoadImage:='Штаб тыла';
       end else
         begin
         panel2.Visible:=FALSE;
         Image5.Picture.Create;
         Image5.Picture:= nil;;
         LoadImage:='';
         end;
      end;
    end;
написал это-вроде следит, но глючно очень.
понял саму концепцию-надо создать БД с координатами зданий и по перемещению курсора сверять с БД и при совпадении выводить картинку. но как это сделать ума не приложу....

код на событии Image1MouseMove

Код:
function GetImageName(const X, Y: Integer): string;
begin
  if (X > 918) and (X < 990) and (Y > 2456) and (Y < 2512) then // это для демонстрации, в реальном приложении ищем по базе
    Result:= '..\Foto\Тыл.jpg'
  else
    Result:= '';
end;
 
procedure Form1.Image1MouseMove(...);
var
  NewImageName: string;
begin
  NewImageName:= GetImageName(X, Y);
  if NewImageName = '' then
    Image5.Visible:= False
  else
    if NewImageName <> LoadImage then
      begin
        Image5.Visible:= True;
        Image5.Picture.LoadFromFile(NewImageName);
        LoadImage:= NewImageName;
      end;
end;

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

Последний раз редактировалось M.A.D.M.A.N., 16.04.2014 в 09:45.
Ответить с цитированием
  #11  
Старый 16.04.2014, 09:41
Аватар для Пахом Поехавший
Пахом Поехавший Пахом Поехавший вне форума
Заблокирован
 
Регистрация: 27.03.2014
Адрес: Гауптвахта
Сообщения: 3
Версия Delphi: три семёрки
Репутация: 10
По умолчанию

а какая бд устроена таблицы как ?
ты хочеш чтоб за тебя зделали всё ?
братишка,я когда в бане был нормально,20 раз правила прочитал,там сказано одна тема один вопрос а ты все в одну тему столка,небо не видело такого позорного братишки как ты .
Ответить с цитированием
  #12  
Старый 16.04.2014, 19:30
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,551
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Пахом Поехавший
а какая бд устроена таблицы как ?
ты хочеш чтоб за тебя зделали всё ?
братишка,я когда в бане был нормально,20 раз правила прочитал,там сказано одна тема один вопрос а ты все в одну тему столка,небо не видело такого позорного братишки как ты .
Админ: Вот еще недельку в БАНе посиди, правила почитай.
+ на этом форуме от своего сленга придется отказаться, либо использовать его в другом месте
Ответить с цитированием
  #13  
Старый 17.04.2014, 02:45
Demlan Demlan вне форума
Прохожий
 
Регистрация: 09.09.2011
Сообщения: 27
Репутация: 10
По умолчанию

Всем спасибо огромное за участие!!! Удачи Вам в ваших начинаниях.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:25.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025