В идеале, было-бы не плохо оставить функцию mapCreateMap(PChar(MapFileName),PChar(RscFileName),a,b); как есть, она вроде работает хорошо. и отладить функцию MapPaspEdit(aMap,'Map',@f); но чтобы она вызывала файл XML, так как это делает программа ГИС Карта 2011 и шрифты подобрать в этом диалоге такие же, как в ГИС Карта 2011
С указателем в пустоту уже разобрались. Далее по самой функции MapPaspEdit. Для вызова диалога выбора параметров СК из XML необходимо задать INI-файл. Так сложилось исторически и в последующих версиях мы это ограничение уберем. Существовать этому файлу не обязательно. Если задан корректный существующий INI-файл карты, то из него берется путь к XML-файлу с параметрами СК (из параметра CurrentXml в разделе "MAPPASP"). Если задан несуществующий INI или в нем отсутствует путь к XML, будет вызван диалог выбора файла XML (crslist.xml).
Примерный код выглядит так:
Код
procedure TfrmMap.BitBtn1Click(Sender: TObject);
var
f : TTASKPARM;
aMap : HMAP ;
begin
if (not mvMap.Active)
then exit;
FillChar(f, sizeof(f), 0);
f.Language := cML_RUSSIAN;
f.PathShell := GTKPChar(GTKString(ExtractFilePath(Application.ExeName)));
f.IniName := GTKPChar(GTKString(ExtractFilePath(Application.ExeName)+'.ini'));
aMap := mvMap.MapHandle;
if (MapPaspEdit(aMap,GTKPChar(GTKString('Map')), @f) = 0)
then ShowMessage('Ошибка вызова диалога паспорта карты.'+#10#13+
'Либо отмена применения параметров');
end;
Да, теперь вроде заработало. Спасибо. По поводу ini файла, пусть будет мне он не мешает, я все равно его создаю именно так, как вы написали в директории исполнительно файла и с его именем. Я бы еще и усилил, можно было бы сохранять и путь к XML файлу, т.к. он может быть где угодно. Т.е. ссылку на ini файл в последующих версиях я бы не убирал Маленькая ремарка, я вроде нажал кнопку Сохранить, но при выходе меня еще раз переспросили Сохранить, смысл?
И еще одна ремарка, думаю посеръезней, если вызвать диалог Паспорта, Сохранить. Потом еще раз вызвать и нажать просто закрыть диалог, например по кнопке Выход выскакивает это окно, см скриншот
Сергей Викторович написал: ссылку на ini файл в последующих версиях я бы не убирал
Никто и не говорил, что мы его уберем. Просто его отсутствие не будет препятствием для дальнейшего выполнения.
Цитата
Сергей Викторович написал: И еще одна ремарка, думаю посеръезней, если вызвать диалог Паспорта, Сохранить. Потом еще раз вызвать и нажать просто закрыть диалог, например по кнопке Выход выскакивает это окно, см скриншот
Это тот ShowMessage, который я Вам добавил в пример кода (см. выше) в качестве обработки возвращаемого значения от функции MapPaspEdit. Вы можете обработать код возврата как Вам будет угодно. В тексте сообщения все, собственно, и написано - нулевой результат возвращается: а) при ошибке вызова диалога б) если пользователь в диалоге отказался от применения параметров к паспорту карты.
Аналогичным образом, к примеру, системный диалог открытия файла в Delphi для метода TOpenDialog.Execute возвращает false если диалог был вызван, но пользователь от выбора файла отказался.
Просьба на будущее - на форуме все-таки обсуждать проблемы программирования с использованием GIS ToolKit или интерфейса MAPAPI, а не дискутировать на тему корректности сообщений, выдаваемых в текстах публикуемых тут примеров кода.
Oleg Belenkov написал: Сообщение с запросом на сохранение отображается, если Вы нажали Выход вместо Сохранить.
Сообщение "Uzor\Ошибка вызова ..." отсутствует в исходных текстах библиотек GIS ToolKit. Попробуйте найти это сообщение в Ваших исходных текстах.
По второму вопросу. В исходных текстах прикладной программы нет "Ошибка вызова... " Это точно в GIS ToolKit Проверьте еще раз, пожалуйста. По первому вопросу. Я написал порядок действий пользователя. Вначале после сделанных изменений смены проекции карты через XML была нажата кнопка Сохранить. Транзакция была выполнена успешна. При нажатии кнопки Выход, выдано сообщение с приглашением Сохранить изменные данные. Я уже их сохранил, зачем еще раз выдавать это сообщение. По важности решения проблем: второй вопрос очень важный, первый по мере возможности.