View Full Version : شخصی سازی فرم های سیستمی اکسس
Masoud.eh
پنج شنبه 08 آذر 1403, 18:21 عصر
سلام خدمت دوستان
اساتید فرم های سیستمی اکسس رو چجوری میشه شخصی سازی کزد؟ مثلا کپشن رو عوض کرد و ...
156311
eb_1345
پنج شنبه 08 آذر 1403, 22:49 عصر
سلام خدمت دوستان
اساتید فرم های سیستمی اکسس رو چجوری میشه شخصی سازی کزد؟ مثلا کپشن رو عوض کرد و ...
سلام
به احتمال زیاد از طریق توابع (API ) FindWindow و SendMessage بشه تغییر داد
یک نمونه برنامه ساده رو در اینجا قرار بده امتحان کنم ببینم شدنیه یا نه
eb_1345
جمعه 09 آذر 1403, 00:21 صبح
نمونه ضمیمه رو بررسی کن!
eb_1345
جمعه 09 آذر 1403, 01:54 صبح
در نمونه جدیدتر علاوه بر کپشن پنجره کپشن کمند باتن close و عنوان ستون هم به فارسی تغییر پیدا کرد
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Sub Form_Timer()
Dim find As Long
find = FindWindow(vbNullString, "Unhide Columns")
If find Then
Dim C As String
C = "ãÎÝí ˜ÑÏä ÓÊæä åÇ"
SetWindowText find, C
C = "ÓÊæä:"
SetWindowText FindWindowEx(find, 0, vbNullString, "Co&lumn:"), C
C = "ÈÓÊä"
SetWindowText FindWindowEx(find, 0, vbNullString, "&Close"), C
End If
Me.TimerInterval = 0
End Sub
mazoolagh
شنبه 10 آذر 1403, 14:08 عصر
جناب بهرامی عزیز
واقعا دست مریزاد و خسته نباشی دارین!
ساعت پست های شما نشون دهنده پشتکار و همچنین اهمیتی هست که به پرسشها میدین.
=======
فقط یک سئوال:
بدون timer راهی نیست که باز بودن یک پنجره (مثل همین Unhide Columns) رو تشخیص داد؟
ایونتی؟
eb_1345
شنبه 10 آذر 1403, 18:28 عصر
ساعت پست های شما نشون دهنده پشتکار و همچنین اهمیتی هست که به پرسشها میدین.
سلام استاد!
تو این دوران بازنشستگی سیستم خواب و بیداریمون حسابی بهم ریخته:لبخندساده:
فقط یک سئوال:
بدون timer راهی نیست که باز بودن یک پنجره (مثل همین Unhide Columns) رو تشخیص داد؟
ایونتی؟
راه دیگه ای به ذهن نرسید
بجای استفاده از تایمر خواستم از یک حلقه در تابع زیر استفاده کنم ولی جواب نداد:
Public Sub eTimer(InterVal As Integer)
Dim Start
Start = Timer
Do While Timer < Start + InterVal
DoEvents
Loop
End Sub
Private Sub CmdOpenUnhideColumns()
Me.subform.SetFocus
DoCmd.RunCommand acCmdUnhideColumns
eTimer 1
Dim find As Long
find = FindWindow(vbNullString, "Unhide Columns")
If find > 0 Then MsgBox "Unhide Columns is open"
End Sub
mazoolagh
یک شنبه 11 آذر 1403, 14:02 عصر
سلام !
تو این دوران بازنشستگی سیستم خواب و بیداریمون حسابی بهم ریخته:لبخندساده:
راه دیگه ای به ذهن نرسید
بجای استفاده از تایمر خواستم از یک حلقه در تابع زیر استفاده کنم ولی جواب نداد:
سلام دوباره
من با اجازتون برنامه رو یک نگاهی کردم،
چند مورد هست که باید یک نمونه درست کنم و روی اون توضیح بدم.
eb_1345
یک شنبه 11 آذر 1403, 15:52 عصر
سلام دوباره
من با اجازتون برنامه رو یک نگاهی کردم،
چند مورد هست که باید یک نمونه درست کنم و روی اون توضیح بدم.
با عرض سلام متقابل
خواهش میکنم
البته در پست قبل فراموش کردم به یک نکته اشاره کنم و اون اینکه بنده شخصاً اگر در برنامه هام نیاز به فراخوانی و اجرای چنین پنجره ای داشته باشم سعی می کنم اون پنجره با اشیاء مربوطه رو در یک فرم اکسس پیاده سازی و اجرا کنم
mazoolagh
دوشنبه 12 آذر 1403, 14:44 عصر
شخصاً اگر در برنامه هام نیاز به فراخوانی و اجرای چنین پنجره ای داشته باشم سعی می کنم اون پنجره با اشیاء مربوطه رو در یک فرم اکسس پیاده سازی و اجرا کنم
خب روش منطقی و درست همین هست.
پرسش مطرح شده در تاپیک گرچه نشون دهنده رفتن در مسیر نادرست هست،
ولی نتایج خوبی میشه ازش گرفت.
پیش از هر چیز:
- اگر کاربر ما تا این اندازه شوت و پرت هست که حتی از درک معنی کلمه های ساده انگلیسی هم عاجزه،
و لازمه همه چیز فارسی باشه - بهتره office language interface pack روی سیستمش نصب بشه.
البته تجربه نشون داده که مشکل اصلی این تیپ کاربر همیشه جای دیگه ای هست!
- بدون نصب lip ، لازمه همه toolbarها و منوها و context menu ها و ... disable و جایگزین های جدید طراحی بشن
که اینجوری دیگه اصلا اکسس گزینه درستی نیست.
- در این مسئله خاص و با فرض محدود بودن خواسته به فقط همین یک مورد (پنجره unhide columns)،
چون context menu ها event باز و بسته شدن ندارن،
استفاده از تایمر برای چک باز شدن ویندو مورد نظر اجتناب ناپذیره (کدهای پست شماره 4)،
ولی بهتر هست به جای اجرای دائمی تایمر، فقط در صورت باز شدن context menu اون رو راه اندازی کرد:
sub form_mouseup
if button=acrightbutton then
timerinterval=200
endif
end sub
sub form_timer
dim hwnd as longptr
hwnd= findwindow("#32770" , "unhide columns")
if hwnd > 0 then
timerinterval= 0
setwindowtext hwnd , "نمایش/پنهان کردن ستونها"
setwindowtext ...
setwindowtext ...
endif
end sub
- اما اگر چند دیالوگ باید چک بشه (مثلا column width و unhide columns)
دیگه روش رو باید تغییر داد.
باید یک مجموعه (حالا array یا دیکشنری یا ...) از همه ویندو های کلاس 32770# بسازیم
که parent اونها همین نسخه access هست،
و بعد یکی یکی caption اون ها رو بخونیم و بر اساس اون عمل کنیم.
در نهایت هم کار تمیزی از آب در نمیاد ولی بعنوان یک چالش خوب هست.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.