|
|

楼主 |
发表于 2017-7-30 01:11:18
|
显示全部楼层
来自: 中国陕西西安
- Option Explicit" M& W4 i' Y; g/ _7 ?, }
- % W* C' Q( }" c, o6 j$ r
- ' 定义用户类型,以减少#if VBA7语句的数量,但不能消除他们...* K$ \6 G( |4 K, o; V c( K
- Private Type LongPtr_T
4 X: T0 a3 g' C) F - #If VBA7 Then
% L" R3 x! E! `0 W6 t+ \ - Value As LongPtr; u0 L1 a& R4 p. Z
- ' Compare automatically resized LongPtr to fixed size Long and LongLong
9 |# N2 I# G. t1 o! O. ~ - #Else
9 E1 z) P$ W ] - Value As Long' [+ D- o: V* e" D# t. M- C* o# I
- #End If
: j" ]8 { ^8 @: h - End Type4 d. z* c C+ h9 R. s
- 9 N; q+ [5 n* J5 R& w- v! V
- ' Win32 数据类型. Different signatures for different versions of VBA
; a* ?0 r' U* j* q7 r0 g - Private Type BROWSEINFO& W/ [( h/ s4 X2 z
- #If VBA7 Then& ^/ g7 }# [1 Z3 M9 l+ Z
- hWndOwner As LongPtr
+ D) i7 |, r/ ] - pIDLRoot As LongPtr
! o3 d! ]/ W' R - pszDisplayName As Long X' I' F8 U! M, V( t( ^) j
- lpszTitle As String3 `2 w, v2 m8 A) d' f0 r
- ulFlags As Long# A* M1 H5 r1 x$ q& Y/ U
- lpfnCallback As LongPtr
; Y+ W8 @3 s5 c+ L" M8 X# x* m, D - lParam As Long
8 j7 m' _+ N. J; p3 E7 c1 ? - iImage As Long, \$ p4 L( G5 Y# s* \
- #Else3 O. o- Y9 K# O2 \2 N5 I% N
- hWndOwner As Long
7 I8 Z! r8 y5 i - pIDLRoot As Long
! e( K1 y. o: z9 C" E ?8 l* | - pszDisplayName As Long
/ ?0 ^4 [4 H* U* n! }- a% k - lpszTitle As String
0 z2 |$ S) i) {) _4 H0 H8 } - ulFlags As Long( {0 b Z# _& p* S( `. o: H( J
- lpfnCallback As Long) o: G; I6 O3 d- F2 r
- lParam As Long
+ I& ~6 Z& r. a) [ - iImage As Long
3 j2 {* `: Y% r+ V4 o3 J. B$ I - #End If9 p% L0 ]# j" j3 \
- End Type
; Z- \3 [: u' d; W3 K G! ` - , N/ e$ _3 h, n
- Private Const MAX_PATH = 260/ X& V) a) {; a! R" ~7 z W
- 'Directories only
! ]5 H7 F8 j. `- Y& u. a - Private Const BIF_RETURNONLYFSDIRS = &H1&
6 E: u9 ~8 G& R+ Q( q3 Z. Y - 'Windows 2000 (Shell32.dll 5.0) extended dialog" A. i( V K: V. e* F3 Q+ n/ ? b
- Private Const BIF_NEWDIALOGSTYLE = &H40 h4 u: ]. I W" {. _ ^. l0 {2 n
- ' show edit box( e5 l$ k& Q. v( n
- Private Const BIF_EDITBOX = &H10&
, r9 `) o' @: C
+ T: |# \: C. ^% u! m- Private Const WM_USER = &H400
6 y5 z& @: C" ^: U( ^ - Private Const BFFM_INITIALIZED = 1
, q5 t/ {/ |. } - Private Const BFFM_SELCHANGED = 2
8 x3 {& V# G$ i! R5 e - Private Const BFFM_SETSTATUSTEXTA = (WM_USER + 100)9 ^7 p% ^7 y4 u# z. @9 ?$ P
1 \; G# ^, [/ w6 Q( B- Private Const BFFM_SETSELECTIONA = (WM_USER + 102)
6 n' H( t' g) U, @; z/ n - Private Const BFFM_SETEXPANDED = (WM_USER + 16)
! U# ]7 k8 Q/ W1 P. ^ - : ]% |& ~2 D# m6 e
- Private m_sDefaultFolder As String
; c! C6 E% E* p2 n) W: Y6 n - . x y# U- ?4 U8 i7 q6 c
- Public Const SWP_NOMOVE = 2
# U+ Y. t+ ^8 T! y - Public Const SWP_NOSIZE = 1
0 y) k) {4 G3 q2 @ - Private Const SWP_NOZORDER = 4
9 W7 {, d7 G% `. _/ H
, Z$ j* V8 R7 y7 Y. r3 ~; f- Private Type RECT
7 S( y2 a+ n( V8 G9 r - Left As Long
8 Z8 `/ U* J+ J8 G5 y! i - Top As Long( d) x3 H1 B" q- E4 P6 Y* r5 [; V
- Right As Long
) |- O2 i8 j1 x - Bottom As Long
2 l9 x5 [' g7 w6 M - End Type
# O' a; ~/ }; W - # F T; Z; o6 u& `: x& \1 b
- ' Win32 API declarations. Different signatures for different versions of VBA.8 f9 q8 C: h* O$ ]$ V* U
- ' Note the mandatory use of PtrSafe keyword in VBA7.# q! e7 E9 A" O
- #If VBA7 Then
, g8 k0 j* m9 {0 @ - 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
. x+ p" o4 A0 j5 e5 \+ b - Private Declare PtrSafe Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long( C6 ?) J& {% w6 a( K
- Private Declare PtrSafe Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As LongPtr, ByVal lpBuffer As String) As Long
9 R$ k! Q0 o. L# Q - Private Declare PtrSafe Sub CoTaskMemFree Lib "ole32" (ByVal hMem As LongPtr)
! t; r: C2 t( o8 P0 v+ p1 @% ? - Private Declare PtrSafe Function SetWindowPos Lib "USER32" (ByVal hWnd As LongPtr, _) q- }) b m5 q* H6 `2 ]* I) W
- ByVal hWndInsertAfter As LongPtr, _: G: W, v' E( Y. |
- ByVal x As Long, _& I9 D$ Y. p$ ^- ~
- ByVal y As Long, _" g5 E0 k2 T; M c: Y- q7 A
- ByVal cx As Long, _
9 ]1 v5 i$ W6 k) ?! q& o+ ^ - ByVal cy As Long, _5 |$ l1 h1 k/ l9 D( L+ W C( e1 A' n
- ByVal wFlags As Long) As Long
" W/ U9 a1 H: B( O* U& b - Private Declare PtrSafe Function GetWindowRect Lib "user32.dll" (ByVal hWnd As LongPtr, lpRect As RECT) As Long% O! f1 l; u9 K: R2 Y
- * W7 N7 P: }) Y: M; g% L5 c4 t9 y
- #Else
5 f K! {- a9 s2 k - 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
* S$ g3 c% T! l& ~ - Private Declare Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long0 b' O" P+ |% y& a
- Private Declare Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
* b5 q7 U. |! C; l: L# B. n! c - Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal hMem As Long)
# V3 h; \5 V0 {( q, [0 A# s - Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _
: B" |% w& r: P) M9 |) J& z, T! Q - ByVal hWndInsertAfter As Long, _4 v: T: J9 r7 h+ e6 D5 J- M2 Z6 p
- ByVal x As Long, _
# a& @2 K4 N3 v. ^3 W$ Q9 g8 ]/ f - ByVal y As Long, _
; ~6 n- c! g% O5 V/ Y/ r - ByVal cx As Long, _% ~" A3 ]1 A5 u# n2 X
- ByVal cy As Long, _7 |( Z* P8 |: L" Q5 P, {8 L( w
- ByVal wFlags As Long) As Long) D. ~1 d/ G8 q' C: O" l$ e; S
- Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, lpRect As RECT) As Long& ^8 u% E$ N) k8 c) Q7 p
/ E: x1 Z" l7 N- #End If0 v) O0 X) J/ G' H5 s, e- n
- ) ]6 E. R4 O/ P* q7 U; A' H7 Q
- Private lastKnownPosition As RECT8 t# V# z+ ^3 r) G1 w; B6 K: h6 i
- Private lockLastKnownPosition As Boolean
复制代码
$ L9 @- x( p; H梁大,将这一段修改一下 |
|