⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 120665.htm

📁 在天极网上发布的各类delphi原码及技巧文档
💻 HTM
📖 第 1 页 / 共 3 页
字号:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ch := Char(TWMKey(Message).CharCode); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Ch &#62;= ’a’) and (Ch &#60;= ’z’) then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TWMKey(Message).CharCode := ord(UpCase(Ch)); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CM_ENABLEDCHANGED: <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enabled := FAssociate.Enabled; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CM_VISIBLECHANGED: <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Visible := FAssociate.Visible; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WM_SIZE, WM_MOVE, WM_WINDOWPOSCHANGED: <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Adjust(True); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br>&nbsp;&nbsp;&nbsp;&nbsp; finally<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FUpdating := False; <br>&nbsp;&nbsp;&nbsp;&nbsp; end;<br>&nbsp;&nbsp; end;<br>&nbsp;&nbsp; FOldWinProc(Message);<br>end;<br><br>  如果你检查一下这个例程,就会发现我们并没有花多少力气去处理Windows消息。我们只注意几个特定的消息,然后就让关联通过调用FOldWinProc正常的处理它们。在处理WM_CHAR消息的时候,我们对消息的一部分做了改变,让控件认为我们按下的是大写字母键。<br>  最后,我们关心一下两个不同的消息,以确定关联控件是否被移动了。这样做的原因在于从TwinControl继承的控件会在它们被移动时接到WM_MOVE消息,而此时其它的可视控件(如一个标签)则会收到WM_WINDOWPOSCHANGED消息。程序也检查了WM_SIZE消息,原因是如果OnTop属性为False,则LinkedLabel的位置会随控件的高度而变化。<br>  我们这个控件的最后一个方法是:当LinkedLabel被改变时,要在关联的什么地方作修改?当然我们不使用覆盖Tlabel的现存方法来实现它,而是要用修改关联行为的相同技术来做。注意我们不是重新定向WindowsProc属性,而是覆盖了WndProc方法。为什么把它们叫做相同的技术呢?如果你看一下TControl的构造器,你可以发现WindowProc会被初始化以指向WndProc方法。所以从本质上讲,我们覆盖的是同一种方法,不过做得更“干净”,也不用去保存WindowProc的初始值。<br>procedure TLinkedLabel.WndProc(var Message: TMessage); <br>begin<br>&nbsp;&nbsp; if (Assigned(FAssociate) and (not FUpdating)) then begin<br>&nbsp;&nbsp;&nbsp;&nbsp; FUpdating := True; <br>&nbsp;&nbsp;&nbsp;&nbsp; try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case(Message.Msg) of<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CM_ENABLEDCHANGED:&nbsp;&nbsp;&nbsp;&nbsp;FAssociate.Enabled := Enabled; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CM_VISIBLECHANGED:&nbsp;&nbsp;&nbsp;&nbsp;FAssociate.Visible := Visible; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WM_WINDOWPOSCHANGED: Adjust(False); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br>&nbsp;&nbsp;&nbsp;&nbsp; finally<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FUpdating := False; <br>&nbsp;&nbsp;&nbsp;&nbsp; end;<br>&nbsp;&nbsp; end;<br>&nbsp;&nbsp;  inherited;<br>end;<br><br>  对于刚刚完成的控件还有最后一点需要注意。你也许发现NewWinProc和WndProc中都使用了Fupdating。这个变量被用来通知LinkedLabel和它的关联控件其它控件正在发生改变。如果你忽略了这一步,很容易造成一个无限的更新循环,或者其它无法预料的结果。下面是一个事件流程,显示为什么需要Fupdating变量。<br>&#61623; 用户把 LinkedLabel 拖动到一个新位置。<br>&#61623; WndProc 接收到一个 WM_WINDOWPOSCHANGED 消息,并且触发 Adjust(False) 来移动关联控件。<br>&#61623; 作为对关联控件调整的一部分,Adjust 把FAssociate.Left设置为新值。 <br>&#61623; FAssociate 触发 WM_MOVE 消息,指出它已经改变了位置。<br>&#61623; NewWinProc 监测到 WM_MOVE 消息并调用 Adjust(True) 以修改 LinkedLabel 的位置配合关联控件的移动。 <br>  如你所见,在关联控件试图移动LinkedLabel之前我们没有什么机会改变关联控件的Top属性来配合LinkedLabel的新位置。通过使用Fupdating变量,关联控件不会注意到WM_MOVE消息,也不会试图调用Adjust来重新布置LinkedLabel。<br>一对问题<br>在这篇文章中我没有提及TlinkedLabel的一对问题。下面是对它们的大致说明:<br>  &#61623; 如果你把两个或者两个以上LinkedLabel关联到同一个控件然后释放它们之中的一个或者几个,就可能导致各种各样的问题。你可能会打断到其它LinkedLabel的关联,甚至可能导致被关联控件的WindowProc指向一个并不存在的历程。 <br>  &#61623; 如果你把 LinkedLabel 关联到另一个窗体上的控件,那么Notification 方法在那个控件被销毁时不会被调用。当控件被关联时调用 FreeNotification 可以解决这个问题,但这并没有真正指出问题所在。真正的问题在于我们允许它被关联在其它窗体的控件上。其实我们真正想实现的是把LinkedLabel与拥有相同Parent的控件相关联。虽然这么做并不难,不过要只在对象查看器的Associate属性下拉列表中显示符合条件的控件也需要一些小技巧。<br>结论<br>  其实结论也没多少东西。替换现存控件的WindowProc确实有它的局限性,不过这毕竟是一种非常有用的技术。我想不出什么其它合适的方法来创建一个像TlinkedLabel这样的控件,让关联控件在被移动时也一并移动LinkedLabel。我可不想去尝试并且列出这种技术其它可能的用法,因为这种可能性是无限的,它只会被一个程序员的灵活性所局限。</td></tr></table><br><img src="/xslimages/content/buttom.gif" align="absmiddle"></img>        相关内容        <br><ul></ul><br><font color="#000000"><font color="#1C82C5"><img src="/xslimages/content/buttom.gif" align="absmiddle"></img></font>            相关链接          </font><br><ul><a href="http://bbs.cpcw.com/forum/vb/">到程序方舟论坛,论坛主持人为你答疑!<br><br></a></ul><a href=""><font color="#FF9900"><font color="#CC0000"></font></font></a><font color="#000000"><font color="#1C82C5"><img src="/xslimages/content/buttom.gif" align="absmiddle"></img></font>               更多的                </font><br><table width="70%"><tr><td width="30%" valign="top" align="left"><ul></ul></td><td width="30%" valign="top" align="left"></td></tr></table></td></tr></table><table width="98%" border="0" cellspacing="0"><tr><td width="85%" height="19" align="center" bgcolor="#FDF0C4"><a href="mailto:ph@cpcw.com">      本文版权归作者和天极网共同所有,如有任何版权问题,请与我们联系。        </a></td><td width="15%" bgcolor="#FFCC66" height="19">          <a href="/index.htm">            回首页          </a>        </td></tr></table><br></td><td colspan="2" valign="top" width="25%" bgcolor="#eeeeee"><table width="97%" align="center"><tr><td bgcolor="#ff9900" width="182" height="15"></td></tr></table><table width="97%" border="0" cellpadding="3" align="center"><tr><td valign="top" height="23" border="1" bgcolor="#eeeeee" cellspacing="0" bordercolor="#ff9900"><div align="center">             火热链接          </div></td></tr><tr bgcolor="#F5F5F5"><td width="27%" height="20" align="left"><div align="left"><a href="/33554432/44040192/112568.htm">办公室偷懒之绝招</a><br><a href="/33554432/44040192/113017.htm">网络成为日本第五大广告媒体</a><br><a href="/33554432/44040192/113377.htm">非常办公室(二十六)</a><br><a href="/33554432/44040192/113378.htm">非常办公室(二十七)</a><br><a href="/33554432/44040192/113772.htm">日本当代美女标准</a><br><a href="/33554432/44040192/113779.htm">移动网络别太沉重</a><br><a href="/33554432/44040192/113783.htm">把主旋律唱到网络上</a><br><a href="/33554432/44040192/113785.htm">网络将创造一千万个就业岗位</a><br><a href="/33554432/44040192/113787.htm">校园新宠电子课本</a><br><a href="/33554432/44040192/113789.htm">美国学者质疑“电脑从娃娃抓起”</a><br></div></td></tr></table><br><table width="97%" border="0" cellpadding="3" align="center"><tr bgcolor="#ff9900"><td valign="top" height="20"><div align="center">                        天极搜索          </div></td></tr><tr bgcolor="#F5F5F5"><form action="http://search.yesky.com/servlet/search" method="post" name="search" onsubmit="form_onsubmit(); return ValidationPassed;"><td width="27%" height="20" align="center"><div><script language="javascript">          function form_onsubmit() {            ValidationPassed = true ;            if (document.search.keyword.value=="") {               alert ("请输入搜索关键字!");               ValidationPassed=false;             }               return ValidationPassed;           }       </script><input name="keyword" id="keyword" class="nava" size="12"></input><input type="hidden" name="classify" value="keyword"></input><input type="hidden" name="no" value="34603008"></input><input onClick="form_onsubmit(this.form);" style="HEIGHT:22px;WIDTH:40px" type="submit" value="搜索" name="submit2"></input></div></td></form></tr></table><div align="left"><font color="#000000"><br><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr align="center"><td><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="10" height="2"><img src="/xslimages/school/pathboy-ruanjian.gif" width="32" height="32"></img></td><td width="186" height="2" valign="top"><table width="100%" border="1" cellspacing="0" cellpadding="0" bordercolordark="#FFFFFF" bordercolorlight="#000000" bgcolor="#6898D0"><tr align="center"><td height="26"><font color="#FFFFFF">                                          MyDown下载                                        </font><font class="nava" color="#FFFFFF"></font></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="0" cellspacing="1" width="100%" align="center"><tbody><tr align="left"><td bgcolor="#ffffff"><script type="text/javascript" language="javascript" src="http://www.mydown.com/mydown.js"></script><br></td></tr></tbody></table><table width="100%" align="center"><tr><td align="center"><tr><td align="center"><a href="http://www.hoyodo.com"><img border="0" src="http://www.hoyodo.com/home/images/banner/botton.gif" width="120" height="60"></img></a><br><br><a href="http://e.yesky.com"><img border="0" src="http://e.yesky.com/images/logo_e2.gif" width="120" height="60" alt="天极E时代"></img></a></td></tr></td></tr></table></font></div><br></td></tr></table><table width="97%" border="0" cellspacing="0" cellpadding="0" align="center"><tr><td><div align="center"><a href="/hdong/gao.htm" target="_blank">欢迎投稿</a>|            <a href="/bill/index.html" target="_blank">市场联系</a>|            <a href="/serve/dnbjs.htm" target="_blank">关于我们</a>|            <a href="/maillist/index.html" target="_blank">邮件列表</a>|            <a href="/hdong/zaopin.html" target="_blank">加入我们</a>|            <a href="/hdong/xinsi.html" target="_blank">隐私条款</a></div></td></tr></table><hr height="1" size="1" width="760"></hr><td width="57%" valign="top" rowspan="1" align="center"><div align="center"><script language="JavaScript" src="http://ad.cpcw.com/js/school.js"></script></div></td><table width="97%" border="0" cellspacing="0" cellpadding="0" align="center"><tr></tr><tr></tr><tr></tr></table><table width="97%" border="0" cellspacing="0" cellpadding="0" align="center"><tr><td><div align="center"><span class="nava"><font color="#000000" face="Arial, Helvetica, sans-serif">              Copyright (C) 1999 Yesky.com, All Rights Reserved            </font><font color="#000000"><br>              版权所有                <font face="Arial, Helvetica, sans-serif">              Yesky              </font></font></span></div></td></tr></table><script>document.write("<a href=http://best.netease.com/cgi-bin/view/viewbasic.cgi?program target=_blank><img style=visibility:hidden src=http://best.netease.com/cgi-bin/log.cgi?user=program&refer="+escape(document.referrer)+"&cur="+escape(document.URL)+" border=0 alt=网易中文排行榜 ></a>");</script><script> document.write("<a href=http://best.netease.com/cgi-bin/view/viewbasic.cgi?rkai target=_blank> <img style=visibility:hidden src=http://best.netease.com/cgi-bin/log.cgi?user=rkai&refer="+escape(document.referrer)+"&cur="+escape(document.URL)+" border=0 alt=网易中文排行榜 width=15 height=15></a>");</script><A HREF="http://best.nease.net/cgi-bin/view/viewbasic.cgi?cpcw" TARGET="_blank"><IMG SRC="http://best.nease.net/cgi-bin/log.cgi?user=cpcw" style="visibility:hidden"/></A><br></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -