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

文章标题:

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;