阅读:4228回复:19
指点 属性页
<P>我看ao 中有个接口Ipropertypage,应该很好用,但是 我却看不明白怎么用!
Dim p As IPropertyPage Set p = New LinePropertiesPropertyPage p.Show (SW_SHOWNORMAL)</P> <P>SW_SHOWNORMAL参数是在msdn中查到的, 但是vb中说这个变量没定义,而ao帮助上说IPropertyPage是msdn的接口,呵呵 我也不知道该怎么用, 希望高手给予指点!!</P> |
|
|
1楼#
发布于:2004-10-26 15:55
ding ding
|
|
|
2楼#
发布于:2004-10-25 15:20
<P>定 顶 顶</P><img src="images/post/smile/dvbbs/em01.gif" />
|
|
|
3楼#
发布于:2004-10-24 16:42
<P>kissssy斑竹,俺再次提起这个属性页的问题 ,抱歉, 呵呵 这里我发现一个问题, 我现在想利用join和relat对话框, 但是 好像我的join按钮无法弹出对话框进行join操作, 而relat对却可以弹出进行Relate操作,我的代码如下:
Private Sub Command1_Click()</P><P>Dim pLayer As ILayer Set pLayer = MapControl1.Layer(0) Dim p_map As IMap Set p_map = MapControl1.Map Dim pComPropSheet As IComPropertySheet Set pComPropSheet = New ComPropertySheet pComPropSheet.Title = "My Layer Properties" Dim pPPUID As New UID Dim pDrawPage As IPropertyPage Set pDrawPage = New JoinRelatePage ' JoinRelatePage 'JoinRelate属性页 pComPropSheet.AddCategoryID pPPUID pComPropSheet.AddPage pDrawPage '请在这里在添加其它属性页 ' Dim pMySet As ISet Set pMySet = New esriCore.Set pMySet.Add pLayer pMySet.Reset ' pComPropSheet.EditProperties pMySet, 0 MapControl1.ActiveView.Refresh</P><P>End Sub</P><P>为什么会这样啊??</P><P>谢谢了 !~~~</P> |
|
|
4楼#
发布于:2004-06-04 12:31
<P>Agree</P>
|
|
|
5楼#
发布于:2004-06-04 11:44
<P>我已经基本上明白了您的意思, </P><P> 1<FONT color=#f73809> <FONT color=#000000>如果注释掉</FONT></P><P> <FONT color=#f73809>p</FONT><FONT color=#000000>ComPropSheet.AddCategoryID pPPUID</FONT></P><P> pComPropSheet.AddPage pDrawPage</P><P> 会自动用默认的属性页!~~</P><P></FONT>2 如果保留 <FONT color=#f73809>p</FONT><FONT color=#000000>ComPropSheet.AddCategoryID pPPUID </FONT></P><P><FONT color=#000000> 注释掉 pComPropSheet.AddPage pDrawPage,那么会出现一个"没有编辑的属性"的错误</FONT></P><P>3 仅仅注释掉</P><P><FONT color=#f73809> p</FONT><FONT color=#000000>ComPropSheet.AddCategoryID pPPUID 回在里面出现两个symbol,</FONT></P><P> 那么 可不可以这样理解,</P><P> <FONT style="BACKGROUND-COLOR: #4db34d" color=#3809f7>pComPropSheet.AddCategoryID pPPUID 是加入一个属性page,<FONT color=#f73809>(1)</FONT>但是如果所用的UID是不存在的,那么它就自动的默认没有任何加入的page,<FONT color=#f73809>(2)<FONT color=#3809f7>而如果你用了pComPropSheet.AddCategoryID pPPUID ,但是却没有用 </FONT><FONT color=#0909f7>pComPropSheet.AddPage pDrawPage 来加入任何属性页,那么会出现没有可编辑属性的错误.</FONT></FONT><FONT color=#f73809>,(3)</FONT><FONT color=#3809f7>而如果你根本没有用这个语句, 那么系统会自动默认用一个缺省的模式,然后执行加入 pComPropSheet.AddPage pDrawPage语句,所以 就会出现两个symbol的情况.</FONT></FONT></P><img src="images/post/smile/dvbbs/em07.gif" /><img src="images/post/smile/dvbbs/em07.gif" /><img src="images/post/smile/dvbbs/em08.gif" /><img src="images/post/smile/dvbbs/em05.gif" /><img src="images/post/smile/dvbbs/em04.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em01.gif" />
|
|
|
6楼#
发布于:2004-06-04 10:05
<P>例子我没有,我只能回答你1和2:</P><P>其实我上面已经有原因了!</P><P>1,在没有向注册表注册ID之前,这两个ID其实是<FONT color=#f70909>没有任何用途</FONT>的,“不是一个UID对应一个组件类么?”,你说的很对,但是一开始,我就跟你说,我忘了注册他们了,所以这两个CLSID根本没有对应任何组建类!!</P><P>2,其实如果一开始那段代码运行,先注册了CLSID,正确的运行结果:pComPropSheet.AddCategoryID pPPUID 其实添加的是Source属性页,而另外一句Add才是添加Symbology,所以<FONT color=#ee3d11>应该有两个属性页</FONT>!!!</P>
|
|
|
7楼#
发布于:2004-06-03 23:00
<P>1 为什么"{3B5AA17A-F67F-4A25-9B22-D1D23C0781A2}" 和:"{4B5AA17A-F67F-4A25-9B22-D1D23C0781A2}", 没有区别,不是一个UID对应一个组件类么? 那么如果UID不同 ,它怎么能对应同一个呢!</P><P> 另外 我试验过注释掉pPPUID.Value = "{3B5AA17A-F67F-4A25-9B22-D1D23C0781A2}" 其他不边, 也就是仅仅定义了 dim pPPUID as new UID 而不给它值 , 也是出现同一个属性页! 为什么?</P><P> 2 而 如果没有 dim pPPUID as new UID,和pComPropSheet.AddCategoryID pPPUID 语句,就回变成缺省的layer property页, 如果UID没有影响,为什么 一定要这两个语句呢?</P><P>3 正在研究如何用自己注册的属性页,呵呵, 这个如何注册呀, 是写一个实现了icomproperty的窗体么? 斑竹有没有例子,给俺传一个呀? 先谢谢您了!</P><P> 诶 真感谢<b><FONT color=#990000>kisssy哥哥 这么热心~~~~~ :) </FONT></b></P><P> 斑竹请赐教!!~~ 谢谢
</P><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em05.gif" /><img src="images/post/smile/dvbbs/em05.gif" /><img src="images/post/smile/dvbbs/em08.gif" /> |
|
|
8楼#
发布于:2004-06-03 10:12
<P>应该是会使用缺省的</P><P>好,我上次说过,让你在注册表里写两项,不知你有没有注意到有一项:</P><P>[HKEY_CLASSES_ROOT\CLSID\{A1A37857-D673-11D2-9F42-00C04F6BC78E}\Implemented Categories\</P><P>{A1A37857-D673-11D2-9F42-00C04F6BC78E} 你查看它,会发现它其实是esriCore.FeatureLayerSourcePropertyPage</P><P>所以我们一开始没写这两项到注册表时,就会发生"{3B5AA17A-F67F-4A25-9B22-D1D23C0781A2}"并没有太大关系,你可以改成:"{4B5AA17A-F67F-4A25-9B22-D1D23C0781A2}",甚至你把它注释掉,代码照样运行</P><P>因为你只是 Dim pPPUID As New UID 而没有在注册表中注册,其实这样它什么也没做。</P><P>现在注册后,你在运行代码后会发现除了Symbology标签外,还会多一个Source标签页,这样你就应该知道为什么要向注册表写两项了</P>
|
|
|
9楼#
发布于:2004-06-03 09:19
<P>斑竹说的很对, 这个都经过我实验了, 但是我不明白, 为什么 如果我不写</P><P>1) <FONT color=#ee6911>这里pComPropSheet.AddCategoryID pPPUID 也可以注释掉,这样弹出的属性页就是默认的,也就是Arcmap中的Layer Properties , AddCategoryID方法是根据一个 id 增加一个com属性页,</FONT><FONT style="BACKGROUND-COLOR: #ffff00" color=#3809f7>是不是理解成没有UID,那么就采用缺省的</FONT></P><P><FONT color=#ee6911>2) </FONT><FONT color=#000000>"{3B5AA17A-F67F-4A25-9B22-D1D23C0781A2}"并没有太大关系,你可以改成:"{4B5AA17A-F67F-4A25-9B22-D1D23C0781A2}",甚至你把它注释掉,代码照样运行 ,这样如果没有uid的话,那么就是找不到一个com属性页,那么就不应该能运行<FONT color=#f70997>同一个属性页</FONT>呀? 这是为什么?</FONT></P><P>3) 我实验过,如果没有一个addpage, 那么即使用了<FONT color=#ee6911>AddCategoryID ,并且起uid 为</FONT> "{1476C785-6F57-11D2-A2C6-080009B6F22B}" ,也不能弹出来任何的属性页,为什么? </P><P>4) 如果代码中注释了 pPPUID.Value = "{3B5AA17A-F67F-4A25-9B22-D1D23C0781A2}", 也就是说,出现了Dim pPPUID As New UID ,而不设置其属性, 其他不变,同样的也可以用这个属性页,为什么?
</P><P> 主要是我觉得<FONT color=#3333cc>为什么不采用一个同一个UID 却可以弹出来同一个页面, 为什么如果不设置UID,就会出现Layer Properties默认属性页? 这个很怪,请斑竹赐教!~~~~~~</FONT></P> |
|
|
上一页
下一页