Dim pMxDoc As IMxDocument Dim pPageLayout As IPageLayout Dim pGraphics As IGraphicsContainerSelect Set pMxDoc = ThisDocument Set pPageLayout = pMxDoc.PageLayout Set pGraphics = pPageLayout If pGraphics.ElementSelectionCount <> 1 Then MsgBox "Select only 1 map element.", vbOKOnly Exit Sub End If If TypeOf pGraphics.DominantElement Is ITextElement Then Dim te As ITextElement Set te = pGraphics.DominantElement Dim e As IElement Set e = te Dim p As IPolygon Set p = New Polygon e.QueryOutline pMxDoc.activeView.ScreenDisplay, p MsgBox "Width: " & p.Envelope.Width & " Height: " & p.Envelope.Height End If
Hi Ann,
I am working on converting some VBA to C# Add-Ins. Next on my plate is one that builds some ParagraphText boxes. I'll post a snip of C# here in the next few days.
If you post a few more details on what you want to accomplish, that would help.
-Jeff
using System.Drawing;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.ADF.COMSupport;
// Also add references to "stdole" and "ESRI.ArcGIS.ADF.Local" to the project.
//...
// Call the method in your add-in button click such as:
// string txt = @"This is just a bunch of text to place...";
// BuildParaText(txt);
private void BuildParaText(string paraText)
{
IActiveView activeView = ArcMap.Document.ActiveView;
if (activeView is IPageLayout)
{
ITextElement paraTextElement = new ParagraphTextElementClass();
// notice casts here
IFrameProperties frameProperties = paraTextElement as IFrameProperties;
IMarginProperties marginProperties = paraTextElement as IMarginProperties;
IColumnProperties columnProperties = paraTextElement as IColumnProperties;
ITextElement textElement = paraTextElement as ITextElement;
IElement element = paraTextElement as IElement;
// Set the margin and column count
marginProperties.Margin = 4;
columnProperties.Count = 1;
// Reusable color object
IRgbColor rgbColor = new RgbColorClass();
// Outline, black
ISimpleLineSymbol outline = new SimpleLineSymbolClass();
rgbColor.Red = 0;
rgbColor.Green = 0;
rgbColor.Blue = 0;
rgbColor.Transparency = 255;
outline.Color = rgbColor;
outline.Width = 0.5;
outline.Style = esriSimpleLineStyle.esriSLSSolid;
// Fill, white
ISimpleFillSymbol fillSymbol = new SimpleFillSymbolClass();
rgbColor.Red = 255;
rgbColor.Green = 255;
rgbColor.Blue = 255;
rgbColor.Transparency = 255;
fillSymbol.Color = rgbColor;
// Set outline to fill
fillSymbol.Outline = outline;
// Set fill to background
ISymbolBackground background = new SymbolBackgroundClass();
background.FillSymbol = fillSymbol;
// Set background to frame
frameProperties.Background = background;
// Text symbol
ISimpleTextSymbol textSymbol = new TextSymbolClass();
rgbColor.Red = 0;
rgbColor.Green = 0;
rgbColor.Blue = 0;
Font font = new Font("Arial Narrow", 14, FontStyle.Bold);
textSymbol.Font = OLE.GetIFontDispFromFont(font) as stdole.IFontDisp;
textSymbol.Color = rgbColor;
textSymbol.HorizontalAlignment = esriTextHorizontalAlignment.esriTHALeft;
textSymbol.VerticalAlignment = esriTextVerticalAlignment.esriTVATop;
// Set text symbol to element
textElement.Symbol = textSymbol;
// Set the actual text to display
textElement.Text = paraText;
// Set the size of the text box to 5 x 2 in display units (ie. inches)
IEnvelope envelope = new EnvelopeClass();
envelope.PutCoords(0, 0, 5, 2);
element.Geometry = envelope;
// Add the text box to the layout
IGraphicsContainer graphicsContainer = ArcMap.Document.PageLayout as IGraphicsContainer;
graphicsContainer.AddElement(element, 0);
activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
}
}
Here is code that will drop a ParagraphTextElement on the layout in the lower left corner. This was banged together quickly, but does work and shows how to get at the various options available for ParagraphTextElement.using System.Drawing; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Display; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.ADF.COMSupport; // Also add references to "stdole" and "ESRI.ArcGIS.ADF.Local" to the project. //... // Call the method in your add-in button click such as: // string txt = @"This is just a bunch of text to place..."; // BuildParaText(txt); private void BuildParaText(string paraText) { IActiveView activeView = ArcMap.Document.ActiveView; if (activeView is IPageLayout) { ITextElement paraTextElement = new ParagraphTextElementClass(); // notice casts here IFrameProperties frameProperties = paraTextElement as IFrameProperties; IMarginProperties marginProperties = paraTextElement as IMarginProperties; IColumnProperties columnProperties = paraTextElement as IColumnProperties; ITextElement textElement = paraTextElement as ITextElement; IElement element = paraTextElement as IElement; // Set the margin and column count marginProperties.Margin = 4; columnProperties.Count = 1; // Reusable color object IRgbColor rgbColor = new RgbColorClass(); // Outline, black ISimpleLineSymbol outline = new SimpleLineSymbolClass(); rgbColor.Red = 0; rgbColor.Green = 0; rgbColor.Blue = 0; rgbColor.Transparency = 255; outline.Color = rgbColor; outline.Width = 0.5; outline.Style = esriSimpleLineStyle.esriSLSSolid; // Fill, white ISimpleFillSymbol fillSymbol = new SimpleFillSymbolClass(); rgbColor.Red = 255; rgbColor.Green = 255; rgbColor.Blue = 255; rgbColor.Transparency = 255; fillSymbol.Color = rgbColor; // Set outline to fill fillSymbol.Outline = outline; // Set fill to background ISymbolBackground background = new SymbolBackgroundClass(); background.FillSymbol = fillSymbol; // Set background to frame frameProperties.Background = background; // Text symbol ISimpleTextSymbol textSymbol = new TextSymbolClass(); rgbColor.Red = 0; rgbColor.Green = 0; rgbColor.Blue = 0; Font font = new Font("Arial Narrow", 14, FontStyle.Bold); textSymbol.Font = OLE.GetIFontDispFromFont(font) as stdole.IFontDisp; textSymbol.Color = rgbColor; textSymbol.HorizontalAlignment = esriTextHorizontalAlignment.esriTHALeft; textSymbol.VerticalAlignment = esriTextVerticalAlignment.esriTVATop; // Set text symbol to element textElement.Symbol = textSymbol; // Set the actual text to display textElement.Text = paraText; // Set the size of the text box to 5 x 2 in display units (ie. inches) IEnvelope envelope = new EnvelopeClass(); envelope.PutCoords(0, 0, 5, 2); element.Geometry = envelope; // Add the text box to the layout IGraphicsContainer graphicsContainer = ArcMap.Document.PageLayout as IGraphicsContainer; graphicsContainer.AddElement(element, 0); activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); } }
Here is code that will drop a ParagraphTextElement on the layout in the lower left corner. This was banged together quickly, but does work and shows how to get at the various options available for ParagraphTextElement.using System.Drawing; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Display; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.ADF.COMSupport; // Also add references to "stdole" and "ESRI.ArcGIS.ADF.Local" to the project. //... // Call the method in your add-in button click such as: // string txt = @"This is just a bunch of text to place..."; // BuildParaText(txt); private void BuildParaText(string paraText) { IActiveView activeView = ArcMap.Document.ActiveView; if (activeView is IPageLayout) { ITextElement paraTextElement = new ParagraphTextElementClass(); // notice casts here IFrameProperties frameProperties = paraTextElement as IFrameProperties; IMarginProperties marginProperties = paraTextElement as IMarginProperties; IColumnProperties columnProperties = paraTextElement as IColumnProperties; ITextElement textElement = paraTextElement as ITextElement; IElement element = paraTextElement as IElement; // Set the margin and column count marginProperties.Margin = 4; columnProperties.Count = 1; // Reusable color object IRgbColor rgbColor = new RgbColorClass(); // Outline, black ISimpleLineSymbol outline = new SimpleLineSymbolClass(); rgbColor.Red = 0; rgbColor.Green = 0; rgbColor.Blue = 0; rgbColor.Transparency = 255; outline.Color = rgbColor; outline.Width = 0.5; outline.Style = esriSimpleLineStyle.esriSLSSolid; // Fill, white ISimpleFillSymbol fillSymbol = new SimpleFillSymbolClass(); rgbColor.Red = 255; rgbColor.Green = 255; rgbColor.Blue = 255; rgbColor.Transparency = 255; fillSymbol.Color = rgbColor; // Set outline to fill fillSymbol.Outline = outline; // Set fill to background ISymbolBackground background = new SymbolBackgroundClass(); background.FillSymbol = fillSymbol; // Set background to frame frameProperties.Background = background; // Text symbol ISimpleTextSymbol textSymbol = new TextSymbolClass(); rgbColor.Red = 0; rgbColor.Green = 0; rgbColor.Blue = 0; Font font = new Font("Arial Narrow", 14, FontStyle.Bold); textSymbol.Font = OLE.GetIFontDispFromFont(font) as stdole.IFontDisp; textSymbol.Color = rgbColor; textSymbol.HorizontalAlignment = esriTextHorizontalAlignment.esriTHALeft; textSymbol.VerticalAlignment = esriTextVerticalAlignment.esriTVATop; // Set text symbol to element textElement.Symbol = textSymbol; // Set the actual text to display textElement.Text = paraText; // Set the size of the text box to 5 x 2 in display units (ie. inches) IEnvelope envelope = new EnvelopeClass(); envelope.PutCoords(0, 0, 5, 2); element.Geometry = envelope; // Add the text box to the layout IGraphicsContainer graphicsContainer = ArcMap.Document.PageLayout as IGraphicsContainer; graphicsContainer.AddElement(element, 0); activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); } }