VB使用编程技巧三则

2016-02-19 18:28 9 1 收藏

今天给大家分享的是由图老师小编精心为您推荐的VB使用编程技巧三则,喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

【 tulaoshi.com - 编程语言 】

----1、VB中实现动态移动控件
  
  ----窗体中的控件如按钮、文本框等一般在运行时位置是固定不变的,但为了能给用户更方便的功能,我们可以做到在运行时动态移动控件的位置,比如我们可以允许用户随便将按钮放到自己喜欢的位置,而并非界面中固定的位置。其实这个功能实现起来是很容易的,只需要使用API函数SendMessage传递控件移动的消息即可。
  
  ----下面是一个例子,当用户单击按钮后可以移动按钮的位置。
  
  ----在窗体的总体声明部分声明SendMessage函数及用到的两个常量:
  
  PrivateDeclareFunctionSendMessage
  Lib"user32"Alias_
  "SendMessageA"(ByValhwndAs
  Long,ByValwMsgAsLong,_
  ByValwParamAsLong,lParamAsAny)AsLong
  ConstWM_SYSCOMMAND=&H112
  ConstSC_MOVE=&HF012
  
  ----在窗体中添加一命令按钮Command1,双击写代码如下:
  
  PrivateSubCommand1_Click()
  Dimretn
  retn=SendMessage(Command1.hwnd,
  WM_SYSCOMMAND,SC_MOVE,0)
  EndSub
  
  ----在窗体中添加命令按钮Command2,双击写如下代码:
  
  PrivateSubCommand2_Click()
  unloadme
  EndSub
  
  ----运行此程序,单击命令按钮1,然后移动鼠标可以发现按钮的边框跟随鼠标移动,在新位置处单击鼠标就可以按钮移动过去了,单击按钮2可结束程序。
  
  ----2、保持窗口的比例不变。
  
  ----WINDOWS下的窗口一般都可以通过鼠标拖动来扩大,有些时候我们需要控制窗口的比例不变,以防窗口比例失调时造成界面的不协调。要做到这一点,可以利用API函数CallWindwosProc,当得到用户调整窗口的消息时,判断X或Y方向上的比例是否和原来的比例一样,如果不一样,则调整为一样。下面是一个例子。
  
  ----在窗体中加一个命令按钮Command1,双击写如下代码:
  
  PrivateSubCommand1_Click()
  UnloadMe
  EndSub
  
  ----双击窗体写如下代码:
  
  PrivateSubForm_Load()
  OldWindowProc=SetWindowLong(hwnd,GWL_WNDPROC,AddressOfNewWindowProc)
  EndSub
  
  ----将下面的代码放入一个模块中:
  
  OptionExplicit
  PublicOldWindowProcAsLon
  '声明API函数如下:
  DeclareFunctionCallWindowProcLib
  "user32"Alias"CallWindowProcA"_
  (ByVallpPrevWndFuncAsLong,ByVal
  hwndAsLong,ByValmsgAsLong,_
  ByValwParamAsLong,lParamAs
  WINDOWPOS)AsLong
  DeclareFunctionSetWindowLongLib
  "user32"Alias"SetWindowLongA"_
  (ByValhwndAsLong,ByValnIndex
  AsLong,ByValdwNewLongAsLong)AsLong
  
  PublicConstGWL_WNDPROC=-4
  '定义一个窗口位置数据类型
  TypeWINDOWPOS
  hwndAsLong
  hWndInsertAfterAsLong
  xAsLong
  yAsLong
  cxAsLong
  cyAsLong
  flagsAsLong
  EndType
  PublicConstWM_WINDOWPOSCHANGING=&H46
  PublicConstWM_WINDOWPOSCHANGED=&H47
  '处理窗口变化的函数
  PublicFunctionNewWindowProc
  (ByValhwndAsLong,ByValmsgAsLong,_
  ByValwParamAsLong,lParamAsWINDOWPOS)AsLong
  Staticdone_beforeAsBoolean
  StaticaspectAsSingle
  Dimnew_aspectAsSingle
  
  Ifmsg=WM_WINDOWPOSCHANGINGThen
  IflParam.cy0Then
  '保存原来的比例
  IfNotdone_beforeThen
  aspect=lParam.cx/lParam.cy
  done_before=True
  EndIf
  
  new_aspect=lParam.cx/lParam.cy
  Ifnew_aspectaspectThen
  lParam.cy=lParam.cx/aspect
  Else
  lParam.cx=aspect*lParam.cy
  EndIf
  EndIf
  EndIf
  
  NewWindowProc=CallWindowProc
  (OldWindowProc,hwnd,msg,wParam,lParam)
  
  EndFunction
  
  ----运行此程序,当用鼠标拉窗体的边界扩大窗口时,将会发现另一边也相应地扩大,整个窗口的比例不变,单击command1结束程序。
  
  ----3、使用系统的“关于”对话框。
  
  ----也许你在软件中需要一个“关于”对话框,如果要求不高的话,可以不必再用一个窗体做“关于”对话框,可利用系统的对话框,虽然其中含有微软的一些信息,但你还是可以添加自己的某些信息,系统提供的“关于”对话框还有内存、资源等有关信息,你不需再为这些信息写任何代码。要使用系统的“关于”对话框,只需声明API函数ShellAbout,然后直接调用即可,例如:
  
  '声明API函数
  PrivateDeclareFunction
  ShellAboutLib"shell32.dll"_
  Alias"ShellAbout"(ByValhwnd
  AsLong,ByValszAppAsString,_
  ByValszOtherStuffAsString,
  ByValhIconAsLong)AsLong
  
  在需要的地方使用它:
  PrivateSubABOUTCd_Click()
  x=ShellAbout(Form1.hwnd,"VB编程乐园网站指南","博士电脑软件工作室",Form1.Icon)
  EndSub->

