Привет ребята. Возвращаемся к нашей старой теме – Работа с MapWindow GIS в Delphi. Сегодняшняя статья – продолжение прошлой, которая была связана с показом всплывающих подсказок при наведение на определенные области слоя. В данной статье мы рассмотрим, как можно настраивать эти самые подсказки, причин настройки можно будет видеть прямо на экране. То есть, получается что-то вроде следующего:

mawindow-gis-nastroiki-metok

Пользователь в настройках настраивает подсказки и сразу же видит, как она будет выглядеть затем в работе. Все реализовано при помощи MapWindow GIS, то есть, сам визуальный эффект. Настройки сохраняются в INI-файл, из которого затем считываются при наведении на определенную область. Давайте создадим похожую форму, и разместите на ней нужные компоненты, с помощью которых Вы сможете регулировать следующие параметры подсказки:

  • Прозрачность
  • Толщина линий обрамления (толщина рамки)
  • Тип рамки (овал, прямоугольник, ромб)
  • Цвет рамки
  • Тип градиента
  • Цвет каждой стороны градиента

После того, как Вы определились с компонентами, нам необходимо подготовить то, где пользователь сможет видеть результаты своей корректировки подсказок. Для этого я использовал компонент TMap, на котором первоначально задал определенную метку (подсказку – «Пример всплывающей подсказки»). Для этого, на событие OnShow нашей формы необходимо написать следующий код:

procedure TSetting.TabSheet3Show(Sender: TObject);
begin
   Map1.ClearDrawings;
   IdLbl:=Map1.NewDrawing(dlScreenReferencedList);
   lbl:=CoLabels.Create;
   lbl.Clear;
   lbl:=Map1.DrawingLabels[IdLbl];
   lbl.FrameVisible:=True;
   lbl.FrameType:=lfRectangle;
   lbl.AddLabel('Пример'+#13#10+'всплывающей подсказки',Map1.Width/2,Map1.Height/2,0.0,-1);
end;

Переменная lbl – это интерфейс iLabels, а переменная idLbl – идентификатор слоя, на котором мы рисуем метку, он у нас всегда будет один и тот же, так как мы каждый раз очищаемым поле для рисования. Из данного кода можно также еще сказать то, что мы задаем для нашей метки сразу тип, а также размещаем ее по центру компонента TMap, как это сделать – ширину и высоту делим на 2 и получаем центр.

Теперь нам необходимо собственно приступить к настройкам, начнем по порядку – с типа обрамления, типа рамки. Она может быть трех типов:

  • lfRectangle — прямоугольник
  • lfRoundedRectangle — овал
  • lfPointedRectangle – ромб

Задается он с помощью свойства FrameType, например:

procedure TSetting.ComboBox3Change(Sender: TObject);
begin
   case ComboBox3.ItemIndex of
    0: lbl.FrameType:=lfRectangle;
    1: lbl.FrameType:=lfRoundedRectangle;
    2: lbl.FrameType:=lfPointedRectangle;
   end;
   Map1.Redraw;
end;

Обязательно используем процедуру Redraw для компонента TMap, чтобы можно было перерисовать данные и увидеть результат сразу, без перезагрузок форм.

Теперь переходим к толщине линии обрамления, для этого используется свойство – FrameOutlineWidth, например:

procedure TSetting.TrackBar1Change(Sender: TObject);
begin
   try
    lbl.FrameOutlineWidth:=TrackBar1.Position;
    Map1.Redraw;
   except
    on e:Exception do
   end;
end;

Как всегда, используем процедуру Redraw для компонента TMap, чтоы иметь возможность сразу видеть результат.

Для того чтобы задать цвет нашей рамки (цвет обрамления), мы можем воспользоваться свойством FrameOutlineColor, например:

procedure TSetting.Button5Click(Sender: TObject);
begin
   if ColorDialog1.Execute then
    begin
     lbl.FrameOutlineColor:=ColorDialog1.Color;
     Map1.Redraw;
    end;
end;

Не забываем использовать процедуру Redraw для перерисовки.

Идем дальше, сейчас мы рассмотрим, как можно задать прозрачность фона, для этого используется свойство – FrameTransparency, например:

procedure TSetting.TrackBar2Change(Sender: TObject);
begin
  lbl.FrameTransparency:=TrackBar2.Position;
  Map1.Redraw;
end;

Для того чтобы сделать подсказку в стиле градиента, можно воспользоваться свойством FrameGradientMode, например:

procedure TSetting.ComboBox4Change(Sender: TObject);
begin
   Case ComboBox4.ItemIndex of
    0: lbl.FrameGradientMode:=GRADIENT_FILL_RECT_V;
    1: lbl.FrameGradientMode:=GRADIENT_FILL_RECT_H;
   end;
   Map1.Redraw;
end;
  • GRADIENT_FILL_RECT_V – вертикальный
  • GRADIENT_FILL_RECT_H – горизонтальный

С помощью свойства FrameBackColor мы задаем цвет одной половины градиента, а с помощью свойства FrameBackColor2 мы задаем цвет второй половины градиента.

Для того чтобы расширить подсказку (метку) по ширине, можно воспользоваться свойством FramePaddingX, а для того чтобы по высоте, можно воспользоваться свойством FramePaddingY.

Также можно настраивать тип шрифта, начертание его и так далее. Тут стандартные свойства. Все эти настройки, можно сохранить в INI-файл, а затем, когда Вы включаете режим подсказок при передвижении мыши необходимо просто считывать данные из файла настроек и присваивать нашим подсказкам. Скоро это я применю в свой проект MapWindow GIS и Вы сможете увидеть результат, следите за ним.

Метки: , , , , ,




К записи “Работа с MapWindow GIS. Создание настроек для меток, подсказок” оставлено комментариев: 2.

  1. Артём:

    Подскажите, пожалуйста, как установить этот компонент в DELPHI XE3!
    Вылезают ошибки при компиляции, причем их достаточно много..

Оставить комментарий

Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*