|
|

楼主 |
发表于 2017-7-30 01:11:18
|
显示全部楼层
来自: 中国陕西西安
- Option Explicit
( _& h) G$ t" H: c& M0 C - ) H' X7 h$ l% b, }; [( ?# q
- ' 定义用户类型,以减少#if VBA7语句的数量,但不能消除他们...# |; R# b% i. N
- Private Type LongPtr_T
# g5 J2 N5 M9 }: ^. @ - #If VBA7 Then% m% _3 b) [: b" L$ b
- Value As LongPtr
0 {& X" p I! i" r8 |8 X - ' Compare automatically resized LongPtr to fixed size Long and LongLong' L! H* g" m* _2 ?1 L
- #Else2 b. e% Q2 R. I/ c5 [
- Value As Long
) Q0 i0 k- G2 i- ]3 t. B - #End If( B I5 i. g- s" ^5 m4 u
- End Type1 ?/ K! {. i/ c/ m0 G+ _2 s( j
- 7 _4 {. B) o7 ^1 T$ G
- ' Win32 数据类型. Different signatures for different versions of VBA
5 T7 h# X) p2 D# S+ M' ]: u8 ` l. v - Private Type BROWSEINFO
9 g( U+ r- M% z9 ^3 x. |8 W - #If VBA7 Then
6 x. _9 W' d+ q' h3 Z - hWndOwner As LongPtr
2 B. H; e8 J) C+ O+ _ - pIDLRoot As LongPtr
9 y" E( y, g: `- \ - pszDisplayName As Long% K; j Y2 @% |" h: [
- lpszTitle As String% j; D3 f* F8 G; U' c7 j& j
- ulFlags As Long G" u3 V6 Q5 P1 U
- lpfnCallback As LongPtr
9 s) [4 Z! d: T8 q" z - lParam As Long2 f' N* Y3 c2 r0 ~4 p
- iImage As Long' Q2 W" P7 i% R- M" k5 t R
- #Else0 `7 [: C3 Q o$ s, G
- hWndOwner As Long
% P. E5 X* L% I9 V( c+ M' f - pIDLRoot As Long
% D% x, Q8 e7 C' V1 C* } - pszDisplayName As Long* h: J, `# _0 j# S! U3 T: K: _
- lpszTitle As String7 L& e. b, s5 x, K4 B/ D- {8 F
- ulFlags As Long5 u$ G( n4 e- F8 \$ t' S
- lpfnCallback As Long% K" j& [; {% b
- lParam As Long
: g8 w% P: }5 F, p. K - iImage As Long
. G& @* g! z+ B- l2 L' ?+ ^ - #End If) f! y0 k. G- a) q' G& V
- End Type
& ~( m9 f h: | R+ {% }* I - & c' Y7 |2 c( ?
- Private Const MAX_PATH = 260
) b/ Z2 _5 x$ |; w7 R - 'Directories only
3 Z& h. W' \. P0 _6 k- `0 @4 I7 a/ D - Private Const BIF_RETURNONLYFSDIRS = &H1&
. k6 t9 G. w: L4 ?( b! o p - 'Windows 2000 (Shell32.dll 5.0) extended dialog3 X) F# {6 K- e0 L' h" C
- Private Const BIF_NEWDIALOGSTYLE = &H40
8 c: X7 X0 Q5 @7 K } [. U) U; v+ q3 r - ' show edit box
M; W, A$ o% E7 ~% l9 F* k - Private Const BIF_EDITBOX = &H10&
+ i5 x' _ y- T$ @6 B# y! Q! I2 O# F
8 w+ D1 @# o: X0 _) v' d- Private Const WM_USER = &H400" ^. a) z9 K) i4 N: y7 K4 f+ s
- Private Const BFFM_INITIALIZED = 1
7 d' a3 M8 `% y* Z; @/ S4 c' } - Private Const BFFM_SELCHANGED = 2
" |2 H" e% R. z - Private Const BFFM_SETSTATUSTEXTA = (WM_USER + 100)
' Y* U6 a5 M/ V, V - . t/ U( W/ B% v% ~% }- Z* e
- Private Const BFFM_SETSELECTIONA = (WM_USER + 102)
0 L$ g+ N" }) Q - Private Const BFFM_SETEXPANDED = (WM_USER + 16)
2 c) R+ a1 p% M2 b4 P0 K( N* s - 4 y8 g7 |% O( |4 T3 c, H
- Private m_sDefaultFolder As String$ j% C4 Z: ^$ m* h% R& K) F! c
- . k q# v" l$ \+ k/ P( T' D w
- Public Const SWP_NOMOVE = 2+ K+ i+ z7 K1 O9 ^
- Public Const SWP_NOSIZE = 19 |1 R0 S, R) @7 A
- Private Const SWP_NOZORDER = 4
* H# X4 N; }8 x) g; T$ D( t
' W6 [' `+ Q, N9 A/ m n$ l- Private Type RECT2 E+ P4 R9 z$ L7 s7 f. K5 U; }, Q
- Left As Long0 a1 P* r9 I8 e+ X- |0 H4 h( g
- Top As Long3 G9 a" T$ u, ~$ }2 O4 e0 v" u
- Right As Long
; ^4 \. {5 I. m7 o/ ?. u! x7 H2 F - Bottom As Long
% ~' q4 y1 v# A Y% v) w- ~6 n - End Type& i) d3 h: a$ A8 l* o) I
2 w6 O/ W& n$ Q, ^- ' Win32 API declarations. Different signatures for different versions of VBA.
/ O- Z% g, M8 }" I - ' Note the mandatory use of PtrSafe keyword in VBA7.
9 ~# q9 U9 k/ u2 {" Q2 P - #If VBA7 Then' k7 | \1 G- B* G1 a+ u
- 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
4 V0 T0 b' l. S- c* g' m; S - Private Declare PtrSafe Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long
; Q e* i, q" N - Private Declare PtrSafe Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As LongPtr, ByVal lpBuffer As String) As Long- y% Z c& @) P6 B* E
- Private Declare PtrSafe Sub CoTaskMemFree Lib "ole32" (ByVal hMem As LongPtr)' T8 L( g: e. K. E
- Private Declare PtrSafe Function SetWindowPos Lib "USER32" (ByVal hWnd As LongPtr, _
' n( @- U0 A8 L2 t1 I - ByVal hWndInsertAfter As LongPtr, _1 {% c8 u. Q* W7 X& O
- ByVal x As Long, _; O8 I% l8 M% m4 }' k
- ByVal y As Long, _8 p _3 H9 s1 h( R/ l K
- ByVal cx As Long, _/ G1 Q' G7 |! h. Y3 u% E6 Y
- ByVal cy As Long, _( x+ ?4 [ H c$ D; Y! @5 o
- ByVal wFlags As Long) As Long4 {- F, }/ F# O
- Private Declare PtrSafe Function GetWindowRect Lib "user32.dll" (ByVal hWnd As LongPtr, lpRect As RECT) As Long# x) t7 w" }8 u* s2 \% M
- 6 s$ L7 _+ u) c+ o0 Z
- #Else
8 K+ z, y5 _ L/ N - 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) n1 U$ H5 ], }( z+ h
- Private Declare Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long8 D$ D. y( A4 c3 h1 T& P
- Private Declare Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long/ k; D( X0 [1 P3 [$ |5 s
- Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal hMem As Long)
% p% L1 o$ e# X) W" `- r - Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _9 i# O4 o: t3 D, ?: {. _4 x6 E
- ByVal hWndInsertAfter As Long, _
* u0 S _1 ^5 \3 u3 d$ t4 l - ByVal x As Long, _! f4 N' ^1 K1 g
- ByVal y As Long, _
b! z$ {/ g L) t- b7 z' K - ByVal cx As Long, _+ L5 Z3 s, E1 w5 P; ~# E* w. \2 d
- ByVal cy As Long, _
\& b& T& q$ @( \ - ByVal wFlags As Long) As Long& S2 `- D4 T) V& E: ^. I9 y
- Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, lpRect As RECT) As Long4 m' U) c" O% ^# y* j* ]9 Y: Z3 `
( q6 a& R, {" a: i9 T/ s( A3 U% e- #End If
+ @. q& V8 M. Y+ t
# ~3 A6 a5 b( N- Private lastKnownPosition As RECT
* J2 c R) l; L8 I - Private lockLastKnownPosition As Boolean
复制代码
% b4 ]; ]" o1 X0 a2 J; r梁大,将这一段修改一下 |
|