来源:http://www.tulaoshi.com/n/20160219/1617801.html

延伸阅读
标签: PHP
PHP编程常用技巧四则: 1.配置PHP文件目录 作为服务器端解释执行的脚本语言,PHP程序放置在某个服务器可以访问的目录下,一般可以通过修改Apache的httpd.conj进行配置,例如我们在该文件中的一句: Alias /test/ "d:brhpwebsitebrhp/" 那么在浏览器端输入:http://localhost/test/+PHP文件名就可...
标签: 办公软件
一、Ctrl键实现快速复制 要复制大量复制文字或图形时,先选中内容,在按下Ctrl键的同时,用鼠标将选中的内容拖动到合适的位置即可(拖动的过程中你会发现鼠标指针旁有个“+”号,表示的是正进行“复制”操作)。这样比利用常规的先选取并“复制”再“粘贴”的方法快捷得多。 二、“Ctrl+Shift+>(<)”键快速更改字号 要...
步骤一:首先要先把控制项给叫出来,你只要按下Ctrl T後选取WinsockControl5.0若是用VB6的就选WinsockControl6.0,这样就可以使用Winsock元件。 步骤二:再来我们必须先确定程式是作Server端还是Client端的,要先设定一些属性: Server写法:winsock1.localPort=5400(数字可以随便设) winsock1.Listen(等待连线) Client写法:winsock1....
标签: 办公软件
对于Word中的超链接功能,大家应该并不陌生,笔者在使用Word中的超链接时总结出了一些经验,现在写出来供大家参考。 1.使用“屏幕提示” 我们在浏览网页时,如果把鼠标指针悬停在某个超链接上面,有时就会出现这个超链接的内容介绍。其实这很容易用Word的超链接功能实现。方法如下:在要添加屏幕提示的文字或图片超链接上面点击...
问题:在多线程中调用Winform 我的WinForm程序中有一个用于更新主窗口的工作线程(worker thread),但文档中却提示我不能在多线程中调用这个form(为什么?),而事实上我在调用时程序常常会崩掉。请问如何从多线程中调用form中的方法呢? 解答: 每一个从Control类中派生出来的WinForm类(包括Control类)都是依靠底层Wind...

经验教程

818

收藏

37
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部