کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی
کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی

SubClass A Window



برای  ساب کلاس کردن پنجره در 32 بیت : 


Constants used with Windows APIs
Private Const GWL_WNDPROC = -4

Private mHwnd As LongPtr
Public mOldWndProc As LongPtr

Private Sub Comman4_Click()
mHwnd = FindWindowA(vbNullString, Me.Caption)
SetHook
End Sub

Private Sub Form1_Close()
RemoveHook
End Sub

Private Sub SetHook()
mOldWndProc = SetWindowLongPtrA(mHwnd, GWL_WNDPROC, VBA.CLngPtr(AddressOf NewWndProc))
End Sub

Private Sub RemoveHook()
SetWindowLongPtrA mHwnd, GWL_WNDPROC, mOldWndProc
End Sub

Public Function NewWndProc(ByVal hwnd As LongPtr, _
ByVal uMsg As Long, _
ByVal wParam As LongPtr, _
ByVal lParam As LongPtr) As LongPtr

'On Error Resume Next

NewWndProc = CallWindowProcA(mOldWndProc, hwnd, uMsg, wParam, lParam)
End Function

Unfortunately, you cannot rotate text in a WinForms label. If you really want to do it, you have to handle the Paint event and write code to rotate the text.




برای چرخش متن در گزارش از اکتیوایکس ها استفاده می شود ( و دارای Property ها یا Event هااست البته اگر سازنده تعبیه کرده باشد ) که بصورت کنترل acCustomControl است بنابراین بدون کمک از آنها نمی توان تکست را به درجه ای که می خواهید بچرخانید اکسس فقط چرخش در حالت ۹۰ درجه  Vertical دارد..... پس کنترل اکتیو ایکس رو در گزارشات می بایست اضافه کنید بجای لیبل و از پراپرتی های آن استفاده نمائید 

WM_PAINT : 

Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type


Public Type PAINTSTRUCT
hDc As Long
fErase As Boolean
rcPaint As RECT
End Type

WindowProc(hwnd,uMsg,wParam,lParam) 

Dim ps As PAINTSTRUCT
Dim hDC,hBrushAs LongPtr

Select Case uMsg
   case WM_DESTROY
          PostQuitMessage(0)
         SelectObject hDC,hOldBrush
         DeleteObject hBrush
         WindowProc=0 ' False
   case WM_PAINT
hdc = BeginPaint(hwnd, &ps)
hBrush=CreateSolidBrush(Rgb)
hOldBrush=SelectObject(hDC,hBrush)
FillRect(hdc, &ps.rcPaint, hBrush)
EndPaint hwnd, &ps
WindowProc=0
End Select
WindowProc=DefWindowProc(hwnd, uMsg, wParam, lParam)






توابع API به حروف بزرگ و کوچک حساسند پس اگر فرضا تابع CreateCompatibleDc ارور Not Find در DLL مربوطه دریافت خواهید کرد چرا ؟ چون DC است نه Dc


















نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد