阅读:4865回复:10
[原创]我的原创第一贴:利用AE读取Style符号库生成的符号控件
读取了三个style符号文件,提供icolorSelector接口,部分代码如下:<BR> StyleGalleryClass pStyleGallery = null;<BR> pStyleGallery = new StyleGalleryClass();<BR> pStyleGallery.AddFile(pStyleGallery.DefaultStylePath + "ESRI.style");<BR> pStyleGallery.AddFile(pStyleGallery.DefaultStylePath + "civic.style");<BR> pStyleGallery.AddFile(pStyleGallery.DefaultStylePath + "mining..style");<BR><BR> IColorSelector pColorSelector = new ColorSelector();<BR> pColorSelector.StyleGallery = pStyleGallery;<BR> pColorSelector.Color = colorButton1.MyColor;<BR> pColorSelector.Location = PointToScreen(new Point((sender as ColorButton).Left, (sender as ColorButton).Bottom));<BR> if (pColorSelector.DoModal())<BR> {<BR> colorButton1.MyColor = pColorSelector.Color;<BR> }<BR><BR>====================<BR>有需要的朋友可免费索取使用.<BR>====================<BR><BR>颜色控件代码如下,仅供交流:<BR>using System;<BR>using System.Collections.Generic;<BR>using System.ComponentModel;<BR>using System.Collections;<BR>using System.Data;<BR>using System.Drawing;<BR>using System.Text;<BR>using System.Windows.Forms;<BR>using ESRI.ArcGIS.esriSystem;<BR>using ESRI.ArcGIS.Display;<BR>using Carto.DisplayLib;<BR>namespace Display.DisplayControl<BR>{<BR> public partial class ColorPanel : Form<BR> {<BR> private IArray m_pColorArray;<BR> private Color m_pSelectedColor;<BR> private int m_iCols = 12;<BR> private int m_iRows = -1;<BR> private ToolTip m_TipColor;<BR> private int m_iColorIndex;<BR> private IList m_pNodes;<BR> private Button m_btnCancel;<BR> public ColorPanel(IArray pColorArray)<BR> {<BR> InitializeComponent();<BR> m_btnCancel = new Button();<BR> m_btnCancel.Click += new EventHandler(m_btnCancel_Click);<BR> m_btnCancel.Text = "取消";<BR> m_TipColor = new ToolTip();<BR> m_iColorIndex = -1;<BR> m_pColorArray = pColorArray;<BR> m_iRows = m_pColorArray.Count / m_iCols;<BR> if (m_pColorArray.Count % m_iCols != 0)<BR> {<BR> m_iRows = m_iRows + 1;<BR> }<BR> this.FormBorderStyle = FormBorderStyle.None;<BR> this.MinimizeBox = false;<BR> this.MaximizeBox = false;<BR> this.ControlBox = false;<BR> this.ShowInTaskbar = false;<BR> this.TopMost = true;<BR> SetStyle(ControlStyles.DoubleBuffer, true);<BR> SetStyle(ControlStyles.UserPaint, true);<BR> SetStyle(ControlStyles.AllPaintingInWmPaint, true);<BR> this.CenterToScreen();<BR> this.Capture = true;<BR> m_pNodes = new ArrayList();<BR> this.CreateNodes();<BR> this.Width = m_btnCancel.Right + 6;<BR> this.Height = m_btnCancel.Bottom + 5;<BR> //this.Width = (m_pNodes[m_pNodes.Count - 1] as ColorNode).NodeRectangle.Right + 6;<BR> //this.Height = (m_pNodes[m_pNodes.Count - 1] as ColorNode).NodeRectangle.Bottom + 5;<BR> }<BR> void m_btnCancel_Click(object sender, EventArgs e)<BR> {<BR> this.DialogResult = DialogResult.Cancel;<BR> }<BR> public Color SelectedColor //返回的颜色<BR> {<BR> get<BR> {<BR> return m_pSelectedColor;<BR> }<BR> set<BR> {<BR> m_pSelectedColor = value;<BR> }<BR> }<BR> //为颜色色盘添加颜色节点<BR> private void CreateNodes()<BR> {<BR> bool bIsSelected = false;<BR> //先添加"No Color"按钮<BR> ColorNode pColorNode = new ColorNode();<BR> pColorNode.Text = "无色";<BR> pColorNode.NodeColor = Color.Transparent;<BR> Point pPt = new Point(6, 5);<BR> pColorNode.NodeRectangle = new Rectangle(pPt, new Size(209, 16));<BR> if (this.m_pSelectedColor == Color.Transparent)<BR> {<BR> bIsSelected = true;<BR> pColorNode.Selected = true;<BR> }<BR> m_pNodes.Add(pColorNode);<BR> pPt.Y = pPt.Y + 23;<BR> MyColorClass pColorClass = null;<BR> for (int i = 0; i < m_pColorArray.Count; i++)<BR> {<BR> pColorClass = m_pColorArray.get_Element(i) as MyColorClass;<BR> pColorNode = new ColorNode();<BR> pColorNode.NodeColor = pColorClass.MyColor;<BR> pColorNode.TipText = pColorClass.ColorName;<BR> pColorNode.NodeRectangle = new Rectangle(pPt, new Size(11, 11));<BR> if (bIsSelected == false)<BR> {<BR> if (this.m_pSelectedColor == pColorClass.MyColor)<BR> {<BR> bIsSelected = true;<BR> pColorNode.Selected = true;<BR> }<BR> }<BR> m_pNodes.Add(pColorNode);<BR> if ((i + 1) % 12 == 0)<BR> {<BR> pPt.X = 6;<BR> pPt.Y = pPt.Y + 18;<BR> }<BR> else<BR> pPt.X = pPt.X + 18;<BR> }<BR> pPt.X = 6;<BR> if (m_pColorArray.Count % 12 != 0)<BR> {<BR> pPt.Y = pPt.Y + 18;<BR> }<BR> //分隔线<BR> pPt.Y = pPt.Y + 6;<BR> //添加"更多颜色按钮"<BR> pColorNode = new ColorNode();<BR> pColorNode.Text = "更多颜色...";<BR> pColorNode.NodeColor = this.BackColor;<BR> pColorNode.NodeRectangle = new Rectangle(pPt, new Size(150, 16));<BR> m_pNodes.Add(pColorNode);<BR> //添加取消按钮<BR> m_btnCancel.Location = new Point(pColorNode.NodeRectangle.Right + 10, pColorNode.NodeRectangle.Location.Y - 3);<BR> m_btnCancel.Height = 23;<BR> m_btnCancel.Width = 52;<BR> this.Controls.Add(m_btnCancel);<BR> }<BR> private void ColorPanel_Paint(object sender, PaintEventArgs e)<BR> {<BR> for (int i = 0; i < m_pNodes.Count; i++)<BR> {<BR> ColorNode pColorNode = m_pNodes<I> as ColorNode;<BR> if (i == m_pNodes.Count - 1)<BR> {<BR> //画分隔线<BR> DrawSperator(e.Graphics, 6, pColorNode.NodeRectangle.Top - 7, this.Width - 12);<BR> }<BR> DrawButton(e.Graphics, pColorNode,i);<BR> }<BR> }<BR> private void DrawSperator(Graphics g, int x, int y,int iWidth)<BR> {<BR> Pen darkPen = new Pen(SystemColors.ControlDark);<BR> Pen lightPen = new Pen(SystemColors.ControlLightLight);<BR> g.DrawLine(darkPen, x, y, iWidth, y);<BR> g.DrawLine(lightPen, x, y + 1, iWidth, y + 1);<BR> }<BR> private void DrawButton(Graphics g, ColorNode pColorNode,int iIndex)<BR> {<BR> Pen darkPen = new Pen(SystemColors.ControlDark);<BR> Pen lightPen = new Pen(SystemColors.ControlLightLight);<BR> SolidBrush lightBrush = new SolidBrush(SystemColors.ControlLightLight);<BR> int iX, iY;<BR> iX = pColorNode.NodeRectangle.Location.X;<BR> iY = pColorNode.NodeRectangle.Location.Y;<BR> if (m_iColorIndex == iIndex)<BR> {<BR> g.DrawRectangle(lightPen, iX-3,iY-3, pColorNode.NodeRectangle.Width+6, pColorNode.NodeRectangle.Height+6);<BR> g.DrawLine(darkPen, iX - 2, iY + pColorNode.NodeRectangle.Height+3, iX + pColorNode.NodeRectangle.Width + 3, iY + pColorNode.NodeRectangle.Height + 3);<BR> g.DrawLine(darkPen, iX + pColorNode.NodeRectangle.Width + 3, iY - 2, iX + pColorNode.NodeRectangle.Width + 3, iY + pColorNode.NodeRectangle.Height + 3);<BR> }<BR> else if (pColorNode.Selected)<BR> {<BR> g.FillRectangle(lightBrush, iX - 3, iY - 3, pColorNode.NodeRectangle.Width+7, pColorNode.NodeRectangle.Height+7);<BR> g.DrawLine(darkPen, iX - 3, iY - 3, iX + pColorNode.NodeRectangle.Width+2, iY - 3);<BR> g.DrawLine(darkPen, iX - 3, iY - 3, iX - 3, iY + pColorNode.NodeRectangle.Height+2);<BR> }<BR> if (iIndex!=m_pNodes.Count-1)<BR> {<BR> g.DrawRectangle(darkPen, pColorNode.NodeRectangle);<BR> }<BR> g.FillRectangle(new SolidBrush(pColorNode.NodeColor), pColorNode.NodeRectangle);<BR> Font pFont = new Font("Arial", 8);<BR> SizeF pSize = g.MeasureString(pColorNode.Text, pFont);<BR> PointF pPoint = new PointF(pColorNode.NodeRectangle.Left + (pColorNode.NodeRectangle.Width - pSize.Width) / 2, pColorNode.NodeRectangle.Top + (pColorNode.NodeRectangle.Height - pSize.Height) / 2);<BR> g.DrawString(pColorNode.Text, pFont, new SolidBrush(Color.Black), pPoint);<BR> }<BR>}</I><BR>
<DIV >private void ColorPanel_MouseDown(object sender, MouseEventArgs e)<BR> {<BR> if (this.RectangleToScreen(this.ClientRectangle).Contains(Cursor.Position))<BR> {<BR> Point pPt = new Point(e.X, e.Y);<BR> ColorNode pColorNode = null;<BR> for (int i = 0; i < m_pNodes.Count; i++)<BR> {<BR> pColorNode = m_pNodes<I> as ColorNode;<BR> if (pColorNode.NodeRectangle.Contains(pPt))<BR> {<BR> if (i == m_pNodes.Count - 1)<BR> {<BR> this.Visible = false;<BR> ColorDialog dlg = new ColorDialog();<BR> dlg.Color = this.SelectedColor;<BR> dlg.FullOpen = true;<BR> if (dlg.ShowDialog(this) == DialogResult.OK)<BR> {<BR> this.SelectedColor = dlg.Color;<BR> this.DialogResult = DialogResult.OK;<BR> }<BR> }<BR> else<BR> {<BR> this.SelectedColor = pColorNode.NodeColor;<BR> this.DialogResult = DialogResult.OK;<BR> }<BR> this.Close();<BR> return;<BR> }<BR> }<BR> this.Close();<BR> //return;<BR> }<BR> else<BR> this.DialogResult = DialogResult.Cancel;<BR> this.Close();<BR> }<BR><BR> private void ColorPanel_KeyDown(object sender, KeyEventArgs e)<BR> {<BR> if (e.KeyData==Keys.Escape)<BR> {<BR> this.Close();<BR> }<BR> }<BR><BR> private void ColorPanel_MouseMove(object sender, MouseEventArgs e)<BR> {<BR> if (this.RectangleToScreen(this.ClientRectangle).Contains(Cursor.Position))<BR> {<BR> Point pPt = new Point(e.X, e.Y);<BR> ColorNode pColorNode = null;<BR> for (int i = 0; i < m_pNodes.Count; i++)<BR> {<BR> pColorNode = m_pNodes<I> as ColorNode;<BR> if (pColorNode.NodeRectangle.Contains(pPt))<BR> {<BR> if (m_iColorIndex!=i)<BR> {<BR> m_iColorIndex = i;<BR> this.Invalidate();<BR> }<BR> if (i!=0 ;; i!=m_pNodes.Count-1 )<BR> {<BR> m_TipColor.SetToolTip(this, pColorNode.TipText);<BR> }<BR> return;<BR> }<BR> }<BR> }<BR> }<BR><BR> }<BR><BR> public class MyColorClass<BR> {<BR> private Color m_pColor;<BR> private string m_sColorName;<BR><BR> public MyColorClass()<BR> {<BR> m_pColor = Color.Transparent;<BR> m_sColorName = "";<BR> }<BR> public Color MyColor<BR> {<BR> get<BR> {<BR> return m_pColor;<BR> }<BR> set<BR> {<BR> m_pColor = value;<BR> }<BR> }<BR><BR> public string ColorName<BR> {<BR> get<BR> {<BR> return m_sColorName;<BR> }<BR> set<BR> {<BR> m_sColorName = value;<BR> }<BR> }<BR> }<BR><BR> internal class ColorNode<BR> {<BR> private Color m_pNodeColor;<BR> private System.Drawing.Rectangle m_RectNode;<BR> private string m_sTipText;<BR> private bool m_bSelected;<BR> private string m_sText;<BR><BR> public ColorNode()<BR> {<BR> m_pNodeColor = Color.Transparent;<BR> m_RectNode = new Rectangle(0, 0, 0, 0);<BR> m_sTipText = "";<BR> m_bSelected = false;<BR> }<BR><BR> public Color NodeColor<BR> {<BR> get<BR> {<BR> return m_pNodeColor;<BR> }<BR> set<BR> {<BR> m_pNodeColor = value;<BR> }<BR> }<BR><BR> public System.Drawing.Rectangle NodeRectangle<BR> {<BR> get<BR> {<BR> return m_RectNode;<BR> }<BR> set<BR> {<BR> m_RectNode = value;<BR> }<BR> }<BR><BR> public string TipText<BR> {<BR> get<BR> {<BR> return m_sTipText;<BR> }<BR> set<BR> {<BR> m_sTipText = value;<BR> }<BR> }<BR><BR> public bool Selected<BR> {<BR> get<BR> {<BR> return m_bSelected;<BR> }<BR> set<BR> {<BR> m_bSelected = value;<BR> }<BR> }<BR><BR> public string Text<BR> {<BR> get<BR> {<BR> return m_sText;<BR> }<BR> set<BR> {<BR> m_sText = value;<BR> }<BR> }<BR><BR> }<BR>}</I></I></DIV> |
|
|
1楼#
发布于:2007-04-05 02:43
ding
|
|
|
2楼#
发布于:2007-04-27 19:38
<P>好啊,大哥</P>
<P>我正在做基于ArcGIS的地图符号化</P> <P>就是用AE开发</P> <P>希望有些这方面的资料</P> <P>希望大哥能提供</P> <P>我的邮箱<a href="mailtwxc11235@163.com" target="_blank" >wxc11235@163.com</A></P> |
|
3楼#
发布于:2007-04-28 21:48
<P>支持啊 我也需要 给点帮助啊</P>
<P><a href="mailtgis_linghe@163.com" target="_blank" >gis_linghe@163.com</A> 谢谢</P> |
|
4楼#
发布于:2007-04-29 13:44
<TABLE fixed; WORD-BREAK: break-all" height="85%" width="95%" align=center border=0>
<TR> <TD 9pt; LINE-HEIGHT: 12pt" vAlign=top width=* height="100%"> <P>支持啊 我也需要 <a href="mailtzhu89cq@yahoo.com" target="_blank" ><FONT color=#000000><a href="mailtzhu89cq@yahoo.com.cn" target="_blank" >zhu89cq@yahoo.com</FONT></A>.cn</A> 谢谢</P></TD></TR></TABLE> |
|
5楼#
发布于:2007-04-29 15:48
<P>给个源代码吧大哥! <a href="mailtmawzh@tom.com" target="_blank" >mawzh@tom.com</A></P>
|
|
6楼#
发布于:2007-09-06 11:11
<P>我也要</P>
<P><a href="mailtchenming801220@sina.com" target="_blank" >chenming801220@sina.com</A> </P> <img src="images/post/smile/dvbbs/em12.gif" /> |
|
7楼#
发布于:2008-04-18 13:08
<P>我也想要,不知还有么?</P>
<P><a href="mailtthb8177@yahoo.com.cn" target="_blank" >thb8177@yahoo.com.cn</A></P> |
|
8楼#
发布于:2008-05-10 23:16
<FONT face=宋体 size=1>给个源码吧大哥,谢谢,secenes#gmail.com</FONT>
|
|
9楼#
发布于:2009-02-11 10:15
<P>麻烦楼主给个源码,谢谢 我正在做毕业论文,需要者方资料 谢谢</P>
|
|
上一页
下一页