![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
NTL |
![]()
Сообщение
#41
|
![]() Фанат Delphi ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Вообщем, дан на форма Image1 с загруженным туда рисунком в формате BMP или Icon,например,красная точка (уж не знаю, есть ли разница BMP, ICON?). Нужно, не создавая компоненты Image2,Imege3...Image23 на стадии контруировании формы, создать эти компоненты во время работы программы и скопировать туда этот рисунок из Image1,
затем вывести все эти рисунки на карту. Причем, каждый этот рисунок должен отобразиться в том месте, где находиться райцентр каждого района (ужимать ничего не надо, т.к.данный рисунок небольшой и в точности подходит к размерам нашего эллипса).В том примере, я пытался скопировать хотя бы в один рисунок, для общего слуачая понятно, что нужно будет array of TImage Пересчитать обратно координаты так? Код for i:=0 to 23 do for j:=0 to length(Region[i].bounds)-1 do Region[i].bounds[j].X:=Round((bounds[j].X+dx)* m) Цитата 1) Определяешь масштаб горизонтальный = размер региона по горизонтали / ширину формы; 2) Определяешь масштаб вертикальный = размер региона по вертикали / высоту формы; 3) Выбираешь из этих двух масштабов выбираешь максимальный. Насчет масштаба, как определить размер всей карты? Я пытался подобрать,вроде так... Код if 1435/Form1.ClientWidth>854/Form1.ClientHeight then m:=1435/Form1.ClientWidth else m:=854/Form1.ClientHeight; -------------------- ICQ (384-043-857)
|
hiv |
![]()
Сообщение
#42
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Вместо
Canvas.Ellipse((Region[i].CenterX-x-th div 2 - 1)div m,(Region[i].CenterY-y-th div 2 - 1)div m,(Region[i].CenterX-x+ th div 2)div m,(Region[i].CenterY-y+ th div 2)div m);напиши Canvas.Draw((Region[i].CenterX-x) div m - Image1.Picture.Graphic.Width div 2,и не забудь поставить свойство Transparent=true у объекта Image1. Цитата Насчет масштаба, как определить размер всей карты? Я пытался подобрать,вроде так... Ничего подбирать не нужно! ![]() -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
NTL |
![]()
Сообщение
#43
|
![]() Фанат Delphi ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Цитата Код Canvas.Draw((Region[i].CenterX-x) div m - Image1.Picture.Graphic.Width div 2, (Region[i].CenterY-y) div m - Image1.Picture.Graphic.Height div 2, Image1.Picture.Graphic.); для m:real; не подходит, а для целого в самый раз (гениальный вариант). Для вещественного никак нельзя? А насчет пересчитывания координат из предыдущего поста, ничего не можете подсказать? -------------------- ICQ (384-043-857)
|
NTL |
![]()
Сообщение
#44
|
![]() Фанат Delphi ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Тьфу ты
![]() ![]() -------------------- ICQ (384-043-857)
|
NTL |
![]()
Сообщение
#45
|
![]() Фанат Delphi ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Код { if i=1 then begin //относительное смещение координат карты и формы на экране dX:=Region[i].Rect.Left; dY:=Region[i].Rect.Top; end else begin //выбираем минимальные значения if dX>Region[i].Rect.Left then dX:=Region[i].Rect.Left; if dY>Region[i].Rect.Top then dY:=Region[i].Rect.Top; end; } Почему именно i:=1 -------------------- ICQ (384-043-857)
|
hiv |
![]()
Сообщение
#46
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Почему именно i:=1 Если dX и dY не будут определены (как это делается на первом шаге), то не понятно к чему приведут сравнения dX>Region[i].Rect.Left и dY>Region[i].Rect.Top. Цитата А вот насчет персчитывания координат мыши в координаты карты? Смотри снова пост 38. Что непонятного? Сообщение отредактировано: hiv - 12.12.2006 9:51 -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
NTL |
![]()
Сообщение
#47
|
![]() Фанат Delphi ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Цитата Смотри снова пост 38. Что непонятного? Мне собственно нужно теперь обратиться к этой карте, в частности нажатие на тот самый райцентр с рисунком и нажатие на любой район, чтобы в заголовке формы появилось название района. Т.е, по-моему,.координаты мыши нужно преобразовать или я ошибаюсь... ![]() Если dX и dY не будут определены (как это делается на первом шаге), то не понятно к чему приведут сравнения dX>Region[i].Rect.Left и dY>Region[i].Rect.Top. Но у нас же условие будет проверяться только один раз, когда :=1...Т.е. только один раз будет сравниваться -------------------- ICQ (384-043-857)
|
NTL |
![]()
Сообщение
#48
|
![]() Фанат Delphi ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
К райцентру я смог обратитьсяся, мб немного неоптимально, но собсвена вот//
Код MasX[i]:= Round((Region[i].CenterX-dx) / m) - round((Image1.Picture.Graphic.Width) / 2); MasY[i]:= Round((Region[i].CenterY-dy) / m) - Image1.Picture.Graphic.Height div 2; Canvas.Draw(MasX[i],MasY[i],Image1.Picture.Graphic); --------------------------------------------------------------- if (x>=MasX[i])and (x<=MasX[i]+image1.Picture.Width) and (y>=MasY[i])and(y<=MasY[i]+image1.Picture.height) then label2.caption:=Region[i].Name; Осталось только к самому региону...Может подскажете? ![]() -------------------- ICQ (384-043-857)
|
NTL |
![]() ![]()
Сообщение
#49
|
![]() Фанат Delphi ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Но у нас же условие будет проверяться только один раз, когда :=1...Т.е. только один раз будет сравниваться Вопрос снимается, дошло ![]() -------------------- ICQ (384-043-857)
|
NTL |
![]()
Сообщение
#50
|
![]() Фанат Delphi ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Может быть, что-нибудь похожее...рез-ат этого почти правильный, но погрешносить все еще велика. Как бы ее свести к минимуму?
Код if (x>=Round(Region[i].Rect.Left-dx)/m) and (x<=round(Region[i].Rect.Right-dx)/m) and (y<=round(Region[i].Rect.Bottom-dy)/m) and (y<=round(Region[i].Rect.Top-dy)/m) then label1.Caption:=region[i].Center; ЗЫ: Принадлежность точки к многоугольнику рассмотрел, но слишком это сложный вариант -------------------- ICQ (384-043-857)
|
hiv |
![]()
Сообщение
#51
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
ЗЫ: Принадлежность точки к многоугольнику рассмотрел, но слишком это сложный вариант Пилите Шура - пилите... (Ильф Петров)По другому не получиться. -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
NTL |
![]()
Сообщение
#52
|
![]() Фанат Delphi ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
При нажатии на райцентр - новая форма и рисование ТОЛЬКО одного соответствующего района
![]() Пилите Шура - пилите... (Ильф Петров) По другому не получиться. Не...Как бы обратиться к прямоугольнику этого района ![]() -------------------- ICQ (384-043-857)
|
NTL |
![]()
Сообщение
#53
|
![]() Фанат Delphi ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
С этой задачей справился, осталось немного- при нажатии на регион, создавалася новая форма и там вырисовывался этот регион только один
![]() -------------------- ICQ (384-043-857)
|
z12 |
![]()
Сообщение
#54
|
Гость ![]() |
С этой задачей справился, осталось немного- при нажатии на регион, создавалася новая форма и там вырисовывался этот регион только один ![]() простейшим вариантом будет, узнать индекс региона, открыть форму(добавиш в проект), в процедуре создания формы выполни тоже самое что и делает главная форма, тока открывать надо файл с индексом региона (поидее индекс в массиве будет равен, номеру файла при поиске в папке, кароче в цикле ищещ файлы, как тока итерация равна индексу региона грузиш файл прерываеш цикл), дальше сам надеюсь не запутано объяснил =) я кстате чутка переписал эту софтину, убрал мерцание при перерисовке если надо вылажу код |
![]() ![]() |
![]() |
Текстовая версия | 9.07.2025 20:02 |