发表用户:讨论贴
收集整理:James.Liu
相关讨论:http://www.mygis.com.cn/forum/dispbbs.asp?boardID=4&ID=7310
信息原始来源:James MapInfo技术论坛

文章标题:在MapX中使用自定义栅格符号遇到的问题[求助]

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外部数据源,是不能做编辑的。