|
lala :
请问ole开发mapinfo时如何得到鼠标点击处的坐标值?
例如,用create rect语句来创建一个矩形,需要知道两个点的坐标,用commandinfo去取点击处的坐标值,但是不知为什么就是取不到,请教各位高手该怎么办?
haiguow :
lala你好,不知你是用什么平台做的?vc还是vb啊? 我也在用ole开发,可以交流交流,, 用ole开发想得到鼠标点击处的坐标,要用到回调函数(callback),mapbasic例子里findzip那个例子就用到了回调,你可以看看的, 也就是mapinfo传给应用程序一个命令行,其形式是: MI:x1,y1,F,F,x2,y2,2003, x1,y1是鼠标down处的坐标,x2,y2是鼠标up时的坐标, 你可以从中得到你想要的,,呵呵,,
James.Liu :
下面的代码是画点的,我想你的矩形和其类似,希望对你有帮助! procedure TMiCallBack.createpoint(const strparam: WideString); var StoredProc:TStoredProc; xx,yy :double; ExpParam1,ExpParam2,ExpParam3,ExpParam4:TParam; rtnstr:integer; begin xx :=mapinfo.eval('Format$(CommandInfo(1),"####.#########")'); yy :=mapinfo.eval('format$(CommandInfo(2),"####.#########")'); StoredProc:=TStoredProc.Create(nil); with StoredProc do begin DatabaseName:=form1.dbmap.DatabaseName ; StoredProcName:='POINTWITHINTEST'; ExpParam1:=TParam.Create(nil); ExpParam1.Name:='XPOINT'; ExpParam1.DataType:= ftfloat; ExpParam1.ParamType :=ptInput; ExpParam2:=TParam.Create(nil); ExpParam2.Name:='YPOINT'; ExpParam2.DataType:= ftfloat; ExpParam2.ParamType :=ptInput; ExpParam3:=TParam.Create(nil); ExpParam3.Name:='LOCALNA'; ExpParam3.DataType:= ftstring; ExpParam3.ParamType :=ptInput; ExpParam4:=TParam.Create(nil); ExpParam4.Name:='Resultvalue'; ExpParam4.DataType:= ftinteger; ExpParam4.ParamType :=ptOutput; Params.Clear; Params.AddParam(ExpParam1); Params.AddParam(ExpParam2); Params.AddParam(ExpParam3); Params.AddParam(ExpParam4); ExpParam1.asfloat:=xx; ExpParam2.asfloat:=yy; ExpParam3.AsString:=gs_localname; Prepare; ExecProc; rtnstr:=ExpParam4.AsInteger; if rtnstr= 1 then else begin showmessage('当前用户,此区域不可以编辑。'); exit; end; close; free; end; mapinfo.do('insert into testnew(id,obj) ' + 'values(56,CreatePoint('+floattostr(xx)+','+floattostr(yy)+')) '); end; |