На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

KFF (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » KFF
Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 14 15 16 17 18 19 20 21 22 23 24 ... 327 След.
Согласованная фильтрация объектов
 
[QUOTE]LMM написал:
На каких функциях MAPAPI это можно реализовать?[/QUOTE]
1. Создаётся библиотека dll 32 разряда  c двумя экспортными функциями[CODE]exports
 GetInterfaceVersion name 'GetInterfaceVersion',
 CallMapFunction     name 'CallMapFunction';
где
  function GetInterfaceVersion: longint; stdcall;
  function CallMapFunction(map: HMAP; parm: PTASKPARM):longint; stdcall;[/CODE]2. внутри функции CallMapFunction выполняются все операции из сообщения, включая создания форм(ы), установка флажков, и нажатие на кнопку "Выполнить на созданной форме
3. При нажатии кнокпи "Выполнить" (фильтровать и.т.п) выполняется

- загрузить очередной SXF; [CODE] // Загрузить карту из файла SXF
// При ошибке возвращает ноль

_VECIMP long int _VECAPI LoadSxfToMap(char * namesxf, char * namemap, char * namersc, HMESSAGE handle);[/CODE]- выделить все линейные и площадные объекты; [CODE]HSELECT select= mapCreateSiteSelectContext(hMap, hMap); // создание контекста выбора
mapSelectLocal(select, OL_SQUARE | OL_LINE)

select- содержит выделенные объекты карты которые можно

// Выделить на карте объекты, удовлетворющие заданным условим
// hmap   - идентификатор открытых данных
// hwnd   - идентификатор окна вывода
// point - координаты верхнего левого угла окна на карте
// в соответсвующей параметру place системе координат
// select - условия отбора объектов,
// color  - цвет, которым будут выделяться объекты на карте

_MAPIMP void _MAPAPI mapViewSelect(HMAP hmap, HWND hwnd, DOUBLEPOINT *point,
                                  HSELECT select, COLORREF color,
                                  long int place);

mapDeleteSelectContext(select); // очистка контекста выбора

[/CODE]
- запустить саму задачу фильтрации; [CODE] // Фильтрация всех объектов одного листа карты с учетом
// топологических связей с соседними объектами того же листа
// той же карты (фильтруются и соседние объекты, имеющие общие точки;
// концевые общие точки не фильтруются)
// hMap      - идентификатор открытых данных
// hSite     - идентификатор обрабатываемой карты
// list      - номер листа
// precision - точность в метрах на местности
//             (минимальное расстояние от точки до прямой,
//              соединяющей предыдущую и следующую точки)
// hwnd      - идентификатор окна,которое будет извещаться
//             (для отмены сообщений установить идентификатор в ноль)
// Процесс посылает сообщение 0x590:
// wparm : процент обработки,
// lparm : количество обработанных объектов.
//   общее количество = mapGetObjectCount(hMap, list)     - для основной карты
//   общее количество = mapGetSiteObjectCount(hMap, hSit) - для пользовательской
// Для завершения процесса вернуть число 0x590
// При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapGeneralFilterInMap(HMAP hMap, HSITE hSite,
                                              long int list,
                                              double precision/* = DELTANULL*/,
                                              HWND hwnd);[/CODE]- дождаться её завершения (желательно выдать количества точек до и после например в файл);

Процесс посылает сообщение 0x590 в котором можно посчитать количество и тип обработанных объектов

- перейти на следующий SXF...
операторы цикла for do next
MapTask + Embarcadero C++
 
Спасибо =)
MapTask + Embarcadero C++
 
Уважаемые разработчики !
Просьба поделится хидерами и lib файлами под 64-х разрядную версию С++
Попытался собрать старый проекты под 64-х разрядную платформу, получил массу ошибок
Снова кнопки PanTask+Гис Панорама 2012
 
Всё разобрался. работает !

[U]Читателю темы.[/U]

При реализации следует учитывать, что в качестве lparam отправляется указатель на старую32x разрядную структуру[CODE] TBUTTONINFOx32 = packed record // Параметр LPARAM сообщения AW_INSERTBUTTON
    Command     : integer;    // Команда которая выполняется при нажатии кнопки,
                              // если Command = (-1) - вставляется разделитель
    BitmapIdent : HBITMAP;    // Идентификатор картинки на кнопке         //13/11/03
                              // Для Kylix-номер картинки в TImageList для задачи или -1
    Sibling     : integer;    // Идентификатор кнопки в панеле инструментов,
                              // после которой вставляется создаваемая кнопка.
                              // Если Sibling = 0 - вставляется в конец
  end;[/CODE]а не на структуру, приведённую другими разработчиками в предыдущей теме
