阅读:1445回复:0
进行图元样式修改及添加图元的问题
<P>各位大侠:</P>
<P>我是用delphi+mapx做的营区可视管理系统,使用oracle spatial数据库,但出现以下两个问题:</P> <P>1.进行修改图元样式时,程序运行时,图元样式显示被正确修改,(已经保存修改)但重新运行程序时,图元的样式还是没有被修改。以下是部分源码:</P> <P>procedure TOraLayer.ModifyFtrObjsStyle(FtrObjs: CMapXFeatures); var OldStyle, NewStyle: CMapXStyle; i: integer; ptstr: string; ftr: CMapXFeature; begin inherited; if (OraLayerType = CanEditLayer) or (OraLayerType = LocalMiLayer) then begin OldStyle := self.OraFtrStyle.MiStyle.Clone; if FtrObjs.Count > 0 then begin if MiLayer.Editable then begin self.OraFtrStyle.ShowStyleDialog; for i := 1 to FtrObjs.Count do begin ftr := CoFeature.Create; ftr := FtrObjs.Item(i); NewStyle := CoStyle.Create; NewStyle := self.OraFtrStyle.MiStyle.Clone; ftr.Style := NewStyle.Clone; Ftr.Update(true, emptyparam); end; self.YQZYMap.Map.Refresh; end; end; end; end;</P> <P>procedure TOraLayer.ModifyFtrObjsStyleOfLayer; begin if (OraLayerType = CanEditLayer) or (OraLayerType = LocalMiLayer) then begin self.YQZYMap.Map.Layers.ClearSelection; self.MiLayer.Selection.Replace(self.MiLayer.AllFeatures); ModifyFtrObjsStyle(self.MiLayer.AllFeatures); end; end;</P> <P>2.添加图元时,已经定义好图元的样式了,并且spatial数据库中也有新添加图元的记录,但是在程序中该图元显示不出来。</P> <P>procedure TMainForm.InsertRectYFFDActionExecute(Sender: TObject); var Oralyr: TOraLayer; begin //营房绘制</P> <P> if assigned(CurYQZYMap) then if CurYQZYMap.OraLayers.GetItemByName('YFFDLAYER') <> nil then begin Oralyr := CurYQZYMap.OraLayers.GetItemByName('YFFDLAYER'); CurYQZYMap.OraLayers.CurEditLayer := OraLyr; CurYQZYMap.Map.CurrentTool := RECT_DRAW_TOOL; //POLYGON_DRAW_TOOL; end else // messagedlg('ÕâÊÇÓª·¿Í¼²ã»æÖƹ¤¾ß£¬Ö»ÄÜÓÃÔÚÓª·¿Í¼²ã£¡', mtinformation, [mbOk], 0); end;</P> <P>我感觉程序上是没错误的,以前用tab表时也是按这种方式修改及添加图元的,程序运行正常,为什么将tab表上载到spatial数据库中就有问题呢,到底是什么方面的原因呢?</P> |
|