سلام خدمت دوستان
اساتید فرم های سیستمی اکسس رو چجوری میشه شخصی سازی کزد؟ مثلا کپشن رو عوض کرد و ...
Untitled.png
سلام خدمت دوستان
اساتید فرم های سیستمی اکسس رو چجوری میشه شخصی سازی کزد؟ مثلا کپشن رو عوض کرد و ...
Untitled.png
نمونه ضمیمه رو بررسی کن!
در نمونه جدیدتر علاوه بر کپشن پنجره کپشن کمند باتن 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
جناب بهرامی عزیز
واقعا دست مریزاد و خسته نباشی دارین!
ساعت پست های شما نشون دهنده پشتکار و همچنین اهمیتی هست که به پرسشها میدین.
=======
فقط یک سئوال:
بدون 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
خب روش منطقی و درست همین هست.
پرسش مطرح شده در تاپیک گرچه نشون دهنده رفتن در مسیر نادرست هست،
ولی نتایج خوبی میشه ازش گرفت.
پیش از هر چیز:
- اگر کاربر ما تا این اندازه شوت و پرت هست که حتی از درک معنی کلمه های ساده انگلیسی هم عاجزه،
و لازمه همه چیز فارسی باشه - بهتره 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 اون ها رو بخونیم و بر اساس اون عمل کنیم.
در نهایت هم کار تمیزی از آب در نمیاد ولی بعنوان یک چالش خوب هست.