echo2003
点子王
点子王
  • 注册日期2003-07-28
  • 发帖数2453
  • QQ76947571
  • 铜币5473枚
  • 威望1点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
阅读:2499回复:7

在MapX中实现图元闪烁源码[转载]!

楼主#
更多 发布于:2003-12-05 15:13
在这里,我们也应谢谢作者[由alice原创]
MapX图元分三种类型:
1、线(Line),即miFeatureTypeLine
2、区域(Region),即miFeatureTypeRegion
3、点符号(Symbol),即miFeatureTypeSymbol

加入一个时钟控件,并在时钟控件中实现以下代码:

procedure TMapFrm.tmFlashSelectTimer(Sender: TObject);
var
ft: CMapXFindFeature;
lyr: CMapXLayer;
bExist: Boolean;
i: Integer;
str: String;
ds: CMapXDataset;
begin
bExist := False;
for i := 1 to mapCity.Layers.Count do
begin
if mapCity.Layers.Item.Name = m_strSelLyr then
begin
bExist := True;
break;
end;
end;

if not bExist then
begin
tmFlashSelect.Enabled := False;
MsgFrm := TMsgFrm.Create(Self);
MsgFrm.m_strMsg := Format('图层[%s]信息不存在!',[m_strSelLyr]);
MsgFrm.ShowModal;
MsgFrm.Free;
Exit;
end;

lyr := mapCity.Layers._Item(m_strSelLyr);
ds := mapCity.Datasets.Add(miDataSetLayer, lyr ,EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam);
lyr.Find.FindDataset := ds;
lyr.Find.FindField := ds.Fields.Item[1];
str := Format('%d',[m_nSelID]);
ft := lyr.Find.Search(str,EmptyParam);

if ft.FindRC mod 10 <> 1 then
begin
tmFlashSelect.Enabled := False;
MsgFrm := TMsgFrm.Create(Self);
MsgFrm.m_strMsg := Format('单位点[%s]信息不存在!',[m_strCorpName]);
MsgFrm.ShowModal;
MsgFrm.Free;
Exit;
end;

case ft.type_ of
miFeatureTypeLine:
begin
if ft.Style.LineColor = miColorWhite then
ft.Style.LineColor := miColorRed
else
ft.Style.LineColor := miColorWhite;
end;
miFeatureTypeRegion:
begin
if ft.Style.RegionColor = miColorGreen then
ft.Style.RegionColor := miColorRed
else
ft.Style.RegionColor := miColorGreen;
end;
miFeatureTypeSymbol:
begin
if not m_bFlashSel then
lyr.Selection.Replace(ft)
else
lyr.Selection.ClearSelection;
m_bFlashSel := not m_bFlashSel;
end;
end;
ft.Update(EmptyParam, EmptyParam);

if not m_bCenter then
begin
m_bCenter := True;
mapCity.CenterX := ft.CenterX;
mapCity.CenterY := ft.CenterY;
mapCity.Refresh;
end;
end;

这里是把选中的图元实现闪烁,并把图元居中

实现图元闪烁的另一个方法:

假设图元原大小是20,改变后大小是15

if ft.Style.SymbolBitmapSize=20 then
ft.Style.SymbolBitmapSize:=15
else
ft.Style.SymbolBitmapSize:=20;
ft.Update(EmptyParam, EmptyParam);

ft是symbol类型的
喜欢0 评分0
xiahai
论坛版主
论坛版主
  • 注册日期2003-11-20
  • 发帖数244
  • QQ
  • 铜币1009枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2003-12-05 15:39
好东西!
[img]http://www.gisempire.com/bbs/showimg.asp?BoardID=59&filename=2004-5/200452323285466.gif[/img]
举报 回复(0) 喜欢(0)     评分
jgh
jgh
路人甲
路人甲
  • 注册日期2003-11-19
  • 发帖数65
  • QQ
  • 铜币202枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2003-12-05 17:48
挺好
举报 回复(0) 喜欢(0)     评分
echo2003
点子王
点子王
  • 注册日期2003-07-28
  • 发帖数2453
  • QQ76947571
  • 铜币5473枚
  • 威望1点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
3楼#
发布于:2003-12-09 17:00
有些东西是给大家提供的一种方法或思路!
具体的实现,还得自己动手啊!
举报 回复(0) 喜欢(0)     评分
yjxtgy
路人甲
路人甲
  • 注册日期2003-07-31
  • 发帖数156
  • QQ
  • 铜币283枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2003-12-10 14:23
这篇文章传的是多,他的意图是好的,可是不实用,太理想化了,我在参考他的时候就遇到了太多的不合理,搞得我一再修改。不知道有没有人有同感!
举报 回复(0) 喜欢(0)     评分
jgh
jgh
路人甲
路人甲
  • 注册日期2003-11-19
  • 发帖数65
  • QQ
  • 铜币202枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2003-12-29 16:52
ft是symbol类型的,如何设置ft为symbol类型,请讲一下,谢谢!

举报 回复(0) 喜欢(0)     评分
echo2003
点子王
点子王
  • 注册日期2003-07-28
  • 发帖数2453
  • QQ76947571
  • 铜币5473枚
  • 威望1点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
6楼#
发布于:2004-01-02 13:32
看看下面的相关帮助,论坛内也有,也可以找找!
Style.SupportsBitmapSymbols property
Style.SymbolBitmapColor property
Style.SymbolBitmapName property
Style.SymbolBitmapOverrideColor property  
Style.SymbolBitmapSize property
Style.SymbolBitmapTransparent property
Style.SymbolCharacter property
Style.SymbolFont property
Style.SymbolFontBackColor property  
Style.SymbolFontColor property
Style.SymbolFontHalo property
Style.SymbolFontOpaque property
Style.SymbolFontRotation property
Style.SymbolFontShadow property
Style.SymbolType property
Style.SymbolVectorColor property
Style.SymbolVectorSize property
举报 回复(0) 喜欢(0)     评分
owen3996
路人甲
路人甲
  • 注册日期2004-12-20
  • 发帖数9
  • QQ
  • 铜币147枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2004-12-29 16:56
<P>有没有vb的啊</P>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部