[CODE] TBUTTONINFO = packed record // Параметр LPARAM сообщения AW_INSERTTASKBUTTON // 05/06/10
    Task        : Handle ; // Идентификатор библиотеки задачи, которая будет выполнять команду или 0
                              // Если задан идентификатор задачи, то Command будет
                              // передаваться на обработку конкретной задаче
    Command     : integer;    // Идентификатор кнопки, если Command = (-1) вставляется разделитель
    Sibling     : integer;    // Идентификатор кнопки в панеле инструментов,
                              // после которой вставляется создаваемая кнопка.
                              // Если Sibling = 0 - вставляется в конец
    BitmapId    : HBITMAP;    // Идентификатор картинки на кнопке или 0
    Background  : integer;    // Признак прорисовки фона кнопки (если не равно 0),
                              // учитывается если hBitmap не ноль
    State       : integer;    // Состояние кнопки (0 - отжата, 1 - нажата, -1 - не меняется)
    Enable      : integer;    // Доступность кнопки (0 - недоступна для нажатия, 1 - может нажиматься)
    Hint    : array[0..255] of WideChar;     // Короткая подсказка к кнопке в UNICODE или 0
    Comment : array[0..255] of WideChar;     //  Длинная подсказка к кнопке в UNICODE или 0
  end;

[/CODE]

Полный код на Паскале:
[CODE]// -----------------------------------------------------------------
// Изменить PNG картинку на кнопке для версии Х64       // 07/02/17
// -----------------------------------------------------------------
function TPanTask.SetButtonFacePNG(panelId : integer; command, pngid : integer): integer;
var button : TBUTTONINFOx32;
begin
 result := 0;
 if (FHMainWindow <> 0) then
 begin
   FillChar(button, sizeof(button), 0);
   button.Command     := command;
   button.BitmapIdent := HBITMAP(pngid);
   button.Sibling     := 0;
   result :=  SendMessage(FHMainWindow, AW_SETBUTTONFACEPNG,
       WPARAM(panelID), LPARAM(@button));
 end;
end;[/CODE]
где [B]AW_SETBUTTONFACEPNG = $0621;[/B]

Олегу Валентиновичу - спасибо =)
Изменено: KFF - 11.02.2017 14:03:11
Снова кнопки PanTask+Гис Панорама 2012
 
Понял =)
п.с. нужно для того, чтобы при подключении/отключении к/от БД кнопка менялась
с [IMG WIDTH=64 HEIGHT=64]http://gisweb.ru/upload/forum/961/27139.png[/IMG] на [IMG WIDTH=64 HEIGHT=64]http://gisweb.ru/upload/forum/0b0/27139-b.png[/IMG]
Изменено: KFF - 13.02.2017 22:32:39
Снова кнопки PanTask+Гис Панорама 2012
 
Здравствуйте господа разработчики !

При создании задачи по новой технологии через PNG файлы не работают функции
1. deletebutton
2. setbuttonface

Вопрос, как удалить или изменить картинку на кнопке созданной через AW_INSERTTASKBUTTON  ?
PanTask (версия 12): Размер кнопок
 
Всё, разобрался.
Идентификатор кнопки взял с Сишной версии SDK12

функция на паскале выглядит вот так
[CODE]implementation
uses mapsyst;

// ===========================================================
// Добавить/вставить кнопку в панель
// panelID  - идентификатор панели
// bmpFace  - идентификатор изображения кнопки из ресурсах
// bmpName  - имя изображения кнопки из ресурса (используется если bmpFAce=0)
// command  - идентификатор кнопки, если 0 - разделитель
// after    - идентификатор существуищей кнопки, после которой
//            вставляется кнопка, если 0 - в конец панели
// ===========================================================
function  TPanTask.InsertButton(panelId, bmpFace, command, after, background,
 press, enable: integer; hint, comment : PWideChar): integer;
var  bitmap   : HBITMAP;
    Instance : Handle;
    button   : TBUTTONINFO;
    size     : integer;
