Anonymous | Login | Signup for a new account | 23-11-24 09:27 UTC |
All Projects | SAS.Планета | Домен, сайт, форум, багтрекер | Доработка карты (ZMP) | Переводы и локализации | Прочее |
My View | View Issues | Change Log | Roadmap | Search |
View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
0001869 | SAS.Планета | [All Projects] Хотелка | public | 22-03-2013 13:03 | 28-08-2020 06:28 | ||||
Reporter | zarius | ||||||||
Assigned To | zed | ||||||||
Priority | normal | Severity | feature | Reproducibility | have not tried | ||||
Status | resolved | Resolution | fixed | ||||||
Platform | Windows | OS | XP | OS Version | SP3 | ||||
Product Version | 131111 | ||||||||
Target Version | 141111 | Fixed in Version | 141111 | ||||||
Summary | 0001869: Обработка внешнего события в САСе с переходом к координатам на карте | ||||||||
Description | Хотелось бы иметь возможность посылать сообщения САСу (например SendMessege из winapi) из сторонней программы. При получении данного сообщения выполняется действие перехода САСа к определенной координате (один из вариантов использования данного механизма). Координата может передаваться как с самим сообщением, либо храниться в некотором файле. | ||||||||
Tags | WM_COPYDATA | ||||||||
Attached Files | послать сообщение SAS.au3 [^] (2,243 bytes) 29-03-2013 06:35 послать сообщение SAS.exe [^] (303,821 bytes) 29-03-2013 06:35 | ||||||||
Relationships | |||||||||||||||||||||||||||||||
|
Notes | |
(0010935) zed (manager) 28-03-2013 16:29 edited on: 28-03-2013 16:30 |
Походу, инициатор сам решил данную хотелку: pull-request №179, так что открыл тикет. |
(0010936) zarius (reporter) 29-03-2013 06:38 |
Для примера реализации добавил небольшой скрипт "Послать сообщение SAS" (исходники + exe). Резализован с помощью AutoIt v3 (http://www.autoitscript.com/autoit3/) Примеры запуска: ("послать сообщение SAS.exe" MSG "1;58.594136;49.684498;17") - переход к координате с масштабом 17 ("послать сообщение SAS.exe" ?) - выведет хелп по параметрам запуска |
(0010937) Garl (manager) 29-03-2013 11:08 |
может ещё прилепить переключение на карту\слой? |
(0010938) zarius (reporter) 29-03-2013 11:27 |
хм... как вариант можно... только как передавать ИД карты/слоя? а вообще практическое применение переключения карты/слоя извне есть? |
(0010939) Garl (manager) 29-03-2013 11:44 edited on: 29-03-2013 11:44 |
Передавать по уникальному GUID практическое: перейти к координате х.у на карте Z |
(0010940) zarius (reporter) 29-03-2013 12:59 |
вообще думаю будет полезно... посмотрю в эту сторону... |
(0010941) zed (manager) 30-03-2013 21:01 |
А ещё, может оказаться полезным передавать команду на начало загрузки выделенной области. Т.е. передаётся зум, GUID и, скажем, путь до hlg с выделенной областью. Таким образом, можно будет автоматически стартовать загрузку сразу для нескольких зумов. |
(0010942) vasketsov (manager) 30-03-2013 21:15 |
Есть подозрение, что передавать команду на начало загрузки выделенной области надо через какой-нибудь файл типа sls, ибо число параметров при загрузке области дюже велико, чтобы их все запихать в строку, да и меняться оно может, а функциональность sls и так их (все параметры сессии загрузки) замечательно покрывает. Хотя конечно в команде можно перекрыть Zoom и Guid. |
(0010985) zarius (reporter) 04-04-2013 09:40 |
В процедуру приема сообщений из других приложений добавил отработку новых действий: 5. изменение карты/слоя по GUID (в случае со слоем - активация/деактивация в зависимости от текущего состояния) 6. установка признака видимости меток на карте (1 - видимы; 0 - не видимы) |
(0010987) zarius (reporter) 04-04-2013 09:47 |
Вот сейчас думаю как сделать так чтобы с помощью SAS "снимать" необходимую координату. Например, поступает сообщение с режимом "снять координату" - в SASе устанавливается некий флаг ожидания двойного щелчка мыши. После выполнения оного SAS инициирует пересылку этих координат так же через SendMessege обратно (в этом случае необходимо передавать и хранить в SASе хэндл вызывающего приложения). Может данную ситуацию можно отработать другим способом? К слову, сейчас я ее отрабатываю через установку временной метки на карту - но не очень нравится интерактивность данного действа. |
(0010988) vasketsov (manager) 04-04-2013 10:01 |
>как сделать так чтобы с помощью SAS "снимать" необходимую координату >устанавливается некий флаг ожидания двойного щелчка мыши >инициирует пересылку этих координат так же через SendMessege >хранить в SASе хэндл вызывающего приложения Вы это всё реально хотите? Пулреквест не примут, я гарантирую это. Потому что это бред. Максимум что получится (если vdemidov будет в хорошем настроении) - PostMessage на хэндл из WM_COPYDATA, а упаковать текущие координаты в 2 Integer-а можно просто умножив их на $B60000 и округлив до целого, ошибка на экваторе будет меньше сантиметра: // $B60000 = 11927552 // максимум = 2146959360 = 7FF80000 // квант = 0.000000083839500343406 // при длине экватора 40075км одному кванту соответствует 9мм на экваторе c_COORD_to_INT = $B60000; зы. Надо будет ещё сделать команду типа M/CAT_NAME/MARK_NAME/IMG_NAME/kml/56.711,60.718,125 для создания или обновления метки (по аналогии с тем, что я делал для внутреннего httpd). Но это я сам сделаю, когда этот пункт закроется, чтобы лишний раз не ковыряться, потом если надо будет - перетащите. |
(0010990) zarius (reporter) 04-04-2013 10:17 |
PostMessage тоже неплохо :) спасибо за идею По работе с метками думал, но пока решил повременить - сейчас работаю напрямую через БД SQLite (еще раз спасибо за реализацию). Кстати, есть ли новости на этом плане? Можно ли надеяться что эти изменения войдут в основную ветку? |
(0010991) vasketsov (manager) 04-04-2013 10:21 |
>Можно ли надеяться что эти изменения войдут в основную ветку? Надеяться можно )) |
(0010992) vdemidov (manager) 04-04-2013 10:34 |
Я бы все-таки посоветовал переделать идентификаторы операций с чисел на осмысленные слова. А еще лучше реализовать что-то типа параметров коммандной строки и использовать этот же код и при запуске. |
(0010993) zarius (reporter) 04-04-2013 10:53 |
>Я бы все-таки посоветовал переделать идентификаторы операций с чисел на осмысленные слова. При наличии большого числа режимов - действительно имеет смысл, так что согласен. например: goto = 1. переход к координате; nav = 2. навигация на координату; gotonav = 3. переход к координате с навигацией; zoom = 4. изменение зума map = 5. изменение карты/слоя по GUID marks = 6. установка признака видимости меток на карте mark = добавление/удаление/обновление метки нормально? или есть что поправить? |
(0010994) zarius (reporter) 04-04-2013 10:58 edited on: 04-04-2013 11:03 |
>А еще лучше реализовать что-то типа параметров коммандной строки и использовать этот же код и при запуске. хм.. сомневаюсь что объединение с режимом запуска из ком. строки будет оправданным, т.к. некоторых результатов можно достичь только за несколько вызовов. С командной же строкой мы ограничены одним вызовом. Хотя возможно это когда-нибудь пригодиться. P.S. кроме того при запуске этих же результатов можно достичь правкой ini |
(0010995) zed (manager) 04-04-2013 11:05 |
Как вариант, можно выдумать свой файл сценариев и передавать его на вход при запуске. Но задача сильно усложняется. |
(0010996) vdemidov (manager) 04-04-2013 11:05 |
Лучше сделать как параметры в командной строке: --move=({lon},{lat}) --zoom={value} --navigation=({lon},{lat}) --map={GUID} --show-placemarks={0/1} --insert-placemark=("{name}";{lon},{lat};....) И тд. Тогда их можно будет спокойно комбинировать без создания таких странных гибридов как gotonav. Можно будет сделать передачу их из коммандной строки заменив существующую обработку Можно будет сделать что бы при запуске второй копии САСа с параметрами, она не стартовала а просто передавала команду уже запущенной версии. |
(0010997) vasketsov (manager) 04-04-2013 11:12 |
1. gotonav реально отдельный нужен, нельзя парой goto+nav обойтись? 2. marks как-то непонятно, что show или hide или что это visibility. 3. mark - имеет смысл разделять (создание+обновление) и (удаление). это так сказать разные бизнес-процессы. и накосячить шансов меньше. |
(0010998) vdemidov (manager) 04-04-2013 11:35 |
> некоторых результатов можно достичь только за несколько вызовов В том варианте что предлагаю можно несколько команд за раз передать > P.S. кроме того при запуске этих же результатов можно достичь правкой ini Прямая правка чужого конфига не самый лучший вариант - названия параметров могут поменятся в любой момент так как они не относятся к публичному интерфейсу программы. |
(0010999) zarius (reporter) 04-04-2013 12:00 |
>1. gotonav реально отдельный нужен, нельзя парой goto+nav обойтись? Уже тоже думаю, что не нужен. Лучше отдельно goto+nav Остальные пункты тоже поддерживаю. >Можно будет сделать что бы при запуске второй копии САСа с параметрами, она не стартовала а просто передавала команду уже запущенной версии. "ЗА" двумя руками! :) Это реально решит проблему, когда в сторонних приложениях нет возможности создать указатель на "COPYDATASTRUCT". |
(0011000) vdemidov (manager) 04-04-2013 12:04 |
> "ЗА" двумя руками! :) Это реально решит проблему, когда в сторонних приложениях нет возможности создать указатель на "COPYDATASTRUCT". Ну так вперед. Только хорошо бы новый парсер комманд вынести в отдельный класс, который будет получать необходимые для работы интерфейсы в конструкторе, но это всегда успеется. |
(0011001) zarius (reporter) 04-04-2013 12:17 |
>Ну так вперед. Начну копать в этом направлении. Думаю что надо предусмотреть что то вроде --handle={win_handle} чтобы можно было команды посылать направленно. |
(0011006) vasketsov (manager) 04-04-2013 19:36 |
>handle={win_handle} OMG. Что это? Если это хендл окна клиента - то почему вообще такая дурная мысль возникла, что клиент у саса будет один с одним окном? >чтобы можно было команды посылать направленно Надо не команды посылать направленно, а отвечать только тому клиенту, который запросил данные (если в данных есть hwnd - ради бога). Совершенно стандартный клиент-серверный подход. Клиент шлёт запрос, а сервер на него отвечает. Близкая аналогия - протокол FTP. |
(0011007) zarius (reporter) 05-04-2013 05:19 edited on: 05-04-2013 05:20 |
Попробую пояснить: если организовать выполнение команд через командную строку и при этом "сделать что бы при запуске второй копии САСа с параметрами, она не стартовала а просто передавала команду уже запущенной версии" - как будет осуществляться поиск этой уже запущенной версии? А если в текущий момент запущено более одной копии САС? Будет неприятно, если, например, метка добавиться не в ту копию САСа. Имхо, если хэндл передан - команду транслировать в него, иначе - осуществлять поиск по заголовку окна. Или я как то не так понял замысел? |
(0011008) vasketsov (manager) 05-04-2013 06:23 |
>сделать что бы при запуске второй копии САСа с параметрами, она не стартовала а просто передавала команду уже запущенной версии Это слишком глобальная задача, чтобы её тут решать. И в такой формулировке решение её бессмыслено. Передача парамеров нужна для блокированных меток в SML? Так давайте проблему решать, а не гланды рвать через анус. А если другая версия саса работает по другой базе меток SML? Почему вообще сас должен слать командную строку, а не какая-то другая микроEXEха, специальным образом обученная для этого, в том числе обученная на поиск нужного саса? >как будет осуществляться поиск этой уже запущенной версии? Давайте этот вопрос оставим за рамками этой темы. Я вам могу сразу написать, что однозначно 100% работающего решения нет, даже регистрация широковещательного сообщения и рассылка его не всегда спасут. А handle у окна в процессе жизни приложения может меняться. >Будет неприятно, если, например, метка добавиться не в ту копию САСа В настоящий момент метка либо не добавится вообще в случае блокированного SML, либо без проблем добавится во всех остальных случаях. Как она может добавиться не в ту копию? Если что-то будете делать с метками - тут неважно, по какой причине она не добавилась, или почему добавилась. Просто пробуем добавить, если обломились - ошибка. >иначе - осуществлять поиск по заголовку окна шутить изволите? ну найдёте 25 сасовых окон - кому слать будемте? |
(0011009) zarius (reporter) 05-04-2013 06:49 |
>Почему вообще сас должен слать командную строку, а не какая-то другая микроEXEха Сейчас у меня так и работает: за пересылку отвечает откомпиленный скрипт. Но vdemidov предложил перенести этот функционал в САС и мне это понравилось - возрастает удобство использования этого функционала. Или все таки в папку с САСом класть некий exe для выполнения этих команд? Давайте определяться... >А если другая версия саса работает по другой базе меток SML? А какая разница с какой базой работает вызываемая версия САС, если работать с метками будет именно она своими локальными механизмами? >ну найдёте 25 сасовых окон - кому слать будемте? Первому попавшемуся. А вот если задача будет стоять переслать конкретному экземпляру САС из 25 запущенных - это задача уже для того, кто команды посылает - для этого и необходим хендл конкретного САСа в командной строке. Имхо, иначе задачу не решить - либо экземпляр один и мы с ним работаем, либо, если предполагается несколько экземпляров - работаем с заранее определенным - и данную задачу надо решать на уровне приложения, откуда вызывается новый экземпляр САСа с командной строкой. |
(0011010) zarius (reporter) 05-04-2013 07:05 |
Возможно мы разговариваем о разных вещах и не понимаем друг друга... опишу как я понял идею vdemidov'а: при запуске САСа с командной строкой - САС определяет что за команды и что с ними делать - либо запускаться самому в обычном режиме с выполнением этих команд, либо передать данные команды другой копии уже запущенного САСа через WM_COPYDATA с последующим завершением работы по окончании передачи команд. |
(0011011) zarius (reporter) 05-04-2013 07:10 |
>ну найдёте 25 сасовых окон - кому слать будемте? Как вариант при отсутствии хэндла конкретного САСа в командной строке можно выдавать предупреждение и не выполнять команды при наличии нескольких запущенных экземпляров САС. |
(0011012) vdemidov (manager) 05-04-2013 08:13 |
Все правильно. Именно это я и имел в виду. Тот же GE именно так и делает, ну или очень похоже. |
(0011014) vasketsov (manager) 05-04-2013 09:07 |
>Но vdemidov предложил перенести этот функционал в САС и мне это понравилось Это глупость. Сам vdemidov ещё раз подумает, и сам кода-нибудо этого дойдёт. Ибо это нужно ТОЛЬКО для лечения родовых травм саса. Именно это и называется рвать гланды через анус. Лечить надо болезнь, а не её побочные симптомы, никто не лечит грипп платочком (а если лечит - это не лечение, а ожидание, что само рассосётся). >возрастает удобство использования этого функционала Какого этого? Поднять сас с кучей памяти вместо микропрограмки или скрипта? Я вас умоляю... ничего удобнее и быстрее чем послать команду напрямую сасу из скрипта сделать не получится по определению, ибо именно в этом случае устраняются все ненужные прослойки между источником данных и их получателем. >класть некий exe для выполнения этих команд? Зачем обязательно EXE? Плясать надо от печки. Если сейчас данные для саса в скрипте - оттуда и слать. Если данные в другой программе - оттуда и слать. Если надо играться руками - ну сделайте EXE для игр, если будет проще, но по мне так это ненужная прослойка, играться можно и из скрипта. Я вообще не понимаю, почему возникла ХУДШАЯ идея из всех возможных - свой костыль типа DDE через командную строку и мегатяжёлую EXE-ху? >Давайте определяться Я предлагаю по крайней мере в этой теме в рамках этой доработки не делать пересылку между сасами, а только локальную обработку. Если она (обработка) будет вместе с обработкой CmdLine в одном обработчике - да за ради бога. >А какая разница с какой базой работает вызываемая версия САС Объясняю. Идея пересылки информации между сасами о необходимости создания метки родилась, потому что сас монопольно блокирует SML. То есть другой сас, чтобы записать метку в свою базу меток (из которой он в лучшем случае может только читать), должен попросить ДРУГОГО саса (причём именно того, кто захватил именно его SML на запись, а не любого произвольного), не будет ли любезен многоуважаемый джинн записать ему меточку в SML. Так что ответ "первому попавшемуся" априори неуместен, так как "первый попавшийся" может либо сам быть без доступа на запись в SML, либо вообще может записать метку в ДРУГУЮ базу SML, и в итоге плохо будет обоим сасам. Рассуждать о ситуации, когда база SML недоступна на запись, и ни один из опрошенных сасов тоже не может в неё записать, я даже не хочу, потому что это будет слишком нечестно. >при отсутствии хэндла конкретного САСа в командной строке А если хэндл есть, но он стал чужой? Или другой сасзапущен на другом мониторе на другом рабочем столе под другим юзером в другой WinStation? >не выполнять команды при наличии нескольких запущенных экземпляров САС Зачем в сасе новые мертворожденные поделки, которые не работают в случае кучи часто изпользуемых вариантов? Их тут и так хватает. >Тот же GE именно так и делает Это не повод заниматься такими же глупостями. У GE выбора нет. А у саса есть. |
(0011015) vdemidov (manager) 05-04-2013 09:43 |
>>Тот же GE именно так и делает > Это не повод заниматься такими же глупостями. У GE выбора нет. А у саса есть. У любой программы, которая хочет зарегистрировать под себя какое-то расширение файлов и не открывать новую копию себя при каждом запуске файла с таким расширением, нет выхода кроме как поступать таким образом (Прмеры: Picasa, WinAmp, MPC-HC, GE, Opera, Notepad++ и еще миллион других программ). Но согласен, что в данной теме это оффтопик. Главное, что я предлагал, так это делать команды совместимые с командной строкой, все остальное это уже детали реализации |
(0011016) zarius (reporter) 05-04-2013 11:02 |
>Поднять сас с кучей памяти вместо микропрограмки или скрипта? Тоже не нравится этот момент. Понятно что если и делать - делать до инициализации основных объектов САСа, но спасет ли это положение? >Зачем обязательно EXE? Затем, что намного проще прописать интеграцию через CmdLine - практически любой пользователь сможет сделать это. Кроме того, не каждое приложение может использовать WM_COPYDATA (закрытость кода и все такое). >Идея пересылки информации между сасами о необходимости создания метки родилась, потому что сас монопольно блокирует SML. Не знал об этой идее. Мое мнение - не стоит использовать механизм "пересылки информации между сасами" чтобы решить проблему блокировки SML другим САСом. Вот это точно из разряда "мертворожденные поделки". "Лечить надо болезнь, а не её побочные симптомы" - и я с этим полностью согласен. Если необходимо одновременное использование меток разнымим САСами - необходимо развивать БД меток (SQLite и прочие СУБД) >А если хэндл есть, но он стал чужой? Это проблема вызывающего приложения >Или другой сасзапущен на другом мониторе на другом рабочем столе под другим юзером в другой WinStation? Данный функционал не предназначен для решения описанных задач. |
(0011019) zarius (reporter) 05-04-2013 11:19 |
В общем я понял что в сторону обработки CmdLine пока не смотрим Тогда по поводу перевода числовых режимов на рекомендованные vdemidov'ым: в контексте CmdLine - все здорово, иначе - слишком длинные имена и "лишняя" строковая обработка - надо ли? |
(0011021) vdemidov (manager) 05-04-2013 11:41 |
> в контексте CmdLine - все здорово, иначе - слишком длинные имена и "лишняя" строковая обработка - надо ли? по сравнению с затратами на передачу сообщения и данных между процессами это капля в море. Единственный вопрос это достаточно большая сложность кода. Поэтому советую выносить это в отдельный модуль и сразу писать юнит-тесты. |
(0011022) vasketsov (manager) 05-04-2013 12:03 |
>нет выхода кроме как поступать таким образом Да ладно ))) Можно зарегистрировать не себя, а микроEXE или скрипт. Соответственно они либо через WM_COPYDATA работают, или через внутренний httpd (из того же консольного скрипта отправлять запросы на http до неприличия просто). Можно зарегистрировать обработчиком через RunDll32 свою DLL, её же грузить в сасе, а между копиями DLL хоть NamedPipe себе устроить. Можно ещё настоящий DDE вспомнить. >делать команды совместимые с командной строкой Адназначна. Доступ через WM_COPYDATA - это же по сути легковесный локальный аналог внутреннего httpd, который бы позволил в том числе управлять сасом по сети. И как только в сасе появится внутренний httpd - так сразу же возникнет задача присовокупления обработчика CmdLine + WM_COPYDATA к обработчику внутреннего протокола sas:// (ну или наоборот). >если и делать - делать до инициализации основных объектов САСа Если это сделать ДО инициализации - как не профукать такой тонкий момент, что захвативший ранее SML сас сдох, и мы можем смело сами писать в базу меток? Я потому и предлагаю СОВСЕМ разделить функциональность отправителя и получателя данных, чтобы такой ерунды не возникало. >намного проще прописать интеграцию через CmdLine Не совсем. Это проще, если другого способа нет. Тогда действительно придётся писать маааленькую такую EXEху. Но во-первых она сама не будет ничего блокировать типа SML и будет маленькая и быстрая. Ей надо только уметь транслировать CmdLine в WM_COPYDATA и всё. Во-вторых, она сама будет искать нужный ей сас, а в сасе этот ненужный код не будет присутствовать. В-третьих, код пересылки всё равно писать, какая разница где, в сасе или нет? В-четвёртых, если всё же есть возможность напрямую работать с сасом без неё - она становится не нужна. >не стоит использовать механизм "пересылки информации между сасами" чтобы решить проблему блокировки SML другим САСом Именно так. А если поглядеть на параметры, которые сейчас передаются в сас, то там есть параметры: а) типа zoom - которые очевидно никуда пересылать не надо, если мы их сразу передали куда надо, так как каждый сас зумится сам по себе независимо от собратьев (даже скрыть-показать метки сюда же относится); б) типа mark для меток - и эти команды надо слать, потому что SML и всё такое. Так что непересылка первых между сасами решается определением правильного адресата, непересылка вторых между сасами - лечением SML. >>А если хэндл есть, но он стал чужой? >Это проблема вызывающего приложения Нет. Это проблема подхода, потому что невозможно дать гарантию, что между "нашли hwnd саса" и "отправили ему сообщение" окно всё ещё наше. И чем больше времени между этими событиями, чем больше шансов послать сообщение в /dev/null. >не предназначен для решения описанных задач Вот именно. Работать будет только в стерильном окружении. Даже если я запускаю 2 саса - уже работать не будет. А 2 саса - это стандартный минимум, один качает, другой из-под delphi запущен. А то бывает и больше. Про терминальный доступ тоже можно сразу забыть. Вот покуда и непонятно, ради чего такая кастрация функциональности, если можно и без неё. >я понял что в сторону обработки CmdLine пока не смотрим Нет. Не смотрим в сторону межсасового взаимодействия. >слишком длинные имена и "лишняя" строковая обработка - надо ли? Да. Если создать новые строковые константы - больше на памяти потеряется. Максимум что имеет смысл оптимизировать - это а) заранее привести к одному регистру и б) откусывать от строки минимальный отличающийся от остальных кусок с начала строки и сравнивать его. Но я уверен, что там и без оптимизации всё будет летать. |
(0011023) zarius (reporter) 05-04-2013 14:12 |
>Даже если я запускаю 2 саса - уже работать не будет В моем случае - неважно сколько запущено САСов. Из своего приложения я сам запускаю нужный мне экземпляр САС и получаю его хэндл - далее я работаю только с ним: отправляю команды, меняю размеры, сворачиваю/разворачиваю, делаю поверх всех окон, закрываю и т.д. Но, естественно, это будет работать только в рамках одного рабочего места - в моем случае по другому и не требуется. >...окно всё ещё наше хм... а в каком случае хэндл окна может поменяться? ну... понятно что при желании скорее всего можно, но в нашем случае как без специальных ухищрений? |
(0011024) vasketsov (manager) 05-04-2013 14:56 |
>я сам запускаю нужный мне экземпляр САС >в моем случае по другому и не требуется Особенность вашей ситуации в том, что реализуются не все возможные варианты. И я реально не понимаю, зачем такую специфику превносить в общий код. >а в каком случае хэндл окна может поменяться? Попробуйте поискать по дельфёвым исходникам CreateWnd и RecreateWnd. |
(0011111) vasketsov (manager) 16-04-2013 20:13 |
Полуслучайно натолкнулся - и решил сохранить тут, чтобы не потерялось. Пример отправки WM_COPYDATA из perl-а: http://johnbokma.com/mexit/2007/01/17/snarl-with-perl.html |
(0012813) frech (reporter) 16-09-2013 17:38 |
запускаю скрипт, но нет результатов. Как все это реализовать через .NET. Так как пищу софт, а там надо по клику переходить к координатам (САС). |
(0012815) zarius (reporter) 17-09-2013 06:21 |
>запускаю скрипт, но нет результатов Какую версию используете? На текущей сборке проекта все должно работать. На версии v.121010 (последняя стабильная на http://sasgis.org/download/) работать не будет - функционал был добавлен позднее. >Как все это реализовать через .NET Поищите реализацию отправки сообщения WM_COPYDATA для .NET - что передавать в сообщении наглядно показано в скрипте. |
(0014733) zed (manager) 27-10-2014 17:13 |
Основательно переделал обработку событий WM_COPYDATA. Теперь параметры из сообщений и опции командной строки обрабатываюся одинаково. Соответственно, поменялись как сами опции (имена), так и коды возврата. Сделано, как описано здесь: 0001869:0010996 Доступные параметры: --move=({lon},{lat}) --zoom={value} --navigation=({lon},{lat}) --map={GUID} --show-placemarks={0/1} Тестируйте. |
(0014734) zarius (reporter) 28-10-2014 09:40 |
Отлично! Радует что тема получает продолжение! |
(0014735) vdemidov (manager) 28-10-2014 11:06 |
Только нужно еще поправить генерацию параметров для создаваемого ярлыка, а то они там сейчас в старом формате создаются, если я ничего не путаю. |
(0014736) zed (manager) 28-10-2014 11:08 |
Что ещё за ярлык? |
(0014737) vdemidov (manager) 28-10-2014 11:21 |
В меню Файл есть кнопочка создания ярлыка на текущую позицию. |
(0014738) zed (manager) 28-10-2014 11:44 |
> В меню Файл есть кнопочка создания ярлыка на текущую позицию. Ага, точно. Исправил. Добавлена опция для вставки метки: --insert-placemark="{name}";({lon},{lat});"{desc}" и добавил возможность импортировать файлы (всех поддерживаемых форматов), правда при импорте через командную строку получается облом, т.к. база меток оказывается ещё неинициализирована на момент вставки. Но через сообщения должно работать. Базу меток надо дорабатывать, чтобы у нас всегда была in-memory база, которую можно юзать сразу же при запуске приложения. Она должна быть временной, но с возможностью переноса меток из этой БД в основную. Об этом был разговор ещё в 0000033 и импорт меток через командную строку, видимо, будет ещё ждать своего часа. zarius Радует, что вы ещё с нами. Займитесь тестирование фичи? Я обработку сообщений вообще не тестировал, поэтому очень желательно всё проверить. |
(0014739) vdemidov (manager) 28-10-2014 11:54 |
>Базу меток надо дорабатывать, чтобы у нас всегда была in-memory база, которую можно юзать сразу же при запуске приложения. Она должна быть временной, но с возможностью переноса меток из этой БД в основную. Ага. Для этого кстати можно существующую SML порезать и будет in-memory база. Нужно только выкинуть все сохранения и свой генератор id-шников сделать хотя бы на базе простого интового счетчика. |
(0014740) zed (manager) 28-10-2014 11:58 |
Да, там много чего нужно сделать. Нужно научиться работать сразу с несколькими БД и переносить метки между ними. На это дело вообще нужно открыть отдельный тикет и связать с 0000033 как блокирующий. |
(0014741) zarius (reporter) 28-10-2014 12:54 |
>Займитесь тестирование фичи? Постараюсь седня-завтра собрать проект и потестить >Нужно научиться работать сразу с несколькими БД и переносить метки между ними Можно поподробнее? |
(0014742) zed (manager) 28-10-2014 13:03 |
> Можно поподробнее? А что тут не понятно? Сейчас есть одна база меток, а надо чтобы можно было подключить сразу несколько и разных типов. Я это замечание сделал к тому, что нужно дорабатывать IMarkSystem, иначе импорт меток из командной строки работать не будет, несмотря на то, что такая обработка уже предусмотрена и должна работать через WM_COPYDATA. |
(0014743) vdemidov (manager) 28-10-2014 13:08 |
>Да, там много чего нужно сделать. Нужно научиться работать сразу с несколькими БД и переносить метки между ними. Так вроде никаких проблем. Оно прекрасно будет работать. У метки есть поле с DbId. Так что оно опознает чужие метки. Нужно только в ГУЙ добавить отображение временной базы как отдельной категории в базе меток. |
(0014744) zarius (reporter) 28-10-2014 13:47 |
>А что тут не понятно? Сейчас есть одна база меток, а надо чтобы можно было подключить сразу несколько и разных типов Не понятно, что имеется под "БД разных типов" и как их планируется подключать. Сейчас, насколько я знаю, имеется только один формат БД меток - это SML (проект SACS, как я понимаю, здесь не рассматриваем). Или имеется ввиду, что в качестве БД меток подключать импортируемые файлы kml и т.д.? |
(0014745) zed (manager) 28-10-2014 14:40 edited on: 28-10-2014 14:52 |
> что имеется под "БД разных типов" и как их планируется подключать Ну вот как тайлы хранятся в разных типах кэша, так же и метки нужно сделать. И пока что не суть важно, как конкретно другие базы меток будут их хранить. Важно, что нету механизма подключения/переключения/взаимодействия разных БД, а он нужен в первую очередь. Для кэша тайлов, я помнится, очень легко и непринуждённо сделал и подключил RAM-кэш, потому что механизм там был заложен уже давно. В метках же такого нету, и несмотря на то, что сделать RAM-кэш для меток может быть очень просто, подключить его может оказаться на порядок сложнее. Сейчас вся логика завязана на то, что есть одна-единственная "рабочая" база меток и вот эту логику нужно изменять, чтобы одновременно можно было сделать рабочими несколько разных баз. Даже SML базы можно подключать из разных директорий в различных режимах чтения/записи. |
(0014746) zarius (reporter) 28-10-2014 15:04 |
Теперь все понятно. И, хотя, именно это я надеялся услышать - все же были сомнения, что я понял что то не так. Думаю, что это именно то, чего так не хватало в подсистеме меток - "механизма подключения/переключения/взаимодействия разных БД". |
(0014747) vdemidov (manager) 29-10-2014 08:18 |
Еще было бы круто, если бы при запуске второго экземпляра программы с парметрами, но без указания параметра --new-instance, что бы все параметры передавались уже запущенному экземпляру через WM_COPYDATA и новый экземпляр сразу закрывался. Тогда можно добавлять ассоциации с любыми поддерживаемыми расширениями и не нужны никакие дополнительные утилиты для управления из командной строки. |
(0014748) zed (manager) 29-10-2014 08:21 |
Тут возникает много вопросов и это нужно обсуждать отдельно. |
(0014758) vdemidov (manager) 29-10-2014 08:40 |
А в чем вопросы? ИМХО единственная проблема, это поиск окна, которому слать сообщение WM_COPYDATA и что делать если подходящих окон несколько. |
(0014760) zed (manager) 29-10-2014 08:46 |
Проблема не единственная. Обработку параметров как минимум нужно переносить на более ранний этап. |
(0014761) vdemidov (manager) 29-10-2014 08:50 |
Не всю, а только дополнительные проверки. То есть до создания главной формы нам нужно только проверить наличие параметра --new-instance и если его нет, то попытаться найти другой экзепляр, которому отослать весь пакет параметров без детального разбора. |
(0014762) zarius (reporter) 29-10-2014 08:52 |
>что бы все параметры передавались уже запущенному экземпляру через WM_COPYDATA Эта тема уже поднималась, но была зарублена vasketsov'ым. Насколько помню, из-за не эффективности такого подхода. Возможно будет проще в каталог с SASом положить исполняемый файл (к примеру, тот же скопмилированный скрипт), через которого и передавать сообщения в уже запущенный SAS. Но опять встает уже поднимавшийся ранее вопрос - как определить в какой из экземпляров SASа передавать эти сообщения, если этих экземпляров будет несколько. В общем - есть над чем подумать. |
(0014764) zed (manager) 29-10-2014 08:53 |
Ну вот и говорю - куча нюансов, которые решать нужно отдельно. А в этом тикете я жду фидбека от zarius и закрываю. |
(0014767) zarius (reporter) 29-10-2014 09:02 |
>определить в какой из экземпляров SASа передавать эти сообщения, если этих экземпляров будет несколько Как вариант - назначать при необходимости некий ИД запускаемому SAS. К примеру, --ID="FIRST". Тогда при посылке сообщений мы так же указываем этот ИД. Без указания ИД сообщение уходит первому попавшемуся экземпляру SAS. |
(0014768) vdemidov (manager) 29-10-2014 09:09 |
На первое время варниант "уходит первому попавшемуся экземпляру" более чем достаточен. А вот уже дальше можно придумывать. |
(0014770) zed (manager) 29-10-2014 09:29 |
На первое время, достаточно открыть новый тикет и вносить все предложения там. |
(0014773) zarius (reporter) 29-10-2014 11:29 |
>А в этом тикете я жду фидбека от zarius Проверил работу как при запуске приложения, так и при пересылке сообщений: все команды работают, за исключением "--insert-placemark" - в режиме запуска ничего не происходит (метку не добавляет), в режиме сообщений выдает ошибку http://oi62.tinypic.com/28vskes.jpg сообщение посылал: --insert-placemark="p1";(49.684498,58.594136);"МЕТКА1" |
(0014775) vdemidov (manager) 29-10-2014 11:45 |
Ну да. Все правильно. Zed создает новую категорию TEMP, но не сохраняет ее в базе перед сохранением метки. |
(0014778) zarius (reporter) 29-10-2014 12:05 |
>Zed создает новую категорию TEMP, но не сохраняет ее в базе перед сохранением метки Подтверждаю - после создания категории "TEMP" - метка появляется в режиме сообщений В режиме запуска как и раньше - метка не появляется даже при наличии категории "TEMP" |
(0014779) vdemidov (manager) 29-10-2014 12:09 |
>В режиме запуска как и раньше - метка не появляется даже при наличии категории "TEMP" Это как раз ожидаемо. Zed сразу сказал, что "правда при импорте через командную строку получается облом, т.к. база меток оказывается ещё неинициализирована на момент вставки." |
(0014780) zarius (reporter) 29-10-2014 12:13 |
>правда при импорте через командную строку получается облом, т.к. база меток оказывается ещё неинициализирована на момент вставки в принципе понятно почему метка не появляется в режиме запуска - можно оно и не надо в этом режиме? |
(0014781) zed (manager) 29-10-2014 12:14 |
vdemidov Так, значит нужно куда-то впереть UpdateCategory(nil, NewCat) и всё? zarius Проверьте ещё импорт файлов меток и jpeg с exif. Там эта обработка тоже прикручена: SASPlanet.exe file1 file2 ... fileN |
(0014782) vdemidov (manager) 29-10-2014 12:23 |
Просто если ты делаешь UpdateMark то ожидается что метки уже готовы для импорта. Что они относятся к категориям из обновляемой базы и тд. Если ты импортируешь сторонние метки, то тогда нужно вызывать ImportItemsTree. Хотя мне все еще не нравится вся эта лабуда. Просто не могу придумать как сделать и удобно и эффективно. |
(0014784) vdemidov (manager) 29-10-2014 12:27 |
В тупую UpdateCategory(nil, NewCat) так как он втупую сделает еще одну категорию с таким именем. Нужно проверять наличие категории перед созданием. Мы ж вроде бы это обсуждали, когда ты импорт sml допиливал. |
(0014791) zed (manager) 29-10-2014 13:04 |
Вот так должно работать? |
(0014793) vdemidov (manager) 29-10-2014 13:14 |
Должно. Единственная особенность, что даже если метка/метки не будут импортированы из-за ошибки, категория TEMP создастся в любом случае. |
(0014794) zarius (reporter) 29-10-2014 14:08 |
>Проверьте ещё импорт файлов меток Не совсем понял что проверять - проверил на свежесобранной SAS - kml, kmz и sml в режиме запуска не импортируются |
(0014795) zed (manager) 29-10-2014 14:49 |
> kml, kmz и sml в режиме запуска не импортируются А через сообщения должно работать. Я же писал, что работа с метка через командную строку пока недоступна. |
(0014800) zarius (reporter) 30-10-2014 06:18 |
>Я же писал, что работа с метка через командную строку пока недоступна. Это я как раз понял... смутило "SASPlanet.exe file1 file2 ... fileN" |
(0014839) zed (manager) 01-11-2014 10:54 |
Параметр --navigation=({lon},{lat}) переименован в --navigate=({lon},{lat}) |
Users who viewed this issue | |
User List | Anonymous (9555x), al_b (1x), stepanxxx (1x), antares84 (2x), vdemidov (18x), sergeyka (2x), Tolik (2x), Snake (1x), rass (1x), whoim (1x), SlavutichRED (2x), ygorigor (1x), centron (1x), zed (6x), karat440 (4x), Vinil_37 (2x), bk99 (2x), Crursh-91 (2x), VMatveev (1x), Parasite (3x), hrucker (12x), aflexus (2x), Garl (3x), DimaDD (6x), zarius (4x), gma (4x), ingener (2x), Dred (1x), GunSmoker (3x) |
Total Views | 9645 |
Last View | 23-11-2024 09:27 |
Issue History | |||
Date Modified | Username | Field | Change |
22-03-2013 13:03 | zarius | New Issue | |
22-03-2013 13:57 | vdemidov | Status | new => resolved |
22-03-2013 13:57 | vdemidov | Resolution | open => won't fix |
22-03-2013 13:57 | vdemidov | Assigned To | => vdemidov |
22-03-2013 13:57 | vdemidov | Status | resolved => closed |
28-03-2013 16:29 | zed | Note Added: 0010935 | |
28-03-2013 16:29 | zed | Assigned To | vdemidov => |
28-03-2013 16:29 | zed | Status | closed => confirmed |
28-03-2013 16:30 | zed | Note Edited: 0010935 | View Revisions |
29-03-2013 06:35 | zarius | File Added: послать сообщение SAS.au3 | |
29-03-2013 06:35 | zarius | File Added: послать сообщение SAS.exe | |
29-03-2013 06:38 | zarius | Note Added: 0010936 | |
29-03-2013 11:08 | Garl | Note Added: 0010937 | |
29-03-2013 11:27 | zarius | Note Added: 0010938 | |
29-03-2013 11:44 | Garl | Note Added: 0010939 | |
29-03-2013 11:44 | Garl | Note Edited: 0010939 | View Revisions |
29-03-2013 12:59 | zarius | Note Added: 0010940 | |
30-03-2013 21:01 | zed | Note Added: 0010941 | |
30-03-2013 21:15 | vasketsov | Note Added: 0010942 | |
04-04-2013 09:40 | zarius | Note Added: 0010985 | |
04-04-2013 09:47 | zarius | Note Added: 0010987 | |
04-04-2013 10:01 | vasketsov | Note Added: 0010988 | |
04-04-2013 10:17 | zarius | Note Added: 0010990 | |
04-04-2013 10:21 | vasketsov | Note Added: 0010991 | |
04-04-2013 10:34 | vdemidov | Note Added: 0010992 | |
04-04-2013 10:53 | zarius | Note Added: 0010993 | |
04-04-2013 10:58 | zarius | Note Added: 0010994 | |
04-04-2013 11:03 | zarius | Note Edited: 0010994 | View Revisions |
04-04-2013 11:05 | zed | Note Added: 0010995 | |
04-04-2013 11:05 | vdemidov | Note Added: 0010996 | |
04-04-2013 11:12 | vasketsov | Note Added: 0010997 | |
04-04-2013 11:35 | vdemidov | Note Added: 0010998 | |
04-04-2013 12:00 | zarius | Note Added: 0010999 | |
04-04-2013 12:04 | vdemidov | Note Added: 0011000 | |
04-04-2013 12:17 | zarius | Note Added: 0011001 | |
04-04-2013 19:36 | vasketsov | Note Added: 0011006 | |
05-04-2013 05:19 | zarius | Note Added: 0011007 | |
05-04-2013 05:20 | zarius | Note Edited: 0011007 | View Revisions |
05-04-2013 06:23 | vasketsov | Note Added: 0011008 | |
05-04-2013 06:49 | zarius | Note Added: 0011009 | |
05-04-2013 07:05 | zarius | Note Added: 0011010 | |
05-04-2013 07:10 | zarius | Note Added: 0011011 | |
05-04-2013 08:13 | vdemidov | Note Added: 0011012 | |
05-04-2013 09:07 | vasketsov | Note Added: 0011014 | |
05-04-2013 09:43 | vdemidov | Note Added: 0011015 | |
05-04-2013 11:02 | zarius | Note Added: 0011016 | |
05-04-2013 11:19 | zarius | Note Added: 0011019 | |
05-04-2013 11:41 | vdemidov | Note Added: 0011021 | |
05-04-2013 12:03 | vasketsov | Note Added: 0011022 | |
05-04-2013 14:12 | zarius | Note Added: 0011023 | |
05-04-2013 14:56 | vasketsov | Note Added: 0011024 | |
07-04-2013 10:03 | vdemidov | Target Version | => 24xxxx |
16-04-2013 20:13 | vasketsov | Note Added: 0011111 | |
27-05-2013 08:18 | vdemidov | Resolution | won't fix => open |
16-09-2013 17:21 | vdemidov | Relationship added | has duplicate 0002168 |
16-09-2013 17:38 | frech | Note Added: 0012813 | |
17-09-2013 06:21 | zarius | Note Added: 0012815 | |
22-11-2013 22:27 | vdemidov | Product Version | .Nightly => 131111 |
02-06-2014 08:51 | vdemidov | Relationship added | has duplicate 0002440 |
27-10-2014 17:13 | zed | Note Added: 0014733 | |
27-10-2014 17:15 | zed | Assigned To | => zed |
27-10-2014 17:15 | zed | Status | confirmed => feedback |
27-10-2014 17:16 | zed | Target Version | 24xxxx => 141111 |
28-10-2014 09:40 | zarius | Note Added: 0014734 | |
28-10-2014 09:40 | zarius | Status | feedback => assigned |
28-10-2014 11:06 | vdemidov | Note Added: 0014735 | |
28-10-2014 11:08 | zed | Note Added: 0014736 | |
28-10-2014 11:21 | vdemidov | Note Added: 0014737 | |
28-10-2014 11:44 | zed | Note Added: 0014738 | |
28-10-2014 11:54 | vdemidov | Note Added: 0014739 | |
28-10-2014 11:58 | zed | Note Added: 0014740 | |
28-10-2014 12:24 | zed | Status | assigned => feedback |
28-10-2014 12:54 | zarius | Note Added: 0014741 | |
28-10-2014 12:54 | zarius | Status | feedback => assigned |
28-10-2014 13:03 | zed | Note Added: 0014742 | |
28-10-2014 13:08 | vdemidov | Note Added: 0014743 | |
28-10-2014 13:47 | zarius | Note Added: 0014744 | |
28-10-2014 14:40 | zed | Note Added: 0014745 | |
28-10-2014 14:51 | zed | Note Edited: 0014745 | View Revisions |
28-10-2014 14:52 | zed | Note Edited: 0014745 | View Revisions |
28-10-2014 15:04 | zarius | Note Added: 0014746 | |
28-10-2014 15:31 | vdemidov | Relationship added | related to 0000033 |
29-10-2014 08:18 | vdemidov | Note Added: 0014747 | |
29-10-2014 08:21 | zed | Note Added: 0014748 | |
29-10-2014 08:40 | vdemidov | Note Added: 0014758 | |
29-10-2014 08:46 | zed | Note Added: 0014760 | |
29-10-2014 08:50 | vdemidov | Note Added: 0014761 | |
29-10-2014 08:52 | zarius | Note Added: 0014762 | |
29-10-2014 08:53 | zed | Note Added: 0014764 | |
29-10-2014 09:02 | zarius | Note Added: 0014767 | |
29-10-2014 09:09 | vdemidov | Note Added: 0014768 | |
29-10-2014 09:29 | zed | Note Added: 0014770 | |
29-10-2014 09:59 | vdemidov | Issue cloned: 0002518 | |
29-10-2014 09:59 | vdemidov | Relationship added | related to 0002518 |
29-10-2014 11:29 | zarius | Note Added: 0014773 | |
29-10-2014 11:45 | vdemidov | Note Added: 0014775 | |
29-10-2014 12:05 | zarius | Note Added: 0014778 | |
29-10-2014 12:09 | vdemidov | Note Added: 0014779 | |
29-10-2014 12:13 | zarius | Note Added: 0014780 | |
29-10-2014 12:14 | zed | Note Added: 0014781 | |
29-10-2014 12:23 | vdemidov | Note Added: 0014782 | |
29-10-2014 12:27 | vdemidov | Note Added: 0014784 | |
29-10-2014 13:04 | zed | Note Added: 0014791 | |
29-10-2014 13:14 | vdemidov | Note Added: 0014793 | |
29-10-2014 14:08 | zarius | Note Added: 0014794 | |
29-10-2014 14:49 | zed | Note Added: 0014795 | |
30-10-2014 06:18 | zarius | Note Added: 0014800 | |
30-10-2014 07:07 | zed | Status | assigned => resolved |
30-10-2014 07:07 | zed | Fixed in Version | => 141111 |
30-10-2014 07:07 | zed | Resolution | open => fixed |
01-11-2014 10:54 | zed | Note Added: 0014839 | |
19-02-2016 07:43 | zed | Relationship added | related to 0001000 |
18-07-2018 07:49 | zed | Tag Attached: WM_COPYDATA | |
28-08-2020 06:28 | zed | Relationship added | related to 0003703 |
My View | View Issues | Change Log | Roadmap | Search |
Copyright © 2007 - 2024 SAS.Planet Team |