|
|

楼主 |
发表于 2017-7-30 01:11:18
|
显示全部楼层
来自: 中国陕西西安
- Option Explicit
& d; I4 M3 ^) L! c* w - 6 \; q& G1 K) F- L
- ' 定义用户类型,以减少#if VBA7语句的数量,但不能消除他们...* C! G' q/ V2 R" n
- Private Type LongPtr_T
; a7 u0 @# B2 E5 w. x5 s7 @3 o - #If VBA7 Then9 N6 a( B' I, {5 _: ?4 v# R8 j
- Value As LongPtr; c, S! Q7 v1 E0 K9 Y
- ' Compare automatically resized LongPtr to fixed size Long and LongLong. t$ A" B; g$ X4 A3 G5 G
- #Else$ j3 Z P- y! p# B; T
- Value As Long v, ?0 x, { V/ Y3 }5 E
- #End If& y6 R/ ?* ~: E% \
- End Type
! j) g/ f2 K7 G$ |8 \1 N - 1 a; l% a5 o8 ?; n$ s `
- ' Win32 数据类型. Different signatures for different versions of VBA. S- }* ]: O) W' L+ }
- Private Type BROWSEINFO4 W- W, h/ {; N# {8 d) e
- #If VBA7 Then
" |/ {3 J+ i- Z5 q8 x - hWndOwner As LongPtr
6 d+ A$ ^2 v4 r - pIDLRoot As LongPtr/ T2 Q/ h: Y M
- pszDisplayName As Long& r% U* z4 k9 k' |& X+ k; a7 s
- lpszTitle As String
+ |) S" u' ^; ]2 z6 {! N6 I( ` - ulFlags As Long$ u6 q: k8 [, V6 M! x( {
- lpfnCallback As LongPtr
! E2 u: h! F. X% l - lParam As Long
- T2 L# _+ J) A( y5 R - iImage As Long
# W2 x0 x" r- L2 h# a4 O - #Else, l# C8 l- x" D" R
- hWndOwner As Long
, Y$ k4 j* B! f q - pIDLRoot As Long
$ x* x& i2 P: M: d) n' e# T4 | - pszDisplayName As Long
6 h! e3 o' {: |4 U# N8 h - lpszTitle As String! ?2 c6 S+ H$ T0 [+ F* G
- ulFlags As Long
: [( }6 {+ q/ e% |! @ - lpfnCallback As Long
# h; o! W9 Y1 v/ N( q, Z - lParam As Long
, P# n0 g! }) C" N" u/ {1 T8 F7 z - iImage As Long, D- a4 `1 T F$ }" R) }
- #End If
1 C1 q8 Q2 E/ e* v - End Type
; y+ S1 J. I# x( L7 W - 7 K6 R6 C& N7 V. O! f/ ~* D: Z
- Private Const MAX_PATH = 260
. ?7 M0 h K. T( k. a% n5 F - 'Directories only& W7 c: ^( i) y2 ~5 h: r
- Private Const BIF_RETURNONLYFSDIRS = &H1&- r7 W/ Z. T% }3 V, v
- 'Windows 2000 (Shell32.dll 5.0) extended dialog
( [8 p; l( w- f2 i& L - Private Const BIF_NEWDIALOGSTYLE = &H40% A, H% n& _! a4 K! K7 b
- ' show edit box3 O6 M! m$ Y( k4 ]: Q
- Private Const BIF_EDITBOX = &H10&+ g7 F' g* P% U% R' n
: l; [% S) V/ P- Private Const WM_USER = &H400! H, S) L/ ^! t" s( O
- Private Const BFFM_INITIALIZED = 1+ J2 S8 N4 O) l* q
- Private Const BFFM_SELCHANGED = 2
( V2 i3 W$ \7 T% k. G! c - Private Const BFFM_SETSTATUSTEXTA = (WM_USER + 100)
4 g) ~2 s% ^ R8 n" K
* f' U! g. V* o4 [+ `& }" t- Private Const BFFM_SETSELECTIONA = (WM_USER + 102)+ ]/ W: @; E" f! x
- Private Const BFFM_SETEXPANDED = (WM_USER + 16)' Y: X) g2 E& a4 g* ~
- 1 C; M r+ S" k( j' x' M. K
- Private m_sDefaultFolder As String
& [$ N, }/ g- z( h) e - - ? U* R0 x% T8 _% Z" j7 h' z
- Public Const SWP_NOMOVE = 2' w$ Z; P) r5 O7 W) i7 G
- Public Const SWP_NOSIZE = 12 D+ o% r; y1 k7 q8 s/ ]
- Private Const SWP_NOZORDER = 4
" V9 g! y) ?4 F+ H
3 H0 M' L3 x8 h# N2 x; Y- Private Type RECT
1 W# ]4 `, o) A& @ R1 S& H - Left As Long
0 {! `: m% u1 } - Top As Long5 {: L- }/ ?' o. ~% I6 L
- Right As Long; }, ~9 X/ n+ S4 b$ l: G& C
- Bottom As Long4 h+ j" @6 C8 @8 I; {( U% r
- End Type& r/ \" u g# Z) x5 l. ?; i
- $ {: O' l) k- X3 |- [
- ' Win32 API declarations. Different signatures for different versions of VBA.
$ [! ?' O4 a2 ^" `6 Y& |9 z - ' Note the mandatory use of PtrSafe keyword in VBA7.
: d7 c. L7 x: d! [! V - #If VBA7 Then- U& c1 a: d6 E" {
- Private Declare PtrSafe Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
: e7 C) y/ G; r$ H/ A7 f - Private Declare PtrSafe Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long
- ]1 B4 z5 C; V/ \8 D - Private Declare PtrSafe Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As LongPtr, ByVal lpBuffer As String) As Long; t& O3 k# Y- r1 I; L' e
- Private Declare PtrSafe Sub CoTaskMemFree Lib "ole32" (ByVal hMem As LongPtr)6 r+ t- R$ E& d; v9 c& u
- Private Declare PtrSafe Function SetWindowPos Lib "USER32" (ByVal hWnd As LongPtr, _
; s; ~- {$ ]) H% f - ByVal hWndInsertAfter As LongPtr, _: _3 Q# o5 m' t3 t
- ByVal x As Long, _; {8 ~7 k8 y$ h" ]9 k
- ByVal y As Long, _; C; t2 a2 M( a% I7 N
- ByVal cx As Long, _
3 e' n. h% p9 ^+ k7 \9 m - ByVal cy As Long, _+ q8 s; f9 W, g! d6 F! `1 U
- ByVal wFlags As Long) As Long
# b* J0 H5 L q! I! A4 g' {8 I0 ~ - Private Declare PtrSafe Function GetWindowRect Lib "user32.dll" (ByVal hWnd As LongPtr, lpRect As RECT) As Long
! \' E/ E8 k. t6 ~. B4 @0 n$ G
% c, Y9 N4 V, m- #Else2 ?! m. L L! |/ z/ \. Y, f
- Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
" J3 V) @7 |3 U: @& o* \, r - Private Declare Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long
7 D" Q1 \9 X0 ^8 B8 Z: M - Private Declare Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long1 X; c5 s% L! Y( T0 w* g z
- Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal hMem As Long)
" @+ [: ^; W- S+ S8 k' U& D - Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _# H% v; N/ f4 i' V4 X0 ~; D6 a) ~
- ByVal hWndInsertAfter As Long, _
2 }- z' a) [9 i! S - ByVal x As Long, _9 Q& R! p* R/ X
- ByVal y As Long, _5 \" d, O. ]6 ?3 N
- ByVal cx As Long, _* o& R. V) F9 n2 M9 f# V! d3 t# j
- ByVal cy As Long, _$ B' @$ b' U4 L- f
- ByVal wFlags As Long) As Long
4 d! N) x1 |8 W0 p% a - Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, lpRect As RECT) As Long. O+ N' n2 p# D( N
- ; o: J9 V" k0 C+ H; D3 z; D1 B" z
- #End If( W. H5 s! b! \( B W
- ) v2 n6 C3 M1 D% O6 @
- Private lastKnownPosition As RECT
1 o# E) e) j$ I, E, ?/ d - Private lockLastKnownPosition As Boolean
复制代码 # [8 C( ^# _# G2 e# [
梁大,将这一段修改一下 |
|