PDA

View Full Version : آموزش: ایجاد راست کلیک در Access



AbbasSediqi
جمعه 15 مرداد 1395, 14:05 عصر
برای این کار باید اول Microsoft Office xx Object Library رو اضافه کنید ( البته xx ورژن آفیسه مثال 15.0 )

یک Model در برنامه ایجاد و این کد ها را درون آن قرار دهید البته برای شخصی سازی هم یکم وقت بزارید



Option Explicit

Public Const Mname As String = "MyPopUpMenu"


Sub DeletePopUpMenu()
' Delete the popup menu if it already exists.
On Error Resume Next
Application.CommandBars(Mname).Delete
On Error GoTo 0
End Sub


Sub CreateDisplayPopUpMenu()
' Delete any existing popup menu.
Call DeletePopUpMenu


' Create the popup menu.
Call ADD_PopUpMenu


' Display the popup menu.
On Error Resume Next
Application.CommandBars(Mname).ShowPopup
On Error GoTo 0
End Sub






Sub ADD_PopUpMenu()
Dim MenuItem
' Add the popup menu.
With Application.CommandBars.Add(Name:=Mname, Position:=msoBarPopup, _
MenuBar:=False, Temporary:=True)


' First, add two buttons to the menu.
With .Controls.Add(Type:=msoControlButton)
.Caption = "Button 1"
.FaceID = 59
.OnAction = "TestMacro"
End With


With .Controls.Add(Type:=msoControlButton)
.Caption = "Button 2"
.FaceID = 72
.OnAction = "TestMacro"
End With


' Next, add a menu that contains two buttons.
Set MenuItem = .Controls.Add(Type:=msoControlPopup)
With MenuItem
.Caption = "My Special Menu"


With .Controls.Add(Type:=msoControlButton)
.Caption = "Button 1 in menu"
.FaceID = 71
.OnAction = "TestMacro"
End With


With .Controls.Add(Type:=msoControlButton)
.Caption = "Button 2 in menu"
.FaceID = 72
.OnAction = "TestMacro"
End With
End With


' Finally, add a single button.
With .Controls.Add(Type:=msoControlButton)
.Caption = "Button 3"
.FaceID = 73
.OnAction = "TestMacro"
End With


End With
End Sub


Sub TestMacro()
MsgBox "AbbasSediqi Say Hello"
End Sub




مثال برای فراخوانی

Private Sub Text2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
CreateDisplayPopUpMenu
End If
End Sub




نمونه فایل هم قرار دادم

یا حق

AbbasSediqi
جمعه 15 مرداد 1395, 14:12 عصر
البته فراموش نکنید که در تنظیمات database تیک Alow Default Shortcut Menus رو بردارید

141871

141872

141873

AbbasSediqi
جمعه 15 مرداد 1395, 14:14 عصر
این هم حالت داینامیک برای اشخاص خاص که در منو های مختلف popup های مختلفی لازمشون میشه

از این Model استفاده کنن


Option Explicit


Public Const Mname As String = "MyPopUpMenu"


Sub DeletePopUpMenu()
' Delete the popup menu if it already exists.
On Error Resume Next
Application.CommandBars(Mname).Delete
Application.CommandBars.Add Name:=Mname, Position:=msoBarPopup, _
MenuBar:=False, Temporary:=True
On Error GoTo 0
End Sub


Sub CreateDisplayPopUpMenu()
' Delete any existing popup menu.



' Create the popup menu.
'Call ADD_PopUpMenu


' Display the popup menu.
On Error Resume Next
Application.CommandBars(Mname).ShowPopup
On Error GoTo 0
End Sub


Sub ADD_PopUpMenu(iCaption As String, iFaceID As Integer, OnActionMacroName As String)


' Add the popup menu.
With Application.CommandBars(Mname)


' First, add two buttons to the menu.
With .Controls.Add(Type:=msoControlButton)
.Caption = iCaption
.FaceID = iFaceID
.OnAction = OnActionMacroName
End With
End With
End Sub


Sub TestMacro()
MsgBox "AbbasSediqi Say Hello"
End Sub






مثال برای فراخوانی


Private Sub Text2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
Call DeletePopUpMenu
ADD_PopUpMenu "AbbasSediqi Say", 59, "TestMacro"
ADD_PopUpMenu "Say Wath ?", 59, "TestMacro"
CreateDisplayPopUpMenu
End If
End Sub




نمونه فایل هم قرار دادم

انتقاد پیشنهاد فراموش نشه

یا حق

AbbasSediqi
جمعه 15 مرداد 1395, 15:26 عصر
برای افزون از رفرنس Microsoft Office xx Object Library


141874

141875

141876



در صورت پیدا نکردن رفرنس مسیر
Microsoft Office xx Object Library


برای آفیس های 32 بیتی در ویندوز های 32 بیتی ( البته اگر آفیس در Programs File نصب شده باشه ) ( مثال آفیس 2013)


C:\Program Files\Common Files\Microsoft Shared\OFFICE15\MSO.DLL


برای آفیس های 32 بیتی در ویندوز های 64 بیتی


C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE15\MSO.DLL


برای آفیس های 64 بیتی در ویندوز های 64 بیتی


C:\Program Files\Common Files\Microsoft Shared\OFFICE15\MSO.DLL

