PDA

View Full Version : سوال: چطوری میشه فهمید یک کنترل رو فرم وجود دارد؟



javadt
یک شنبه 03 آبان 1388, 21:04 عصر
من هندل فرم رو دارم
کلاس کنترل رو هم دارم
حالا می خوام چک کنم ببینم که این کنترل روی فرم وجود دارده یا نه
باید از چه تابع ای استفاده کنم
مثلا من یک نرم افزار باز کردم
هندل نرم افزار رو پیدا کردم
حالا می خوام چک کنم ببینم یک تولبارش فعال یا غیر فعال
کلاس تولبار رو هم پیدا کردم
حالا چطوری می تونم چک کنم؟
اگر فعال نبود راهی هست تا فعال کنم؟
با تشکر

javadt
سه شنبه 05 آبان 1388, 00:23 صبح
من به این برنامه خیلی نیاز دارم
اساتید لطفا راهنمایی فرمایند

ASedJavad
چهارشنبه 06 آبان 1388, 06:57 صبح
سلام
من نفهميدم منظورت از وجود داره يا نه چيه؟
اگه منظورت اينه که تو اون فرم اصلا همچين کنترلي لود شده يا نه؟ ميتوني با توابع اي پي آي مثل FindWindowEx سعي کني هندل اون کنترل رو پيدا کني، اگه مقدار داشت که معلومه اون کنترل لود شده اگر مقدارش صفر بود معلومه که اون کنترل لود نشده. (همچنين ميتوني از اي پي آي IsWindow استفاده کني )

اگر منظورت اينه که اون کنترل enable هست يا disable بايد اول هندل کنترل رو بدست بياري، بعد با استفاده از اي پي آي IsWindowEnabled اون رو چک کني، اگه مقدار تابع صفر بود، کنترل disable والا enable هست.
اگر هم منظورت اينه که ميخواي ببيني کنترل visable هست يا نه، بايد از اي پي آي IsWindowVisible استفاده کني.

(در هر صورت بايد اول هندل کنترل مورد نظر رو بدست بياري)
براي enable يا disable کردن کنترل هم ميتوني از تابع EnableWindow اصتفاده کني که اگه مقدار آرگومان fEnabled صفر باشه، کنترل disable و الا Enable‌ميشه.

موفق باشي:لبخندساده:



اساتید لطفا راهنمایی فرمایند

در ضمن از اينکه خودمو قاتي اساتيد کردم معذرت ميخوام

javadt
چهارشنبه 06 آبان 1388, 11:21 صبح
خیلی ممنون دوست عزیز
از راهنماییتون سپاسگذارم
اگر امکان داره برام یک مثال بزارید ممنون می شم
بله می خوام چک کنم مثلا یک تولبار فعال هست یا غیر فعال
این چه حرفی شما استاد ما هستید
با تشکر

ASedJavad
چهارشنبه 06 آبان 1388, 15:56 عصر
هندل اون تولبار رو داري؟

javadt
جمعه 08 آبان 1388, 15:25 عصر
هندل برنامه رو دارم و کلاس اون تولبار رو

ASedJavad
جمعه 08 آبان 1388, 21:05 عصر
سلام
اين کد رو تو قسمت جنرال فرمت بنويس:


Private Declare Function FindWindowExA Lib "user32.dll" (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, ByVal lpszClass As String, ByVal lpszCaption As String) As Long
Private Declare Function IsWindowEnabled Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long

اين تابع رو هم به فرمت اضافه کن:



Private Function GetHandle(FormHandle As Long, ControlClassName As String) As Long
Dim x As Integer, i As Integer
GetHandle = 0
x = 1
For i = 1 To x
GetHandle = FindWindowExA(FormHandle, GetHandle, ControlClassName, vbNullString)
Next i
End Function

البته بايد حواست باشه که مقدار x‌رو خودت بايد از طريق سعي و خطا بدست بياري.
يعني اول بذاري x=1‌اگه ديدي برنامه درست کار ميکنه، که هيچ و الا به x مقدار 2 بدي و همين جور تا مقدار درست x رو بدست بياري

حالا يه کامند به فرمت اضافه کن و اين کد رو توش بنويس:


Private Sub Command1_Click()
Dim a As Long, z As Boolean
a = GetHandle(YourFormHandle, YourControlclassName)
z = IsWindowEnabled(a)
EnableWindow a, Not z
End Sub

که در اين جا بايد بجاي YourFormHandle هندل فرم مورد نظرت و YourControlclassName کلاس نيم کنترلت رو قرار بدي..
اميدوارم به دردت بخوره
موفق باشي