|
camusx :
在MapX中使用自定义栅格符号遇到的问题[求助] 要求根据数据库中某个值(比如NUM)的不同,在与该数据库绑定的图层上显示不同的自定义图符。 网上看到有这样一个例子: 在MapX中如何使用自定义栅格符号 使用自定义符号首先需要设定style.SymbolType 为miSymbolTypeBitmap,然后指定SymbolBitmapName 为栅格图像名即可。 下面的代码演示了如何在delphi中使用自定义的栅格符号 首先调用自定义工具画点 Procedure TForm1.new1Click(Sender: TObject); Begin map1.ControlInterface.CurrentTool :=111; End; 在tooluses事件中如下: procedure TForm1.Map1ToolUsed(Sender: TObject; ToolNum: Smallint; X1, Y1,X2, Y2, Distance: Double; Shift, Ctrl: WordBool; var EnableDefault: WordBool); var ssymbol :cmapxstyle; p: CMapXPoint; f: cmapxfeature; begin ssymbol:=costyle.create; ssymbol.SymbolType :=1; ssymbol.SymbolBitmapSize:=25; {请注意将test.bmp文件考到mapx “共有文件路径”+“\CUSTSYMB”路径下,例如C:\Program Files\Common Files\MapInfo Shared\MapX Common 是 MapX 共有文件的缺省安装路径} ssymbol.SymbolBitmapName:='test.BMP'; p := CoPoint.Create; f :=cofeature.Create ; p.Set_(x1,y1); if toolnum=111 then begin f:=map1.ControlInterface.FeatureFactory.CreateSymbol(p,ssymbol); map1.ControlInterface.Layers.Item(1).AddFeature(f,EmptyParam); end; end; 问题:但是在编译时红字部分AddFeature(f,EmptyParam);老出错,说指定的ROWvalue值无效(原例中emptyparam忘了定义,我添加一个var emptyparam :variant后还是同样的错误)。我也试使用AddFeature(f); 但还是编译不过,说“参数不够”,到底该如何设置? 查看addfeature的帮助如下 [feature=]OBJECT.AddFeature (Source, [Rowvalues]) 部分 说明 OBJECT 表示 Layer 对象。 Source Source 是 Feature 对象。 Rowvalues Rowvalues 表示一行数据的属性数据新值。Rowvalues 集合中的每个值均相应于属性数据的一列。此参数只适用于 miDatasetLayer 类型的 Dataset。 我用的是midatasetado类型的DATASET。不知该如何设置?? 还有我在MAPX自带的一个OBJECTEDIT的例程中有一个画点的例子 procedure TMainMap.Map1ToolUsed(Sender: TObject; ToolNum: Smallint; X1, Y1, X2, Y2, Distance: Double; Shift, Ctrl: Wordbool; var EnableDefault: Wordbool); var newObj : Variant; // Used for storing new feature object pt : Variant; // Used for storing point of click pts : Variant; // Used for storing collection of points ftrs : Variant; // Used for storing collection of features ssymbol:cmapxstyle; begin Case ToolNum of CUSTOM_POINT_TOOL : // Set feature type to be a symbol, set its style & XY values. // Add it to editing layer begin pt := CreateOleObject('MapX.Point.5'); pt.Set(X1, Y1); ssymbol:=costyle.Create; ssymbol.SymbolType:=miSymbolTypeBitmap; ssymbol.SymbolBitmapName:='wugong_run.bmp'; newObj := Map1.FeatureFactory.CreateSymbol(pt,ssymbol); //ssymbol is the custom style; original:Map1.DefaultStyle EditLayer.AddFeature(newObj); //此处蓝字部分也只用了一个参数, //却能编译通过,wei为何??
end;
James.Liu :
正如你说言, [feature=]OBJECT.AddFeature (Source, [Rowvalues]) 部分 说明 OBJECT 表示 Layer 对象。 Source Source 是 Feature 对象。 Rowvalues Rowvalues 表示一行数据的属性数据新值。Rowvalues 集合中的每个值均相应于属性数据的一列。此参数只适用于 miDatasetLayer 类型的 Dataset。 如果是绑定的midatasetado外部数据源,是不能做编辑的。
|