|
楼主 |
发表于 2017-7-30 01:11:18
|
显示全部楼层
- Option Explicit& V9 w# M9 Z0 r! p; }. [
4 |; ]1 c/ w" P& U- ' 定义用户类型,以减少#if VBA7语句的数量,但不能消除他们...
% ~/ G# x! a% l - Private Type LongPtr_T
, R1 }6 }& C9 x - #If VBA7 Then# F, s0 y7 ?4 D# Y$ p' h/ l
- Value As LongPtr+ X$ C4 [ ]! g/ ~
- ' Compare automatically resized LongPtr to fixed size Long and LongLong. |% ^" l* f$ _, S: Q2 T- }
- #Else
6 J. ?& ^6 N+ |2 V9 i# _2 H - Value As Long4 Z5 I) P/ r) y) ?7 l
- #End If
, l! D: O" n2 R% i - End Type( y2 u3 \3 }3 Z4 ?$ a3 Y
- & _2 ~) G- T% {, k$ l
- ' Win32 数据类型. Different signatures for different versions of VBA
6 I& p% Y/ l/ N T4 n* z/ y: b - Private Type BROWSEINFO) w y, z9 E3 |5 Q- w% b( Q
- #If VBA7 Then
- ]' g% y6 F: W5 g2 m: T( o+ T* a, \ - hWndOwner As LongPtr7 {! a7 `* s p( r# {! ?
- pIDLRoot As LongPtr
$ R# M% }: ?8 Q9 w - pszDisplayName As Long
# t0 d' K: _7 h; N2 W& Y8 H - lpszTitle As String
/ J4 m+ V: r, @* B" j6 A4 C - ulFlags As Long
3 |9 p, y& C. F/ p8 k) h - lpfnCallback As LongPtr, e' F# K' v, `
- lParam As Long1 g) `& ^9 Y$ @, r! J$ _+ h
- iImage As Long' i) p+ t2 K- G# g1 h
- #Else
6 [! d4 A1 p* @5 z& f+ r - hWndOwner As Long" J- ~) c/ H% K9 H
- pIDLRoot As Long
9 u3 D2 M3 x' w0 s* ] ?+ A - pszDisplayName As Long
8 W6 m( |/ w+ Q/ b8 ` - lpszTitle As String6 h: o/ h" F$ O
- ulFlags As Long
) V2 G) ]5 T) U5 n7 r, U - lpfnCallback As Long
- \2 u& h* h- ?+ }! A% m$ g - lParam As Long
) a4 O2 `5 [1 g - iImage As Long; N8 v0 A5 v4 X7 {5 o1 ~' {
- #End If
3 _; ]0 ~3 A* g8 { - End Type' `- ?0 p* p" X
- ) f6 }" Q4 Y1 ^5 z. e& A
- Private Const MAX_PATH = 260
( M8 r4 m7 P0 @: B - 'Directories only
) O- F; B# z* |" O7 r9 g" e! x1 h - Private Const BIF_RETURNONLYFSDIRS = &H1&/ r( J9 W" b/ N& \% R5 X
- 'Windows 2000 (Shell32.dll 5.0) extended dialog
( U, i: c# ?1 g - Private Const BIF_NEWDIALOGSTYLE = &H40$ ]' Q) Q$ q' }. {! z
- ' show edit box, W7 U, O) R1 B! V9 O+ G
- Private Const BIF_EDITBOX = &H10&
* x, w& S0 O5 y
4 ^6 _! v2 o1 ^/ s- Private Const WM_USER = &H400
8 b, |) e# K9 ?# O - Private Const BFFM_INITIALIZED = 18 k6 g2 l2 r, N# ^3 A+ N
- Private Const BFFM_SELCHANGED = 2' _0 b; W: B- ~$ v
- Private Const BFFM_SETSTATUSTEXTA = (WM_USER + 100)
" ^* i& m: b: `' v$ j \% {
3 z4 R8 v6 I: p0 |1 z5 p1 G- Private Const BFFM_SETSELECTIONA = (WM_USER + 102): K! Y4 n* {: Y2 q y; i4 o+ x
- Private Const BFFM_SETEXPANDED = (WM_USER + 16)
( S7 }" \4 z% j) Y8 ?: m
+ U, e) j: n- n. ] J9 \- Private m_sDefaultFolder As String
: N: d9 z3 F; z( B! \3 Q/ o
: Z6 y6 M/ V! w0 F5 J0 ^- Public Const SWP_NOMOVE = 2' R/ w% m1 } Z3 g5 {
- Public Const SWP_NOSIZE = 1( M3 c8 D9 m2 {; a. }2 D9 C7 V
- Private Const SWP_NOZORDER = 46 A: c+ T/ U* ^% q
- # j7 B0 N6 x& b
- Private Type RECT
! ^% p A' C" J8 J9 u - Left As Long2 k% C6 m9 c# R9 Q5 [
- Top As Long4 h/ c& B+ y; q5 `
- Right As Long
, N9 |! p+ a/ Q/ i6 e0 ` - Bottom As Long6 ?1 G; V% x$ P
- End Type! F2 b, v6 R, g6 X
- 4 q& \" ]. q% ?' c9 v9 G
- ' Win32 API declarations. Different signatures for different versions of VBA.9 d- R$ c/ f1 }( h" Y
- ' Note the mandatory use of PtrSafe keyword in VBA7.
6 u. {1 F: f( R7 H/ M+ E4 ?7 g - #If VBA7 Then
/ t" I$ G" z- P% M6 b% N1 D0 e% q - 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: B4 ?/ i6 C+ \; Z9 }* @8 Y
- Private Declare PtrSafe Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long, E* B7 k: B9 l# t
- Private Declare PtrSafe Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As LongPtr, ByVal lpBuffer As String) As Long
1 p3 M( L. ]% _; e5 n* Z7 _! ] ^" @ - Private Declare PtrSafe Sub CoTaskMemFree Lib "ole32" (ByVal hMem As LongPtr)
; |/ j+ c) i+ N" a+ }0 g! d8 w - Private Declare PtrSafe Function SetWindowPos Lib "USER32" (ByVal hWnd As LongPtr, _
" r! m; q1 H u$ X9 `5 ^ - ByVal hWndInsertAfter As LongPtr, _1 N: V8 ]2 C5 R+ p# u
- ByVal x As Long, _7 [' Z+ m0 C% ^4 i6 b, i
- ByVal y As Long, _
1 p# I% x% d( B - ByVal cx As Long, _$ q; n) A1 |% N% C: b
- ByVal cy As Long, _3 A/ ], q; m& \, I
- ByVal wFlags As Long) As Long) w' G/ r3 N) x; n. l" h. j9 @2 X
- Private Declare PtrSafe Function GetWindowRect Lib "user32.dll" (ByVal hWnd As LongPtr, lpRect As RECT) As Long
4 P& O) } a! V' T" d4 @9 g
' F2 D9 u# o/ I! E/ u- #Else
( t5 u; m6 n8 v - 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
! J) F" ^1 @7 [$ p) F$ `$ C - Private Declare Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long
" [8 M. Y+ U0 P9 P; Y! g4 N - Private Declare Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
7 G0 i1 c$ {. E% i2 l - Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal hMem As Long)* t Q4 n% n. Y2 m' Z N, I. g
- Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _
3 E1 k$ `( f _( E; K - ByVal hWndInsertAfter As Long, _: p7 A; c3 F" [9 e, G3 e
- ByVal x As Long, _* q+ k0 {1 S% a1 R2 N
- ByVal y As Long, _: d: h5 R O2 N
- ByVal cx As Long, _5 _/ a, |5 X+ O! z
- ByVal cy As Long, _
& B+ Q" j" E/ F6 `2 B6 _ - ByVal wFlags As Long) As Long
. u( r& W6 R: x6 e# x - Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, lpRect As RECT) As Long; f5 Q$ m% E6 b+ z9 p* c5 c
* ?% j6 b! u1 |' K ]0 \- #End If
2 r# n: N8 G! E) j# L) ` - 8 z/ W) Z% g2 \0 g% i
- Private lastKnownPosition As RECT
+ f( u+ F$ \( ~ - Private lockLastKnownPosition As Boolean
复制代码 + V/ h* g6 q* v x& x
梁大,将这一段修改一下 |
|