|
|

楼主 |
发表于 2017-7-30 01:11:18
|
显示全部楼层
来自: 中国陕西西安
- Option Explicit# @+ `& q) d d' k" F
- & k6 I1 \" t2 m/ s" L5 s
- ' 定义用户类型,以减少#if VBA7语句的数量,但不能消除他们...7 A& m# A5 t8 h4 w
- Private Type LongPtr_T( y% D1 j* f. t) M& i3 L. g
- #If VBA7 Then
8 [' ^4 C% g; N9 o! Q; `: D - Value As LongPtr
8 t8 w: z: R% Q - ' Compare automatically resized LongPtr to fixed size Long and LongLong! Z* W# t# f: G. @$ F. F7 \5 }
- #Else6 s/ `4 w% E# N( G
- Value As Long1 o6 \5 ?3 q2 U- D
- #End If
! D8 m( }* d: i' f/ \0 G+ G+ R - End Type
1 e9 F+ h" x& x - 5 }* k( @3 s5 ^, V* p6 X
- ' Win32 数据类型. Different signatures for different versions of VBA
6 z$ N- u* h# T- p4 Y& P - Private Type BROWSEINFO
' H9 Y% s7 A, l" l8 m - #If VBA7 Then
6 O( s5 N3 {5 K2 X - hWndOwner As LongPtr: ^7 g& q* ]# k' P' g* B' ^* x6 \
- pIDLRoot As LongPtr3 C$ G, ]' c; v% X$ x
- pszDisplayName As Long
2 f2 l. U$ \% L& x7 W- U7 L0 N - lpszTitle As String
N0 P+ g+ ~/ G, l* f! m1 G - ulFlags As Long
7 C6 I2 H3 ]' h* { - lpfnCallback As LongPtr1 i3 Q5 u5 g7 S& S
- lParam As Long
9 e: G1 \# p1 M7 ~6 R - iImage As Long
+ \ ]0 F: v1 h7 K - #Else, T- D3 j5 B1 f& [8 h+ L& L' ]$ k
- hWndOwner As Long# F3 `. n: x b; a
- pIDLRoot As Long
+ w2 L& R4 N1 ^( T9 A6 n7 U - pszDisplayName As Long
; c# c( q; l7 q; ` - lpszTitle As String# }; C" T3 k7 X0 n4 g b9 q
- ulFlags As Long \! ?, S8 S2 x$ t2 }
- lpfnCallback As Long
3 M) h9 w7 l, P4 @4 Y - lParam As Long& {$ k* B$ H5 s( s- C4 ^3 W
- iImage As Long
/ y; d- H9 c1 ^' g; _+ E8 s - #End If& u+ b$ q9 O. x, R6 x
- End Type
6 y0 q6 {% Z# y) H e% j0 B - A: D; M7 A/ |
- Private Const MAX_PATH = 260
5 r: U5 p9 J/ o - 'Directories only
% H# r2 @( ^, [ - Private Const BIF_RETURNONLYFSDIRS = &H1&
; E: R3 ]7 x/ p, J! _& u! I, B, ~6 ?/ Q - 'Windows 2000 (Shell32.dll 5.0) extended dialog
& G& }( U: E; G$ A - Private Const BIF_NEWDIALOGSTYLE = &H40: A2 m a$ Z0 v2 d0 }, M0 M- l! i% A# O. }
- ' show edit box- n7 z6 L2 B5 A
- Private Const BIF_EDITBOX = &H10&
" Q" n; }- u2 c% ` - 8 S( Y, F% i% h% t# q3 [
- Private Const WM_USER = &H400' f& c# ~5 i" V1 ^; N
- Private Const BFFM_INITIALIZED = 1# k% L' \7 V% J! E% j! t( u+ K4 C
- Private Const BFFM_SELCHANGED = 2
2 B4 N' [! J; N7 {2 Q - Private Const BFFM_SETSTATUSTEXTA = (WM_USER + 100)
+ y/ k. O6 Q, l: Q' M/ ~ - 7 `$ ?* V$ s/ W" m: \! z
- Private Const BFFM_SETSELECTIONA = (WM_USER + 102)
# w* E0 Z. }& Y) `4 } - Private Const BFFM_SETEXPANDED = (WM_USER + 16)6 Q7 W6 D. U5 R1 T7 |6 X/ h, n7 c$ L
* l# ^; x2 n+ B- Private m_sDefaultFolder As String2 I' Q* K, o/ S- M/ J5 z
]/ `4 ~8 f4 R7 s3 L- Public Const SWP_NOMOVE = 2; W9 \4 X* @( ^' |
- Public Const SWP_NOSIZE = 1" V$ {, ?) B/ M& K$ e/ J; i7 k! i
- Private Const SWP_NOZORDER = 4
0 e5 Y' G' Y( }/ G4 p q - & C. T u1 n- R* `1 z5 c( c% t
- Private Type RECT
& }+ O0 ^6 A/ x# g5 l - Left As Long1 @0 x$ W0 P( ?3 f/ V
- Top As Long
" U& N4 V" P" c+ p - Right As Long- y2 R9 p9 n1 R
- Bottom As Long
! ~' R! n; F/ t( \0 a, I3 _9 J - End Type
# A% X2 Q" v8 \& B - 9 G p6 r4 j% w! @1 K& L; H
- ' Win32 API declarations. Different signatures for different versions of VBA.
& r! V7 W7 U2 a, p - ' Note the mandatory use of PtrSafe keyword in VBA7.3 ?! p( A' q. h+ x5 H* l2 Y) D$ L
- #If VBA7 Then
; f8 u) F8 Q; V. X - 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
, R' r5 C1 _9 v5 i0 U - Private Declare PtrSafe Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long
! W* _ O0 U& l( O7 t - Private Declare PtrSafe Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As LongPtr, ByVal lpBuffer As String) As Long
! L9 F) `* ~# k$ M3 f# l4 x% g% n - Private Declare PtrSafe Sub CoTaskMemFree Lib "ole32" (ByVal hMem As LongPtr)
" H1 P) x/ q3 ]: O5 h - Private Declare PtrSafe Function SetWindowPos Lib "USER32" (ByVal hWnd As LongPtr, _
0 W% u5 ?( O! ?3 t6 N - ByVal hWndInsertAfter As LongPtr, _" D; ?" \. f& ^; ^: ]" \
- ByVal x As Long, _
2 W( b+ h8 n. d( `# O) C* r. s( W - ByVal y As Long, _+ [6 o+ S7 U- n) F% R
- ByVal cx As Long, _
5 a# o" s- y, l3 z; l# Q - ByVal cy As Long, _- D. _+ ?1 |$ K+ u* y
- ByVal wFlags As Long) As Long" P6 d. p8 _$ H' B
- Private Declare PtrSafe Function GetWindowRect Lib "user32.dll" (ByVal hWnd As LongPtr, lpRect As RECT) As Long
! B& V C. s7 ` - & o& W: y0 ^6 ]3 J H; ]
- #Else
, S2 ~# t o9 p" y- I; k: s - 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
! a$ h# v9 A) I$ a - Private Declare Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long; \. R+ B+ I) X3 V: |: P, i" A9 H( J
- Private Declare Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long: f& m! A5 X6 q& D
- Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal hMem As Long)
: P$ E' T3 a' | - Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _
; G6 I: p0 m% H' n' o* S5 m - ByVal hWndInsertAfter As Long, _. t& [5 P7 l- I9 z X3 J
- ByVal x As Long, _
2 D( B+ i- r3 k7 M$ q- r" l - ByVal y As Long, _+ o0 m! C: `- ^ Z5 ^
- ByVal cx As Long, _
/ Y9 }2 l* @6 u$ _ - ByVal cy As Long, _% ^7 n! Q7 L1 @% c' z
- ByVal wFlags As Long) As Long
% W! \* C' ?1 q' x& E! U' j x - Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, lpRect As RECT) As Long
/ k8 T. h, t% V$ S1 P* ]8 |6 ]
9 d, u7 `4 X$ D) d) Q C8 I- #End If" F o4 h+ k, F' Q4 n
- R; G- o* J) d( l1 F
- Private lastKnownPosition As RECT
9 q9 d8 H0 J( | - Private lockLastKnownPosition As Boolean
复制代码 % l D# T+ N/ f* Y. ^' m
梁大,将这一段修改一下 |
|