zhangkaicn
路人甲
路人甲
  • 注册日期2004-07-23
  • 发帖数14
  • QQ
  • 铜币144枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1931回复:4

Delphi 用位图生成自定义符号

楼主#
更多 发布于:2004-09-16 12:59
<P>很多用 delphi 开发 GIS 的朋友 应该都曾经想到过 在动态图层中使用bmp等格式的图片来代表GPS设备(如汽车)</P>
<P>但是看了 MO的帮助发现是VB的代码 都注意到这行代码   Implements AFCustom.ICustomMarker   但是仍然不知道如何下手 </P>
<P>其实这用到了MO的接口  需要 uses  AFCustom_TLB  单元</P>
<P>如果没有找到  可以Import Type Library   位置 C:\Program Files\Common Files\ESRI    AFCust20.tlb  然后 Create Unit 就OK了</P>
<P>对接口不了解的弟兄   需要知道 接口是只声明  而不给出具体功能实现的 ,想实现接口必须借助具体的类</P>
<P>所以我们要定义一个类来实现这个接口</P>
<P>uses
  AFCustom_TLBtype
type
  TBmpCM=class(TInterfacedObject,ICustomMarker)
  private
   picname : string;  
   function SetupDC(hDC: Integer; dpi: Double; const pBaseSym: IDispatch): HResult; stdcall;
   function ResetDC(hDC: Integer): HResult; stdcall;
   function Draw(hDC: Integer; x: Integer; y: Integer): HResult; stdcall;
  end;</P>
<P>function TBmpCM.Draw(hDC: Integer; x: Integer; y: Integer): HResult; stdcall;
var
 cnvCanvas : TCanvas;
begin
 cnvCanvas := TCanvas.Create;
 cnvCanvas.Handle := hDC;
 cnvCanvas.Brush.Style :=  bsSolid ;  
 cnvCanvas.BrushCopy( Rect( X - intSize, Y - intSize, X + intSize, Y + intSize ),  bmpBitmap ,  Rect( 0, 0, bmpBitmap.Width, bmpBitmap.Height ), clWhite );
 cnvCanvas.Free;
 Result := 0;
end;</P>
<P>function TBmpCM.ResetDC(hDC: Integer): HResult; stdcall;
begin
   bmpBitmap.Free;
   Result := 0;
end;</P>
<P>function TBmpCM.SetupDC(hDC: Integer; dpi: Double; const pBaseSym: IDispatch): HResult; stdcall;
begin
   intSize := Variant( pBaseSym ).Size;
   bmpBitmap := TBitmap.Create;
   bmpBitmap.LoadFromFile(picname);
   Result := 0;
end;</P>
<P>使用的时候
var
 bcm :  TBmpCM;
 s : ICustomMarker;
begin
 bcm := TBmpCM.Create;
 bcm.picname := 'c:\\1.bmp';
 s := ICustomMarker(bcm) ;
 map1.TrackingLayer.Symbol[0].Custom :=  s  ;
 map1.TrackingLayer.Symbol[0].Size := 12;
end;
</P>
喜欢0 评分0
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
1楼#
发布于:2004-09-16 15:47
<img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" />
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
zhangkaicn
路人甲
路人甲
  • 注册日期2004-07-23
  • 发帖数14
  • QQ
  • 铜币144枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2004-09-16 16:17
<P>谢谢楼上大哥的支持
Shift + Enter  不小心 按成了 Ctrl + Enter
回车换行的时候 不小心把帖子发了 呵呵</P><P>补充一句
最后退出系统的时候  不要忘记 释放分配的资源
bcm.free;</P>
举报 回复(0) 喜欢(0)     评分
flytosky
路人甲
路人甲
  • 注册日期2005-01-15
  • 发帖数35
  • QQ
  • 铜币202枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2005-01-19 11:54
老兄,我拿什么感谢你啊。你真是个好人
举报 回复(0) 喜欢(0)     评分
heqjxiaoyao
路人甲
路人甲
  • 注册日期2003-07-31
  • 发帖数981
  • QQ83031582
  • 铜币910枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2005-01-20 11:25
有例子可以看得
希望大家访问我的个人博客: 随笔闲谈: http://rsgisman.bokee.com
举报 回复(0) 喜欢(0)     评分
游客

返回顶部