VB与AutoCAD二次开发入门技巧资料13053TextBox.docx
《VB与AutoCAD二次开发入门技巧资料13053TextBox.docx》由会员分享,可在线阅读,更多相关《VB与AutoCAD二次开发入门技巧资料13053TextBox.docx(17页珍藏版)》请在冰豆网上搜索。
VB与AutoCAD二次开发入门技巧资料13053TextBox
能自行调节高度的TextBox
概述
TextBox在放到Form中以后,就不管内容有多少,就是占这么多的地盘,为什么不让它灵活一些呢?
每当TextBox的内容修改好以后,就查看TextBox的行数是否变化。
如果有改变的话,就把TextBox的位置调整到合适的位置。
一个可能的应用就是在TextBox和MsFlexGrid配合使用的情况,可以动态修改高度。
实现步骤
1、开启一个新的工程。
2、增加一个TextBox(Text1),修改BorderStyle为0-None,MultiLine为True。
3、在Form1的声明中增加:
ConstEM_GETLINECOUNT=&HBA
PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhWndAsLong,ByValwMsgAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLong
DimLastLineAsLong'最后的行数
DimLineHeight'每行的高度
4、在Form_Load过程中增加:
PrivateSubForm_Load()
SetMe.Font=Text1.Font
LineHeight=Me.TextHeight("TT")
EndSub
5、在Text1_Change中增加代码:
PrivateSubText1_Change()
DimRetAsLong
Ret=SendMessage(Text1.hWnd,EM_GETLINECOUNT,0,0&)'取行数
IfRet<>LastLineThen
IfText1.Height+Text1.Top+LineHeight>Me.ScaleHeightAndRet>1Then
IfLastLine<=Ret-1Then
ExitSub'如果已经是最大高度,保持
EndIf
LastLine=Ret-1'超过最大高度
Else
LastLine=Ret
EndIf
Text1.Height=LastLine*LineHeight'修改高度
EndIf
EndSub
6、在Text1_GotFocus中增加代码:
PrivateSubText1_GotFocus()
LastLine=SendMessage(Text1.hWnd,EM_GETLINECOUNT,0,0&)
EndSub
7、按F5,开始运行。
在TextBox中多打入几行,可以发现TextBox的高度会自动修改,甚至对剪贴操作也一样有效。
而在TextBox到了Form的最大边缘后,就停止了扩张高度。
如果您发现Bugs。
请告诉我知道。
Thanks.
多姿多彩的进度指示控件
在Win95盛行的今天,我们随处可以看见各种进程指示控件的身影,这些进程指示控件被广泛用于各种不同的场合。
如果我们能在自己的程序中灵活使用各种进程指示控件,一定会为程序增添许多生机和活力。
下面笔者以VisualBasic为例,向大家介绍几种常用的进程指示控件。
一、进度条控件(ProgressBar)
进度条控件是一种极其常见的Win95风格的进度指示控件,广泛用于各种Win95程序。
它一般用在需要较长处理时间的场合,如在程序加载数据、更新系统、检查硬件时,用本控件提示用户程序正在工作、
进度条控件的重要属性有:
Min(最小值)、Max(最大值)、Value(当前值)。
二、滑片控件(Slider)
滑片控件最大的特点是可以很方便地进行手工拖动重定位,这种特性决定了它主要用于交互性较强的场合,如著名的软解压软件XingMPEGPlayer就使用滑片控件来进行播放控制,它一面用来显示播放进度,同时用户还可通过拖动滑片来选择适当的投放位置。
另外,win95本身也大量使用了这种控件,如“控制面板”中的“鼠标”和“键盘”等。
滑片控件的重要属性有:
Min(最小值)、Max(最大值)、SmallChange(最小变化值)、LargeChange(最大变化值)、Orientation(方向)、TickStyle(标尺和滑片风格)、TickFrequency(标尺间隔)和Value(当前值)等,其中Orientation(取值为0或1)决定了滑片控件是水平显示还是竖直显示,TickStyle(取值从1到4)可以控制滑片的形状、是否显示标尺及标尺的位置。
三、3D面板控件(SSPanel)
3D面板控件是另一种常见的进度指示控件,其最大的物点是除了*以用进度条表示进度情况外,还可以准确地显示出进度百分比。
由于有了这种特性,3D面板控件经常被用于各种安装程序,使用户可以清楚地了解软件安装的进展情况。
值得一提的是,3D面板控件还有一个非常有趣的特性,即进度条的滚动方向有上-->下、下-->上、左-->右、右-->左四种,甚至可以以同心圆的方式从里向外滚动。
3D面板控件的主要瞩性有:
FloodType(滚动类型)、FloodPercent(进度百分比)、FloodshowPct(是否显示进度百分比)等,其中FloodType(取值从1到5)决定了进度条的滚动方向。
四、程序举例
上面我们简单介绍了三种不同风格的进程指示控件各自的特点,下面我们以一个具体的例子来演示它们的用法。
1.窗体设计
新建一个普通窗体,在其中放置一个进度条控件、一个滑片控件、一个3D面板控件和一个Timer控件,主要的属性设置如下:
控件名称主要属性属性值
Slider1TickStyle
Orientation
Maz
Min
Value0-sldBoth
0-sldHorizontal
5
100
0
0
ProgressBar1Maz
Min
Value100
0
0
Panel3dlFloodShowPct
FloodType
FloodPercentTrue
1-LeftToRight
0
Timer1Interval200
2.代码
在Time1的Timer事件中编写如下代码:
PrivateSubTimer1_Timer()
IfProgressBar1.Value=100Then
'当进度条到最右边后,改变滑片控件与3D面板控件的风格
withSliderl
'滑片风格从0到3变化
If.TickStyle<3then<3Then
.TickStyle=.TickStyle+1
Else
.TickStyle=0
'当风格变为0时改变水平(竖直)方向
.Orientation=.OrientationXorl
EndIf
EndWith
WithPanel3d1
'3D面板的风格从1到5变化
If.FloodType<5Then<5Then
.FloodType=.FloodType+1
Else
.FloodType=1
EndIf
EndWith
'设定三种控件的初始值
ProgressBar1.Value=0
SLider1.Value=0
Panel3d1.FloodPercent=0
Else
'设定三种控件每次滑动的值
PrpgressBar1.Value=ProgressBar1.Value+5
Slider1.Value=Slider1.Value+5
Panel3d1.FloodPcrcent=Panel3d1.FloodPercent+5
EndIf
Endsub
3.运行
设计完毕,按F5运行,三种进程指示控件竞相在屏幕上展示自己的风采,不断地变化显示风格。
此图是演示过程中的一个画面。
本文介绍了Windows环境下几种进程指示控件的特性和使用,希望读者能在自己的应用程序中灵活地使用。
作者:
王卫
如何在程序中滚动TextBox?
源代码如下,使用SendMessage发送消息EM_LINESCROLL
OptionExplicit
PublicConstEM_LINESCROLL=&HB6
DeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong
PrivateSubCommand1_Click()
SendMessageText1.hwnd,EM_LINESCROLL,Val(txtX),ByValCLng(Val(txtY))
EndSub
调用Office97技巧
VisualBasic5.0具有简单、易学等特点,深受初学者的欢迎,但也有一些不如人意的地方。
例如,不能像Word97那样进行拼写检查,不能像Excel97那样具有很多的函数。
如果我们能将Word97和Excel97的功能使用在VisualBasic5.0中,就可以使VB达到锦上添花的目的。
我们知道所有Office97应用程序都提供了ActiveX对象,我们可以在VisualBasic5.0中使用它们。
调用Word97
要想在VB中调用Word97,首先要打开VB的“工程”菜单中的“引用”项目,并在该项目对话框中选定“MicrosoftWord8.0ObjectLibrary”就可以了。
下面我们举例说明调用Word97中的“拼写检查”和“单词统计”功能。
首先新建一个工程并在窗体上放置一个TextBox控件和两个CommandButton控件,然后添入如下的代码:
OptionExplicit
DimDocAsNewDocument
DimVisiAsBoolean
图1调用Word97
′拼写检查
PrivateSubCommand1-Click()
Form1.Caption=“拼写检查"
Doc.Range.Text=Text1
′确定范围
Doc.Application.Visible=True′将Word97变为可见
AppActivateDoc.Application.Caption
′激活Word97
Doc.Range.CheckSpelling
′拼写检查
Text1=Doc.Range.Text
Text1=Left(Text1,Len(Text1)-1)
AppActivateCaption
EndSub
′统计单词数
PrivateSubCommand2-Click()
DimDlgAsWord.Dialog
Doc.Range=Text1.Text
SetDlg=Doc.Application.Dialogs
(wdDialogDocumentStatistics)
Dlg.Execute′统计单词和字符
Form1.Caption=“单词数:
"&Str(Dlg.Words)&“词"
&Str(Dlg.Characters)&“字符"′显示统计结果
EndSub
PrivateSubForm-Load()
Form1.Caption=“调用Word97"
Text1.Text=“"
Command1.Caption=“拼写检查"
Command2.Caption=“统计单词"
′使应用程序可见
Visi=Doc.Application.Visible
EndSub
′关闭应用程序
PrivateSubForm-Unload(CancelAsInteger)
IfVisiThen′关闭文件
Doc.Closesavechanges:
=False
Else
Doc.Application.Quitsavechanges:
=False′关闭Word97
EndIf
EndSub
运行中的窗体如图1所示。
图2调用Excel97
调用Excel97
使用ExcelSheet对象的技术可以处理可变数量的数据,并将结果最后送到你的VisualBasic应用程序中。
例子如下:
新建一个工程并在新建的窗体上放置两个TextBox控件和一个CommandButton控件及六个Label控件。
建设中的窗体如图2所示。
程序代码如下:
OptionExplicit
PrivateSubCommand1-Click()
DimxObjectAsObject
′调用Excel97
SetxObject=CreateObject(“Excel.Sheet")
SetxObject=xObject.Application.ActiveWorkbook.ActiveSheet
xObject.Range(“A1").Value=Text1.Text′将数值送入Excel97的A1单元格
xObject.Range(“A2").Value=Text2.Text′将数值送入Excel97的A2单元格
xObject.Range(“A3").Formula=“=MAX(A1,A2)"′将最大值送入A3单元格
xObject.Range(“A4").Formula=“=ATAN(A1/A2)*180/PI()"′将反正切值送入A4单元格
′显示计算的结果
Label1.Caption=xObject.Range(“A3").Value
Label2.Caption=xObject.Range(“A4").Value
SetxObject=Nothing
EndSub
PrivateSubForm_Load()
Text1.Text=“"
Text2.Text=“"
Label1.Caption=“"
Label2.Caption=“"
EndSub
该程序的作用是:
首先在两个文本框(Text1和Text2)输入数值并分别将输入的数值送入Excel97的“A1”和“A2”单元格中,然后用Excel97中的“Max()”函数将计算的结果送入“A3”单元格中;用反正切函数“ATAN()”进行计算并将结果送入“A4”单元格中,最后输出。
作者:
袁津生
用VB制作TopMost类型窗口
TopMost这个词也许你很陌生,但具有TopMost窗口的软件你应该早就接触过,如Office97、网络吸血鬼、IE等。
所谓TopMost窗口是指哪些始终出现在桌面的最前方且不会被其它窗口覆盖的窗口,如网络吸血鬼中的下载图标。
一般憎况下,在运行VB程序时,窗口总有可能会被其它程序的窗口所覆盖。
如何在自己的应用程序中实现TopMost类型的窗口呢?
我们可以通过调用WindowsAPI函数SetWindowPos来实现。
一、SetWindowPos函数介绍
SetWindowPos函数功能是将一个窗口在三维空间中移动,利用它,你可以改变一个窗口的位置,甚至可以在Z轴上改变(Z轴决定了一个窗口和其它窗口的前后关系),你还可以改变窗口的尺寸。
为了实现TopMost类型的窗口,我们只需调用该函数,将窗口放在所有窗口的前面并永远保持在最前面即可。
要想在VB中使用SetWindowPos函数,必须在程序的代码模块中进行如下的函数声明:
DeclareFunctionSetwindowPosLib"user32.dll"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsasLong)AsLong
SetWindowPos函数各个参数的含义见表1。
表1SetWindowPos函数的参数解释
参数名参数含义
hwnd要移动的窗口的句柄(可以用窗体的hwnd属性)
hWndInsertAfter关于如何在Z轴上放置窗口的标记(具体见表2)
x相当于窗口的Left属性
y相当于窗口的Top属性
cx相当于窗口的Right属性
cy相当于窗口的Bottom属性
wFlags关于如何移动窗口的标记(具体见表3)
表2HWndInsertAfter参数的可能取值及含义
hWndInsertAfter的可能取值功能
某一窗口的句柄将窗口放在该句柄指定的窗口后面
HWND_BOTTOM
(1)把窗口放在Z轴的最后,即所有窗口的后面
HWND_TOP(0)将窗口放在Z轴的前面,即所有窗口的前面
HWND_TOPMOST(-1)使窗口成为“TopMost”类型的窗口,这种类型
的窗口总是在其它窗口的前面,真到它被关闭
HWND_NOTOPMOST(-2)将窗口放在所有“TopMost”类型
窗口的后面、其它类型窗口的前面
表3wFlags参数的可能值及含义
wFlags参数的可能值功能
SWP_DRAWFRAME(&H20)移动窗口后重画窗口及其上的所有内容
SWP_HIDEWINDOW(&H80)隐藏窗口,窗口隐藏后既不出现在屏幕上也不出现在任
务栏上,但它仍然处于激活状态
SWP_NOACTIVATE(&H10)窗口移动后不激活窗口,当然,如果窗口在移动前就是
激活的则例外
SWP_NOCOPYBITS(&H100)当窗口移动后,不重画它上面的任何内容
SWP_NOMOVE(&H2)不移动窗口(即忽略X和Y参数)
SWP_NOSIZE(&H1)不改变窗口尺寸(即忽略Cx和Cy参数)
SWP_NOREDRAW(&H8)Donotremovetheimageofthewindowinitsformerposition
fromthescreen.Inotherwords,leavebehindaghostimage
ofthewindowinitsoldposition
SWP_NOZORDER(&H4)不改变窗口听Z轴位置(即忽略hWndInsertAfter参数)
SWP_SHOWWINDOW(&H40)显示窗口(之前必须使用过SWP_HIDEWINDOW
隐藏窗口)
前面已提到,利用SetWindowPos函数可以决定窗口在Z轴中的位置,具体如何放置,需根据表2给hWndInsertAfter参数赋予合适的值。
另外,wFlags参数为SetWindowPos函数移动窗口提供了附加的特性,我们可以通过or运算将表3中若干个wFlags结合在一起使用,如SWP_NOMOVEOrSWP_NOSIZE既不移动窗口又不改变窗口的尺寸。
但是要注意不要将功能冲突的值结合使用,如SWP_HIDEWINDOWOrSWP_SHOWWINDOW。
二、程序举例
下面,我们以一个简单的例子说明SetWindowPos函数的用法及如何实现TopMost类型窗口。
新建工程,在普通窗体Form1上放置两个命令按钮cmdNormal和cmdTopMost,命令按钮的Caption属性分别为“变成普通窗口”和“变成TopMost窗口”。
cmdNormal的Enabled属性为False。
为工程添加代码模块Moudall,在其中放置如下声明代码:
DeclareFunctionSetWindowPosLib"user32"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLong
PublicConstSWP_NOMOVE=&H2'不移动窗体
PublicConstSWP_NOSIZE=&H1'不改变窗体尺寸
PublicConstFlag=SWP_NOMOVEOrSWP_NOSIZE
PublicConstHWND_TOPMOST=-1'窗体总在最前面
PublicConstHWND_NOTOPMOST=-2'窗体不在最前面
为窗体添加代码如下:
PrivateSubcmdNormal_Click()
cmdTopMost.Enabled=True
cmdNormal.Enabled=False
Form1.Captio="现在是普通窗口"
SetWindowPosForm1.hwnd,HWND_NOTOPMOST,0,0,0,0,Flag
EndSub
PrivateSubcmdTopMost_Click()
cmdTopMost.Enabled=False
cmdNormal.Enabled=True
Form1.Caption="现在是TopMost窗口"
SetWindowPosForm1.hwnd,HWND_TOPMOST,0,0,0,0,Flag
EndSub
按下F5,运行程序,单击“变成TopMost窗体”命令按钮,此时窗口即成为TopMost类型。
随意打开桌面上的其它窗口,Form1总是处在其它窗口的前面;如果单击“变成普通窗体”按钮。
则一切又恢复正常,一旦打开了其它窗口,则其它窗口会将Form1窗口覆盖。
本程序用VisualBasic5.0编写,在Pwin95、Pwin97环境下运行正常。
一组应用技巧(制作透明窗体,路径问题,创建快捷方式等)
路径问题
很多程序员在打开文件、调用程序时喜欢使用绝对文件路径,结果在另一台计算机上运行时便会遇到路径不对或需要重新拷贝到该目录的问题。
其实,只要使用相对路径,就完全可以避免这个问题。
在Windows下,某个程序一旦运行,除非特别指定了工作目录,一般该程序文件所在