begin
 result := 0;
 if (panelId = 0) then exit;

 {$IFNDEF LINUXAPI}
 if (FHMainWindow <> 0) then
 begin
   bitmap   := 0;
   instance := SendMessage(FHMainWindow, AW_GETPANELINST, panelID, 0);
   case ord(bmpFace = -1) of
      1: bitmap := bitmap-1;
      0: if (bmpFace > 0) then
           bitmap := LoadBitmap(instance, MAKEINTRESOURCE(bmpFace));
   end;

   button.Command    := command;       // Идентификатор команды, уникальный в пределах данной задачи
   button.Task       := instance;     // Идентификатор модуля, содержащего TPanTask или 0, если command уникален в ГИС
   button.BitmapId   := bitmap;
   button.Sibling    := after;
   button.Background := background;
   button.State      := press;
   button.Enable     := enable;
   button.Hint[0]    := #0;
   button.Comment[0] := #0;

   if length(hint)>0 then
     WcsCopy(hint, length(hint), button.Hint, sizeof(button.Hint));

   if length(comment)>0 then
     WcsCopy(comment, length(comment), button.Comment, sizeof(button.Comment));

   if Assigned(FAction) then
     button.State := ord(FAction.Ident= command);

   result := SendMessage(FHMainWindow, AW_INSERTTASKBUTTON, panelID, Integer(@button));
   if (bitmap<>0) then DeleteObject(bitmap);
 end;
{$ELSE}
   if (MessageHandler <> 0)
   begin
     button.command := command;
     button.command := bmpFace;
     result := MessageHandler(0, AW_INSERTBUTTON, panelID, Integer(@button));
     if Assigned(FAction) and  Assigned(FMapWindow) then
       FMapWindow.PressButton(command);
  end;
{$ENDIF}

end;


[/CODE]
где
1) идентификатор AW_INSERTTASKBUTTON  =   $066F;
2) TBUTTONINFO выглядит вот так

[CODE] {$IFDEF CPUX64}
  TBUTTONINFO = packed record  // Параметр LPARAM сообщения AW_INSERTTASKBUTTON     // 05/06/10
    Task        : Handle ; // Идентификатор библиотеки задачи, которая будет выполнять команду или 0
                              // Если задан идентификатор задачи, то Command будет
                              // передаваться на обработку конкретной задаче
    Command     : integer;    // Идентификатор кнопки, если Command = (-1) вставляется разделитель
    Sibling     : integer;    // Идентификатор кнопки в панеле инструментов,
                              // после которой вставляется создаваемая кнопка.
                              // Если Sibling = 0 - вставляется в конец
    BitmapId    : HBITMAP;    // Идентификатор картинки на кнопке или 0
    Background  : integer;    // Признак прорисовки фона кнопки (если не равно 0),
                              // учитывается если hBitmap не ноль
    State       : integer;    // Состояние кнопки (0 - отжата, 1 - нажата, -1 - не меняется)
    Enable      : integer;    // Доступность кнопки (0 - недоступна для нажатия, 1 - может нажиматься)
    Hint    : array[0..255] of WideChar;     // Короткая подсказка к кнопке в UNICODE или 0
    Comment : array[0..255] of WideChar;     //  Длинная подсказка к кнопке в UNICODE или 0
  end;
{$ELSE}
  TBUTTONINFO = packed record   // Параметр LPARAM сообщения AW_INSERTBUTTON
    Command     : integer;    // Команда которая выполняется при нажатии кнопки,
                              // если Command = (-1) - вставляется разделитель
    BitmapIdent : HBITMAP;    // Идентификатор картинки на кнопке         //13/11/03
                              // Для Kylix-номер картинки в TImageList для задачи или -1
    Sibling     : integer;    // Идентификатор кнопки в панеле инструментов,
                              // после которой вставляется создаваемая кнопка.
                              // Если Sibling = 0 - вставляется в конец
  end;
{$ENDIF}[/CODE]
3) функция WcsCopy в  [B]mapsyst [/B]выглядит вот так;
[CODE]// ---------------------------------------
// Копирует UNICODE строку в UNICODE строку
// Если буфер меньше строки, то строка обрезается
// src      - адрес входной строки UTF-16
// srcsize   - размер входной строки в БАЙТАХ
// dest     - адрес буфера для размещения выходной строки UTF-16
// destsize - размер выходной строки в БАЙТАХ
// ---------------------------------------
function WcsCopy(const src : PWideChar; srcsize : integer;
     dest : PWideChar; destsize : integer) : PWideChar;
