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

изменения семантики по значению из БД

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
изменения семантики по значению из БД, проблема с отображением
 
Помогите разобраться, пытаюсь изменить цвет объекта карты (страна) по соответствию значение в БД - значение семантики. Объекты не окрашиваются.

implementation

{$R *.dfm}

const
sColor = '101серый,201белый,301красный,401оранжевый,501желтый,601зеленый,701голубой,801синий,901фиолетовый';


procedure TForm1.BitBtn3Click(Sender: TObject);  
var fObj : HObj;
   R : string;
   p : integer;
   p1:string;
begin
     ADOTable1.First;
while ADOTable1.Eof<>true do

   begin
      if
        ADOTable1priznak_tul.Value=true then
           begin
            p1:='синий';
            p:=Pos(p1,sColor);
          end
      else
          p1:='оранжевый';
          p:=Pos(p1,sColor);
         begin
           R:=Copy(sColor, p-3,3);
           fObj:=mapCreateSiteObject(MV.MapHandle,MV.MapHandle,KM_IDFLOAT2,0);
           mapSeekSiteObject(MV.MapHandle,MV.MapHandle,fObj, ADOTable1number.value);
              for p:=1 to mapSemanticAmount(fObj) do
                     if mapSemanticCode(fObj,p)=565 then
                        begin
                          mapSetSemanticValue(fObj, p, @R[1], LenGth®);
                          break;
                        end;

     mapCommitObject(fObj);
     mapFreeObject(fObj);
   end;

  MV.Repaint;
  ADOTable1.Next;
end;

end;
Изменено: Александр Карулин - 21.10.2025 10:48:27
 
В "Карта 2011" все работает. Семантику изменяю и цвет изменяется.
 
После работы программы семантика объекта изменяется, но присваивается неправильное значение.
Изменено: Александр Карулин - 21.10.2025 11:14:31
 
Добрый день!

Снова тот же совет: проверяйте коды возврата.

По Вашему коду не ясно:
- найден ли нужный объект
- есть ли у него искомая семантика
- успешно ли записано значение семантики
- сохранен ли объект на карту

Что за семантика 565?
Штатная семантика "ЦВЕТ ОТОБРАЖЕНИЯ ЗНАКА RGB" - это код 31002

И еще. Ваш код выполняет только замену значения имеющейся у объекта семантики. То есть, если эта семантика ранее не была заполнена у объекта, новое значение присвоено не будет.
 
Цитата
Александр Карулин написал:
После работы программы семантика объекта изменяется, но присваивается неправильное значение.

Цвет определяется целочисленным значением типа COLORREF.

Цитата
Александр Карулин написал:
constsColor = '101серый,201белый,301красный,401оранжевый,501желтый,601зеленый,701голубой,801синий,901фиолетовый';

- это плохой способ объявления констант.
Лучше завести либо два массива - один со строками названий цвета, второй со значениями COLORREF. Либо объявить запись из двух полей (название и значение COLORREF) и сделать массив таких записей.

Записывать значение COLORREF в семантику лучше как целое число - с помощью mapSetSemanticLongValue (установить) или mapAppendSemanticLong (добавить).


Возможно, Вам будет полезно посмотретьпример из SDK:
Скрытый текст
 
Семантику 565 добавил сам. Спасибо за помощь, буду разбираться )
Страницы: 1
Читают тему (гостей: 1)



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

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