想问问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里呢?请教各位高手了!
我想在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里呢?请教各位高手了!
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;
oleFt := sym.Font;
这句编译不通过啊,提示:
Incompotible types:'IFontDisp' and 'TFont'
SetOleFont(ft,sym.Font); 就OK了,谢谢了!还有别的办法么?没有就结帖了!
var
currectangle:Rectangle;
begin
currectangle:=Rectangle(CreateOleObject('Mapobjects2.Rectangle'));
currectangle := mapdisp.TrackRectangle;
end
为什么这里最后一行会返回空(nil)?
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,它已经简单介绍了这部分。
我确实是在鼠标点击Map控件时的
procedure TfrmQuery.MapDispMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
中来用MapDisp.TrackRectangle;的啊!还是不行,返回还是为空啊!这是什么回事嘛? 超级菜鸟等待回答!
另外,我没有找到哪个帮助例子!请指教!
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;
我把代码贴出来了,你帮我看看吧: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"消息框!
郁闷啊,请您帮我看看了!
有可能是MapObject2.0问题,或者其他。我帮不了你了。
但是难道就没有办法了?我只是想实现一个简单的功能啊:放大缩小地图而已啊!
有人救我么?都快一个礼拜了,还没有解决啊...