begin
 result := nil;
 // Если входная строка меньше 2-х байт, то даже некуда писать завершающий 0
 if (src <> nil) and (dest <> nil) and (destsize > 1) then
 begin
   FillChar(dest^, destsize, 0);
   case byte(destsize<srcsize) of
     1: Move(src^, dest^, destsize);
     0: Move(src^, dest^, srcsize);
   end;  
   result := dest;
 end;
end;[/CODE]
PanTask (версия 12): Размер кнопок
 
[QUOTE]Александр Кружков написал:
Добавление в SDK11 не планируется.[/QUOTE]
Вы же поняли что речь шла о SDK12  :D

по сути
Всё красиво и гладко кроме, а что такое AW_INSERTTASKBUTTONи какое у него значение ?
Может причина тут? я передаю AW_INSERT[S]TASK[/S]BUTTON
PanTask (версия 12): Размер кнопок
 
[QUOTE]Александр Кружков написал:
Масштабирование иконок реализовано только для Си (на pantask)[/QUOTE]
Александр, с недавнего времени для меня язык программирования роли не играет  :D
Если можно киньте на ящик описание новых структур и класса TPanTask на С++
я бы уже за вечер перевёл на Паскаль и адаптировал свои задачи

для информации:
Взял пример кода который мне выслал Дмитрий, прочитал ваши требования в результате получил :

[IMG WIDTH=1536 HEIGHT=864]http://delphi-gis.ucoz.ua/Images/ForForum/2017/img02.png[/IMG]

Пояснения

С левой нижней стороны параметры функции.
btnFace = -1
command = 8194
Панель создана

С правой стороны - два файла png которые добавлены к проекту размером 64 на 64

Посредине код от Татьяны с описанием как именно задавать параметры чтобы получить нужный эффект

В результате
Вы уже 4-й день втроём поясняете мне что и как сделать, а я уже 4-й день наблюдаю что
функция InsertButton имеет не то число параметров что в примере

[B]Предполагаю что[/B]

1. структура TBUTTONINFO не соответствует этому определению
[CODE] TBUTTONINFO = packed record // Параметр LPARAM сообщения AW_INSERTBUTTON
    Command     : integer;    // Команда которая выполняется при нажатии кнопки,
                              // если Command = (-1) - вставляется разделитель
    BitmapIdent : HBITMAP;    // Идентификатор картинки на кнопке         //13/11/03
                              // Для Kylix-номер картинки в TImageList для задачи или -1
    Sibling     : integer;    // Идентификатор кнопки в панеле инструментов,
                              // после которой вставляется создаваемая кнопка.
                              // Если Sibling = 0 - вставляется в конец
  end;
PTBUTTONINFO = ^TBUTTONINFO;[/CODE]скорее всего там не один BitmapIdent : HBITMAP; а несколько, например 5 штук

2. функция InsertButton вообще не соответствует той, которая написана для ГИС Карта 2011
В новой версии не просто загружает рисунок в BitmapIdent, а stretch-ит его в 4-ти масштабах
и создаёт 4 разных хъендла, которые возвращаются какой то
  res := SendMessage(FHMainWindow, AW_INSERTBUTTON_EX, WPARAM(panelID), LPARAM(@buttonInfo));
обратно в ядро

Не понимаю в чём сложность в публикации новой структуры и новой функции на форуме с учётом того, что рано или поздно она будет опубликована в SDK11
Изменено: KFF - 12.01.2017 20:53:54
PanTask (версия 12): Размер кнопок
 
Денис, пробовал
Зарегистрировал кнопки с картинками размером 64х64 через InsertButton
Запустил задачу в среде ГИС Панорама 12 - все кнопки огромные.
Меняю размер флажками см. рисунок выше -  ГИС Панорама 12  на мою задачу не реагирует вообще

Складывается такое впечатление, что перечень сообщений по кнопкам жёстко фиксирован и
приложение просто не реагирует на чужие IDS_MESSAGE

Страницы: Пред. 1 ... 14 15 16 17 18 19 20 21 22 23 24 ... 327 След.



© КБ Панорама, 1991-2025

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности