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

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

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

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

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

رویداد چرخش غلطک ماوس در یک کنترل مثل TextBox




Public Const WM_VSCROLL = &H115 Public Const WM_HSCROLL = &H114 Public Const SB_LINEUP = 0
Public Const SB_LINEDOWN = 1
Public Declare Function SendMessageA Lib "User32" (ByVal hwnd As Long, ByVal wMsg As Long,ByVal wParam As Long, lParam As Any) As Long
Public Declare Function GetFocus Lib "User32" () As Long


Public Function Wnd(Ctl As Control) As Long
On Error Resume Next
Ctl.SetFocus
If Err Then
Wnd=0
Else
Wnd=GetFocus
End If
On Error Goto 0
End Function

OnMouseWheel : 

HandleWindow=Wnd(Screen.ActiveControl)

Count<0
iCount From1 To -1 * Count
hWnd,WM_VSCROLL,SB_LINEUP,0
Count Not Zero
iCount From 1 To Count
hWnd,WM_VSCROLL,SB_LINEDOWN,0






به گزارش سایت خبری تحلیلی ساعدنیوز به نقل از روزیاتو، آنی شارلوت ۲۳ ساله، اهل شهرستان ساری انگلیس، وقتی در ۱۶ سالگی برای معاینه پیش پزشک زنان رفته بود معلوم شد به دو رحمی (Uterus Didelphys) دچار است.

زنانی که به این پدیده پزشکی دچارند در صورت داشتن شرکای جنسی متعدد ممکن است همزمان از ۲ مرد مختلف باردار شوند.


۱۸ دیماه ۱۴۰۱ :

روزنامه آرمان امروز از رونق بازار اجاره کارت ملی برای معامله خودرو در بورس کالا گزارش دارد. به نوشته این روزنامه کارت های ملی تا ۱۰۰ میلیون تومان اجاره داده می‌شوند! .... دلالان همه جا هستند ، سکه دلار بورس کالا 






















نوشتن کلاس ماژول و استاندارد ماژول در اکسس


Class Module Name : clsmMouseWheel


Private frm As Object

Private intCancel As Integer


Public Event MouseWheel(Cancel As Integer)

' Because Form is object use set

Public Property Set Form(frmm As Object)

Set frm=frmm

End Property


Public Property Get MouseWheelCancel() As Integer

MouseWheelCancel=intCancel

End Property


Public Sub RaiseMouseWheel()

RaiseEvent MouseWheel(intCancel)

End Sub


