您所在位置:论坛首页 — Visual Basic — [原创]打造自己的多风格按纽--用户控件制作详解(3) 本帖地址: http://bbs.pfan.cn/post-258895.html [复制地址] [搜索相关帖子] |
|||||
|
|
|||||||
|
|
作者:一江秋水 专家分:3770 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
1
楼
八、将标题文本打印到按纽控件的指定位置
一般按纽控件的标题文本都是打印在按纽中央,这已经能满足一般情况下的使用要求了。但有时我 们希望将文本打印到指定的位置,以满足特殊的需求。没问题!Instantly Go! 首先还是要在 Option Explicit 节中声明两个变量: Dim vCaptionPosX As Integer '文本的X坐标 Dim vCaptionPosY As Integer '文本的Y坐标 再添加两对位置属性: Public Property Get CaptionPosX() As Integer CaptionPosX = vCaptionPosX End Property Public Property Let CaptionPosX(ByVal vNewValue As Integer) vCaptionPosX = vNewValue PropertyChanged "CaptionPosX" PaintColor End Property Public Property Get CaptionPosY() As Integer CaptionPosY = vCaptionPosY End Property Public Property Let CaptionPosY(ByVal vNewValue As Integer) vCaptionPosY = vNewValue PropertyChanged "CaptionPosY" PaintColor End Property 在 ReadProperties 过程中添加代码: vCaptionPosX = PropBag.ReadProperty("CaptionPosX", (UserControl.ScaleWidth - UserControl.TextWidth(vCaption)) / 2) vCaptionPosY = PropBag.ReadProperty("CaptionPosy", (UserControl.ScaleHeight - UserControl.TextHeight(vCaption)) / 2) 在 WriteProperties 过程中添加代码: PropBag.WriteProperty "CaptionPosX", vCaptionPosX, (UserControl.ScaleWidth - UserControl.TextWidth(vCaption)) / 2 PropBag.WriteProperty "CaptionPosY", vCaptionPosY, (UserControl.ScaleHeight - UserControl.TextHeight(vCaption)) / 2 在 UserControl_Resize 过程中 DrawButton 语句的前面添加代码: vCaptionPosX = (UserControl.ScaleWidth - UserControl.TextWidth(vCaption)) / 2 vCaptionPosY = (UserControl.ScaleHeight - UserControl.TextHeight(vCaption)) / 2 这两个语句为什么不添加在 InitProperties 过程中呢?因为从工具箱中把 PrettyCmd刚画到窗体 上时,最先执行InitProperties 过程,这时,UserControl.ScaleWidth 和 UserControl.ScaleHeight 的值都还不是我们画出的按纽控件的大小值,而是控件设计阶段 UserControl 的原始大小值,这样, vCaptionPosX 和 vCaptionPosY 就会得出错误的计算值,造成默认的标题文本不是打印在按纽的中央 (而我们却是希望打印在按纽中央的)。当停止画图动作时,系统再执行 UserControl_Resize 过程, 这时,UserControl.ScaleWidth 和 UserControl.ScaleHeight 的值已经是我们画出的按纽控件的大小 值了,vCaptionPosX 和 vCaptionPosY 就会得出正确的计算值,紧接着执行的 DrawButton过程就可以 将标题文本打印在按纽的中央了。 接下来再对 PrintCaption 过程加以修改(“你看你看,刚刚才修改完,又要修改,干嘛不一次改 好啊,改来改去的,烦不烦啊?”“呵呵,别烦哦,循序渐进嘛”),修改后的代码应该是这样的: Private Sub PrintCaption() If vCaptionStunt > 0 Then Dim X2 As Integer, Y2 As Integer, z As Integer z = UserControl.FontSize '获取字号 Select Case vCaptionStunt Case 1 '立体 UserControl.ForeColor = &H80000011 X2 = vCaptionPosX - 1 + (z > 28) + (z > 48): Y2 = vCaptionPosY - 1 + (z > 28) + (z > 48) Case 2 '浮雕 UserControl.ForeColor = &HFFC0C0 X2 = vCaptionPosX + 1 - (z > 28) - (z > 48): Y2 = vCaptionPosY - 1 + (z > 28) + (z > 48) Case 3 '雕刻 UserControl.ForeColor = vbWhite X2 = vCaptionPosX + 1 - (z > 28) + (z > 48): Y2 = vCaptionPosY + 1 - (z > 28) - (z > 48) End Select UserControl.CurrentX = X2: UserControl.CurrentY = Y2 UserControl.Print vCaption End If UserControl.ForeColor = IIf(UserControl.Enabled, vForeColor, &H80000011) UserControl.CurrentX = vCaptionPosX: UserControl.CurrentY = vCaptionPosY UserControl.Print vCaption UserControl.ForeColor = vForeColor End Sub 最后添加属性描述: CaptionPosX:返回/设置标题文本在按纽控件上显示时的 X 坐标(以像素为单位)。 CaptionPosY:返回/设置标题文本在按纽控件上显示时的 Y 坐标(以像素为单位)。 现在,你再进入程序设计的窗体页面,从工具箱中选中 PrettyCmd画到窗体上,将我们自己定义的 属性都随心所欲地设置一番,呵呵,真爽! 今天的实验就到这里吧,就到这里吧。明天接着做。记得保存成果哟。
|
|
作者:yswoyh 专家分:500 ![]() ![]() ![]() |
2
楼
谢谢!! 好好学习一下!!
![]() 懂的生活就是懂的欣赏自己。
此帖尚未评分
|
|
作者:FieldMAX 专家分:12740 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
3
楼
up
最后修改于2007-11-20 12:10:00 ![]() ![]() http://upload.programfan.com/upfile/200709032136933.rar(旧Logo) http://upload.programfan.com/upfile/200701251540834.rar(熊猫烧香图片)
此帖尚未评分
|
|