sWhere: string = ''; iTextSize: SmallInt = 9): Boolean;
//带条件的 文字标注 ,指定图层 ,字段,颜色 和 条件表达式 ,文字大小
pFeatureLayer: IFeatureLayer;
pFeatureCursor: IFeatureCursor;
pFeature: IFeature;
pFields: IFields;
pEnvelope: IEnvelope;
pPoint: IPoint;
pTextSymbol: ITextSymbol;
pTextElement: ITextElement;
pElement: IElement;
pActiveView: IActiveView;
pGraphicsContainer: IGraphicsContainer;
pQueryFilter: IQueryFilter;
i: Integer;
begin
pFeatureLayer := pLayer as IFeatureLayer;
if sWhere = '' then
begin
pFeatureCursor := pFeatureLayer.Search(nil, True);
end
else
begin
pQueryFilter := CoQueryFilter.Create as IQueryFilter;
pQueryFilter.WhereClause := sWhere;
try
pFeatureCursor := pFeatureLayer.Search(pQueryFilter, True);
except
on E: Exception do
begin
ShowMessage('查询表达式错误!');
Exit(False);
end;
end;
end;
pFeature := pFeatureCursor.NextFeature;
if pFeature = nil then //空图层时 退出
Exit(False);
pFields := pFeature.Fields;
i := pFields.FindField(sField);
if i < 0 then //字段错误 退出
Exit(False);
pActiveView := aeMapControl.ActiveView;
pGraphicsContainer := aeMapControl.Map as IGraphicsContainer;
//文本符号
pTextSymbol := CoTextSymbol.Create as ITextSymbol;
pTextSymbol.Size := iTextSize;
pTextSymbol.Color := pColor;
pPoint := CoPoint.Create as IPoint;
while pFeature <> nil do
begin
//文本元素
pTextElement := CoTextElement.Create as ITextElement;
pTextElement.ScaleText := True;
pTextElement.Symbol := pTextSymbol;
pTextElement.Text := VarToStr(pFeature.Value[i]);
pEnvelope := pFeature.Extent;
pPoint.PutCoords(pEnvelope.XMin + pEnvelope.Width / 2, pEnvelope.YMin + pEnvelope.Height / 2);
pElement := pTextElement as IElement;
pElement.Geometry := pPoint;
pGraphicsContainer.AddElement(pElement, 0);
pFeature := pFeatureCursor.NextFeature;
end;
pActiveView.PartialRefresh(esriViewGraphics, nil, nil);
Result := True;
end;