想问问Mapobjects2的一个小问题:
  我想在Delphi6中进行GIS的开发,用到了Mapobjects2.
在用Mapobjects2的IMoTextSymbol时,不知道怎么将变量赋予IMoTextSymbol的Font属性。
例如:var   
  sym:TextSymbol;
begin
  sym:=TextSymbol(CreateOleObject('MapObjects2.TextSymbol'));
  sym.Font:=???;//就是这里,我应该将什么样的Font对象/变量赋予sym.Font?
  ...
end;在VB6是这样实现的:
...
  dim sym as New TextSymbol
  Dim txtFont As New StdFont '注意这里!
  txtFont.name = textfont
  txtFont.size = textsize
  Set sym.Font = txtFont '实现了对象的赋值
...在VB里可以将txtFont 定义成StdFont,在Delphi6里呢?请教各位高手了!

解决方案 »

  1.   

    下面代码是从 BCB 中翻译过来的:var   
      sym:TextSymbol;
      oleFt:IFont; 
      ft:TFont;
    begin
      sym:=TextSymbol(CreateOleObject('MapObjects2.TextSymbol'));
      ft:=TFont.Create();  oleFt := sym.Font;
      SetOleFont(ft,oleFt);  
      
      //在ft上设置字体属性,不过Color无效
      ft.Size:=0; //字体大小,字体,字体样式等
      sym.Color:=<字体颜色>
      
      ft.Free(); 
    end;
      

  2.   

    gong_hui2000(gong_hui2000):
      
      oleFt := sym.Font;
      这句编译不通过啊,提示:
      Incompotible types:'IFontDisp' and 'TFont'
      

  3.   

    改为:
      SetOleFont(ft,sym.Font);  就OK了,谢谢了!还有别的办法么?没有就结帖了!
      

  4.   

    谢谢了,以上的问题解决了,是用了SetOleFont()函数将TextSymbol和TFont关联起来再修改TFont就OK了。小弟还有一个问题:
    var
      currectangle:Rectangle;
    begin
      currectangle:=Rectangle(CreateOleObject('Mapobjects2.Rectangle'));
      currectangle := mapdisp.TrackRectangle;
    end
      为什么这里最后一行会返回空(nil)?
      

  5.   

    mapdisp.TrackRectangle 只有在当鼠标在 Map 上框选时才会有数据,其他时候为空。必须按如下方式做:
    procedure TForm1.Map1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
         Map1.Extent := Map1.TrackRectangle;
    end;当你安装完 MapObject后,不是有 Sample for delphi 吗?里面有个Delphi 5.doc,它已经简单介绍了这部分。
      

  6.   

    gong_hui2000(gong_hui2000):
      我确实是在鼠标点击Map控件时的
      procedure TfrmQuery.MapDispMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
      
      中来用MapDisp.TrackRectangle;的啊!还是不行,返回还是为空啊!这是什么回事嘛?  超级菜鸟等待回答!
      另外,我没有找到哪个帮助例子!请指教!
      

  7.   

    下面一句话一定没问题:
    Map1.Extent := Map1.TrackRectangle;另外:
    var
      currectangle:Rectangle;
    begin
      currectangle:=Rectangle(CreateOleObject('Mapobjects2.Rectangle'));
      currectangle := mapdisp.TrackRectangle;
    end你可以看到 currectangle 在赋完值之后没有使用。在 Delphi 中,它发现后面没有在使用一个变量、对象等,它会自动释放数据,所以你看不到内容。而且 currectangle := mapdisp.TrackRectangle 仅仅得到了 对象的地址,前面的currectangle:=Rectangle(CreateOleObject('Mapobjects2.Rectangle'));相当于没用。如果这些语句放到C++ 中,会出现内存泄漏的问题,但在执行完过程前,可以随时察看任何定义过的变量、对象的数据。下面,你可以看到弹出'not nil'信息。因为ShowMessage中用到了currectangle (delphi 7 + MapObject 2.1):procedure TForm1.Map1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      currectangle:Rectangle;
    begin
      currectangle := map1.TrackRectangle;
      if(currectangle=nil)  then
        ShowMessage('nil')
      else
        ShowMessage('not nil');
    end;
      

  8.   

    gong_hui2000(gong_hui2000)大侠:
      我把代码贴出来了,你帮我看看吧:procedure TfrmQuery.MapDispMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      Loc:Point;
      mapWidth,mapHeight:Double;
      MaxRec:Rectangle;
      FullFactor:Double;                //'最大放大率
      zoomFactor,zoomFactor1:Double;
      zoomWH:Boolean;       //'zoomWH=true then Width else Height
      NowFactor:Double;
      mapWidth1,mapHeight1:Double;
      Loc1:Point;
    begin
      currectangle:=Rectangle(CreateOleObject('Mapobjects2.Rectangle'));
      Loc:=Point(CreateOleObject('Mapobjects2.Point'));
      Loc1:=Point(CreateOleObject('Mapobjects2.Point'));
      
      If tbZoomin.Down=true Then
      begin
        FullFactor := 1 / (Opt_Extent * 100);
        zoomWH := True;
        currectangle:=mapdisp.TrackRectangle;//--
        if(currectangle=nil) then
          ShowMessage('nil')
        else
          ShowMessage('not nil');
        ...
      end;
      ...
    end;
    结果,还是跳出来了"nil"消息框!
    郁闷啊,请您帮我看看了!
      

  9.   

    我在Delphi7+MapObject2.1+win2000下试过你的代码,没有问题,'not nil'信息。
    有可能是MapObject2.0问题,或者其他。我帮不了你了。
      

  10.   

    谢谢 gong_hui2000(gong_hui2000)了,
    但是难道就没有办法了?我只是想实现一个简单的功能啊:放大缩小地图而已啊!
    有人救我么?都快一个礼拜了,还没有解决啊...
      

  11.   

    帮你UP,我也要开始学MIS方面的了。