AbbasSediqi
جمعه 15 مرداد 1395, 15:40 عصر
این هم لیست آیکون ها در آفیس البته برای 2007

یا به اصلاح faceID

http://www.microsoft.com/en-us/download/details.aspx?id=3582

AbbasSediqi
جمعه 15 مرداد 1395, 16:12 عصر
این هم پلاگین اکس که همه FaceId رو نشونتون میده


بعد از دوبار کلیک کردن روی این Addins در تب Addins برنامه FaceIdViewer رو میبینید

n_ali27
چهارشنبه 15 دی 1395, 12:15 عصر
سلام
برنامه خوبی دست شما درد نکنه
فقط یه سئوال؟
این کد تو فرم به خوبی جواب میده اما برای استفاده در گزارش نمیشه به خوبی ازش استفاده کرد دوتا منوی راست کلیک تعریف کردم یکی برای فراخوانی در فرم و یکی برای فراخوانی در گزارش اما منوی ایجاد شده برای گزارش خوب عمل نمیکنه از دوستان اگه كسي ميتونه
لطفا راهنمایی کنه

با تشكر فراوان

n_ali27
دوشنبه 20 دی 1395, 21:20 عصر
دوستان لطفا راهنمايي كنند

AbbasSediqi
سه شنبه 21 دی 1395, 20:59 عصر
سلام
برنامه خوبی دست شما درد نکنه
فقط یه سئوال؟
این کد تو فرم به خوبی جواب میده اما برای استفاده در گزارش نمیشه به خوبی ازش استفاده کرد دوتا منوی راست کلیک تعریف کردم یکی برای فراخوانی در فرم و یکی برای فراخوانی در گزارش اما منوی ایجاد شده برای گزارش خوب عمل نمیکنه از دوستان اگه كسي ميتونه
لطفا راهنمایی کنه

با تشكر فراوان



دوست گرامی فایل ارسالی شما دارای مشکل نیست
فقط در هنگام اجرای دستور راست کلیک بدلیل نبود فرم print خطا نشان میدهد

لطف کنید و دقیق تر بفرمائید

در پناه حق

n_ali27
چهارشنبه 22 دی 1395, 13:08 عصر
مشکل مربوط به فرم print نیست
مشکل اینه که اگر از ابتدا در قسمتهای غیر خالی گزارش کلیک شود منوی مربوط به گزارش باز نمی شود اما اگر در قسمت های خالی گزارش کلیک شود منوی مربوط به گزارش باز می شود و بعدش اگر در هر قسمت گزارش کلیک راست شود منوی گزارش باز میشود
مشکل مربوط به اولین راست کلیک در گزارشه که حتما باید در قسمت های خالی گزارش باشه

AbbasSediqi
شنبه 25 دی 1395, 00:00 صبح
مشکل مربوط به فرم print نیست
مشکل اینه که اگر از ابتدا در قسمتهای غیر خالی گزارش کلیک شود منوی مربوط به گزارش باز نمی شود اما اگر در قسمت های خالی گزارش کلیک شود منوی مربوط به گزارش باز می شود و بعدش اگر در هر قسمت گزارش کلیک راست شود منوی گزارش باز میشود
مشکل مربوط به اولین راست کلیک در گزارشه که حتما باید در قسمت های خالی گزارش باشه


دوست گرامی با سلام مجدد


راست کلیک رو برای این به روش معرفی کردم که به صورت خاص و برای یک فیلد ، یک آبجکت و یا یک کنترل هم قابلیت استفاده مجزا داشته باشه همون طور که در برنامه نویسی با زبان های مختلف استفاده میکنیم

ایراد شما در ریپورت هم همین موضوعه
شما فقط در onmouseup ریپورت قرار دادید برای همین هم هست که همچین مشکلی دارید

نمونه اصلاح شده رو قرار دادم

n_ali27
یک شنبه 26 دی 1395, 07:49 صبح
سلام
این مشکل با این روش حل میشه ولی یه مشکل دیگه ایجاد مشه و اون افزایش حجم برنامه است زیرا باید در تمام گزارشات این کار انجام بشه. در یک برنامه ساده و مختصر که تعداد گزارشات کمه میشه این کار را انجام داد ولی در یک برنامه گسترده این روش منجر به افزایش حجم برنامه میشه. آیا روش دیگه ای هست که بشه با کد نویسی یه دستور صادر کرد که فقط مربوط به کل گزارش باشه تا از حجم برنامه کاسته بشه؟

AbbasSediqi
دوشنبه 27 دی 1395, 01:29 صبح
سلام
این مشکل با این روش حل میشه ولی یه مشکل دیگه ایجاد مشه و اون افزایش حجم برنامه است زیرا باید در تمام گزارشات این کار انجام بشه. در یک برنامه ساده و مختصر که تعداد گزارشات کمه میشه این کار را انجام داد ولی در یک برنامه گسترده این روش منجر به افزایش حجم برنامه میشه. آیا روش دیگه ای هست که بشه با کد نویسی یه دستور صادر کرد که فقط مربوط به کل گزارش باشه تا از حجم برنامه کاسته بشه؟


نمونه ارسال شد

n_ali27
دوشنبه 27 دی 1395, 09:31 صبح
سلام دوست عزیز
ممنون از نمونه ارسالی ، برنامه به خوبی جواب داد