程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> VB使用編程技巧三則

VB使用編程技巧三則

編輯:VB綜合教程
----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.cy>0Then
  '保存原來的比例
  IfNotdone_beforeThen
  aspect=lParam.cx/lParam.cy
  done_before=True
  EndIf
  
  new_aspect=lParam.cx/lParam.cy
  Ifnew_aspect>aspectThen
  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->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved