Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Rocky
Зарегистрирован: 02.10.2008 Сообщения: 4 Откуда: Самара
|
Добавлено: Чт Окт 02, 2008 10:47 pm Заголовок сообщения: Опять MapInfo и Delphi |
|
|
Привет всем. Я зарегился на этом форуме, потому что мне срочно нужна помощь и я знаю, что вы можете помочь. Сразу скажу, в работе с MapInfo я новичек. Вобщем задача такая: из программы, написанной на Delphi, необходимо связаться с MapInfo. Затем нажатием кнопки мыши на любую точку карты возвратить в программу(н-р в Edit) координаты этой точки. С MapInfo я связался, а вот координаты получить не могу. Знаю, что нужно создать кнопку ToolButton и в её обработчике записать типа
var
X,Y : String;
begin
MapInfo.Do('Set CoordSys Layout Units "mm"');
X := MapInfo.Eval('CommandInfo(CMD_INFO_X)');
Y := MapInfo.Eval('CommandInfo(CMD_INFO_Y)');
ShowMessage('X= ' + X + ' Y = ' + Y);
(MapInfo := CreateOleObject('MapInfo.Application');)
Но как конкретно это не сделать, я не допёр.
Помогите плиз. Мне очень срочно надо. Буду очень благодарен! Заранее СПАСИБО! |
|
Вернуться к началу |
|
|
Vovik
Зарегистрирован: 04.05.2008 Сообщения: 57
|
Добавлено: Пт Окт 03, 2008 3:21 am Заголовок сообщения: Re: Опять MapInfo и Delphi |
|
|
Дорогой друг я примерно делаю так
Эта утилитка на MapBasic помещяет на инструментальную панель в раздел "Программы"
кнопку с определенной иконкой (Icon MI_ICON_SIGNS_9)
При активизации этой кнопки курсор превратится в крестик (Cursor MI_CURSOR_CROSSHAIR)
Далее если щелкнуть по карте (если карта WindowInfo( FrontWindow(), WIN_INFO_TYPE ) = WIN_MAPPER)
утилитка запишет координаты в переменные x и y , откроет канал связи с приложением "Координаты.exe"
и передаст в объекты Text1(0) и Text1(0) значения переменных
Все комментировать не буду
Дерзай!
Include "MAPBASIC.DEF"
Include "Icons.def"
Include "MENU.DEF"
Declare Sub Main
Declare Sub My_sub
Sub Main
Set CoordSys Nonearth units "m" Bounds (10000,10000) ( 100000,100000)
Set Distance Units "m"
'Здесь мы созаем кнопку и назначаем ей обработчик в виде процедуры My_sub
Alter ButtonPad ID 3 Add ' Программы
Separator
ToolButton
Calling My_sub
Icon MI_ICON_SIGNS_9
HelpMsg "Кнопка получения координат \nКнопка получения координат"
Cursor MI_CURSOR_CROSSHAIR
Show
End Sub
Sub My_sub
Dim x As Float
Dim y As Float
Dim nChan As integer
Dim Pach_program As String
If WindowInfo( FrontWindow(), WIN_INFO_TYPE ) = WIN_MAPPER Then ' Определяет тип окна если карта
x = CommandInfo(CMD_INFO_X)
y = CommandInfo(CMD_INFO_Y)
Pach_program = ApplicationDirectory$( )
If Right$(Pach_program, 1) <> "\" Then
Pach_program = Pach_program+ "\"
End If
OnError GoTo NOT_nChan 'Если нет связи
Run Program Pach_program+ "Координаты.exe" 'Запускает программу Координаты.exe написаную на VB
nChan = DDEInitiate("Координаты","DDETopic") ' Открывает канал DDE-связи.
DDEPoke nChan, "Text1(0)", Str$(x) ' передаем координату X
DDEPoke nChan, "Text1(1)", Str$(y) передаем координату Y
DDETerminate nChan ' Закрывает канал DDE-связи.
end if
Exit Sub
NOT_nChan:
Note "Нет связи с программой ""Координаты.exe"" "
End Sub |
|
Вернуться к началу |
|
|
Rocky
Зарегистрирован: 02.10.2008 Сообщения: 4 Откуда: Самара
|
Добавлено: Вт Окт 07, 2008 4:54 pm Заголовок сообщения: |
|
|
Спасибо, дорогой друг. Но это не совсем то, на что я рассчитывал. Я не понимаю, как это реализовать в Delphi. Помогите, кто чем может. Очень надо. |
|
Вернуться к началу |
|
|
Нестеров Валерий
Зарегистрирован: 21.03.2006 Сообщения: 492
|
Добавлено: Ср Окт 08, 2008 8:19 am Заголовок сообщения: |
|
|
1. Думаю стоит почитать Хелп по MapBasic (раздел "Интегрированная Картография").
2. В каталоге установки MapBasic есть примеры для разных языков программирования "MapBasic\SAMPLES\DELPHI". _________________ Жизнь прекрасна!i |
|
Вернуться к началу |
|
|
Rocky
Зарегистрирован: 02.10.2008 Сообщения: 4 Откуда: Самара
|
Добавлено: Пт Окт 10, 2008 3:53 pm Заголовок сообщения: |
|
|
Help по MapBasic'у я читал, вроде все понял. Но все же в Delphi реализовать не получается. А в Samples про получение координат нечего нет. Подскажите, как создать кнопку ToolButton и правильно написать для неё обработчик(напоминаю, все это в Delphi). Наверняка кто-то сталкивался с этим. Буду очень благодарен за помощь. |
|
Вернуться к началу |
|
|
Vovik
Зарегистрирован: 04.05.2008 Сообщения: 57
|
Добавлено: Пн Окт 13, 2008 2:24 am Заголовок сообщения: |
|
|
В Samples про получение координат очень даже много сказано правда для С++ и VB но если пораскинуть мозгами , то можно и это применить и для Delphi.
Разобраны примеры с использованием уведомляющих вызовов (Callbacks) , а хочешь имитировать строку состояния MapInfo, то создай метод, SetStatusText, чтобы у него был один аргумент: строка и вычленяй из этой строки текущие координаты курсора на карте.
Потом, в моем первом тебе примере дан фрагмент кода на MB который создает кнопку на инструментальной панели MI и передает координаты клика мышью в объект textbox приложения написаного на VB с таким же успехом будут переданы данные и в объект Tedit приложения написаного на Delphi |
|
Вернуться к началу |
|
|
Rocky
Зарегистрирован: 02.10.2008 Сообщения: 4 Откуда: Самара
|
Добавлено: Пн Окт 13, 2008 3:04 pm Заголовок сообщения: |
|
|
Спасибо. :) Буду пробовать. |
|
Вернуться к началу |
|
|
|