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