در استاندارد ماژول ، متغیری به صورت Public تعریف می شود که در تمام رویه ها بتوان استفاده کرد حتی در سایر استاندارد ماژول ها ( یعنی در تمام رویدادهای فرم و گزارش می توان از این متغیر استفاده کرد حتی  در کنترل تکست باکس یا قسمت تکست باکس کنترل کمبو باکس مثل ایجاد TempVars .... و این متغیر به کلاس ماژول ساخته شده متصل می شود.نام استاندارد ماژول را MouseWheel می نامیم



Public cMouse As clsmMouseWheel



در قسمت ویژوال فرم مورد نظر عبارت زیر نوشته می شود.بالاتر از هر تعداد Event که در رویه وجود دارد.


Private WithEvents clsMouseWheel As MouseWheel.clsmMouseWheel


باید متغیر های WithEvents را بعنوان متغیرهای آبجکت اعلام کنید تا بتوانند نمونه های کلاس را پذیرش کنند . با این حال نمی توان آنها را بعنوان Object اعلام کرد . باید آنها را به عنوان کلاس خاصی که می تواند رویدادها را مطرح کند ، اظهار نمائید.


شئ هایی که از روی کلاس ساخته می‌شوند را یک نمونه (Instance) از آن کلاس می‌نامند.


WithEvents مشخص میکند که یک یا چند متغیر عضو اعلام شده به نمونه ای از یک کلاس اشاره می کند که می تواند رویدادها را افزایش دهد.


فرضا می خواهید رویدادهایی ( رویدادها را می دانید ) که برای کنترل webbrowser وجود دارد را اجرا کنید با WithEvents  متغیری را تعریف می کنید که به آن کلاس ماژول متصل شود و بعد یک رویه می نویسید.


در رویداد لود فرم باید متغیر تعریف شده بالا را به کلاس ماژول نوشته شده تنظیم کرد 

Set clsMouseWheel=New MouseWheel.clsmMouseWheel

Set clsMouseWheel.Form=Me

در اینجا می توان تابعی که در استاندارد ماژول تعریف کردید را اجرا کنید مثل 

clsMouseWheel.SubMsgForm

در رویداد کلوز فرم : 

فرضا اجرای تابعی از استاندارد ماژول مثلا برای قطع زنجیره ارتباطی

Set clsMouseWheel.Form=nothing

Set clsMouseWheel=Nothing


Private Sub clsMouseWheel_MouseWheel(Cancel As Integer)

Msgbox " Hello"

Cancel=True

End Sub










hook کردن یا به زنجیر کشیدن پنجره برای ارسال پیام های ویندوزی 



برای hook کردن پنجره از تابع SetWindowLongPtrA استفاده کنید


HookForm :

SetWindowLongPtrA

oldWndProc

frm.hwnd  GWL_WNDPROC AddressOf WndProc

Set Mouse=Me


برای قطع اتصال به پنجره باید Unhook کرد با استفاده از همان تابع  ( البته از توابع SetWindowsHookA برای تنظیم این زنجیره و قطع آن با UnHookWindowsHookEx استفاده می کنند.) که در پارامتر lparam تابع oldWndProc جایگزین می شود.


تابعی هم برای پارامتر دوم تابع SetWindowLongPtrA  می نویسید که اینجا wndProc نامیده شده یا می توانید نام آنرا WindowsHook بگذارید . که شامل چهار آرگومان hwnd Msg wParam lParam است.اولی هندل پنجره را مشخص میکند که دیتاتایپ آن در ویندوز 64 بیت LongPtr است 


Public Function WndHookProc(ByVal hWnd As LongPtr,ByVal wParam As LongPtr,ByVal lParam As LongPtr) As Long

Select Case Msg

           Case WM_MOUSEWHEEL

WndHookProc=CallWindowProc(oldWndProc,hWnd,Msg,wParam,lParam)

         Case Else

WndHookProc=CallWindowProc(oldWndProc,hWnd,Msg,wParam,lParam)

End Select

End Function





MouseWheel ( Page , Count )        در اکسس

 





Form.MouseWheel Event




آرگومان  Count در رویداد MouseWheel اگر غلطک ماوس به سمت جلو بچرخد یا Roll شود مثبت است و اگر به عقب رول شود عدد Count منفی است 


کد زیر تابعی نوشته شده با نام DoMouseWheel که دو آرگومان تعریف کرده یکی گرفتن Form و دیگری lngCount که بین رکوردها جابجا میشود اگر lngCount منفی باشد به رکورد قبلی و اگر مثبت شد به رکورد بعدی میرود با اکشن کامندها.



RunCommand acCmdSaveRecord
'Move back a record if Count is negative, otherwise forward.
RunCommand IIf(lngCount < 0&, acCmdRecordsGoToPrevious, acCmdRecordsGoToNext)
DoMouseWheel = Sgn(lngCount)



  [COLOR="Red"][B] End If[/B][/COLOR] 


رویداد KeyPress ، تبدیل کاراکتر به Upper Case یا حروف بزرگ : 


Private Sub ShipRegion_KeyPress(KeyAscii As Integer) 

 Dim strCharacter As String 

 ' Convert ANSI value to character string. 

 strCharacter = Chr(KeyAscii) 

 ' Convert character to upper case, then to ANSI value. 

 KeyAscii = Asc(UCase(strCharacter)) 

End Sub


KeyAscii For ArrowKeys : 

Left: 20

Down: 18

Right: 19

Up: 17


 : TabControl.KeyDown


در رویداد KeyDown تب کنترل میخواهید جابجاشدن در تب ها را با کد انجام دهید هرچند کلید میانبر Ctrl+Tab یا PageDown و  PageUp هم این کار را انجام میدهد و احتیاجی به نوشتن کدهای زیر نیست 


فرضا با استفاده از کلید ترکیبی Ctrl و Arrow Right یا  Arrow Lefr 


If (Shift And acCtrlMask) > 0 Then
Select Case KeyCode

    Case vbKeyRight

    KeyCode =0


اگر تب کنترل با نام TabCtl0 ساخته باشید ( می توانید از پراپرتی شیت کنترل در نمای دیزاین Name را تغییر دهید). 


اول گرفتن تعداد کل تب پیج های تب کنترل مشخص شده.

TabMax=Tabctl0.Pages.Count

دوم متغیری تعریف می کنید که Value تب کنترل که فوکس گرفته را باضافه یک کند یعنی فرضا اگر روی تب 3 باشید به تب 4 سلکت شود ( Value کار انتخاب تب را انجام میدهد ) .

TabConut=TabCtl0+1

برای سلکت یا انتخاب تب پیج می نویسید

TabCtl0=TabCount

عدد صحیح فقط !!! پیج ایندکس تب اول را ملاحظه کنید از صفر شروع شده  ( برای لوپ زدن در تب پیج های باید بگوئید از صفر تا Pages.Count منهای یک ) 


حال تصور کنید فوکس روی تب اول با ایندکس صفر است شما کلید ترکیبی Ctrl و فلش سمت راست را می فشرید شروع به پیمایش میکند رو به جلو ( چون Value +1 میشود ) و به متغیر TabCount نیز اضافه میشود فرض کنید آخرین عدد پیج ایندکس یا Value برای این کنترل 6 باشد ، وقتی Value را برابر 7 قرار میدهد  ( TabConut=TabCtl0+1 ) اروری به شما داده میشود چرا چون ماکزیمم Value در تب 6 است پس برای فرار از این خطا می بایست بگوئید تا زمانی پیش برود که TabCount بزرگتر از TabMax باشد.


در کد زیر اگر TabCount بزرگتر از آخرین Value تب شد Reset یا صفر میشود و به اولین تب پرش میکند و از صفر شروع میکند و هر زمان به آخرین تب رسید و دوباره فلش راست را فشردید به تب اول میرود و ......


If  TabCount > TabMax Then
TabCount = 0
End If
TabCtl0 =TabCount


در Case VbKeyLeft باید بدین شکل تصور کنید که اگر Value کوچکتر از صفر شدمقدار TabCount  به TabMax تغییر کند و در نتیجه بعد از انتخاب تب صفر زمان فشردن دوباره فلش چپ تب آخر را انتخاب میکند 

در VbKeyRight شما Value را باضافه یک میکردید که انتخاب رو به جلو باشد در VbKeyLeft شما منهای یک میکنید تا رو به عقب تب انتخاب شود.

TabConut=TabCtl0-1


اگر بخواهید زمان رسیدن به انتخاب تب آخر همچنان با فشردن کنترل و فلش راست ، تب صفر را انتخاب نکند می توانید بگوئید TabCount=TabMax شود و در VbKeyLeft مقدار متغیر TabCount=0 شود.


ولی همانطور که گفته شد کلیدهای میانبر همین کار را انجام می دهند.


تنها کمی فکر کافیست !!!