View Full Version : ایجاد hwnd برای یک object
Mehdi0016
شنبه 21 آذر 1383, 10:27 صبح
سلام
چطوری میتونم برای یک object که خاصیت hwnd نداره این خاصیت رو ایجاد کنم و اون شی رو با هندلش کنترل کنم ؟
ناگفته نمونه که توی فروم هم گشتم ولی جوابمو نگرفتم .
یکی از عزیزان هم گفته بود که از طریق شی پدر باید object رو کنترل کرد ولی من میخوام از یه object بدون hwnd چند بار توی یه فرم استفاده کنم ،اون وقت آیا باز هم میشه از شی پدر برای کنترل هر کدوم از object ها استفاده کرد ؟
ممنون
mohsengrisly
شنبه 21 آذر 1383, 21:48 عصر
شما می توانید خودتان یک کنترل activex با این خاصیت را بسازید
و خودتان ابجکتی بسازید که خواص مورد نظر شما را دارا باشد
سری به vb6 Activex CtrlInterface wizard بزنید در add-ins و add-ans manager
البته این راه سختشه :embr:
حتما راه ساده تری هم هست :)
کمکی از من ساخته بود در خدمتم :موفق:
vb4u
یک شنبه 22 آذر 1383, 07:50 صبح
سلام.
دوست عزیز نیازی نیست که عنصر مورد نظر شما حتما دارای خاصیت Hwnd باشه.
البته این بحث یک مقدار پیچیدست ولی چون هدف من از اومدن به این انجمن کمک به دیگرانه پس تا حد ممکن توضیح می دم.
همون طور که شما گفتید برای کنترل یک شی به Hwnd اون شی نیاز دارید.
برای به دست آوردن Hwnd به هیچ وجه نیازی نیست که شی شما دارای خاصیت Hwnd باشه.
برای به دست آوردن هندل از 2 تابع API به نام های FindWindow و FindWindowEX استفاده می شود.
البته نحوه کار با توابع API ای که توضیح می دم به عهده خود شماست.
تابع FindWindow تنها برای به دست آوردن هندل پنجره ی Parent یا پدر و تنها یک بار (تاکید می کنم تنها یک بار) مورد استفاده قرار می گیرد.
مثال:
<span dir=ltr>
Dim XParent As Long
XParent = FindWindow("ThunderRT5Form", vbNullString)
</span>
تابع FindWindowEX برای به دست آوردن هندل پنجرهای Child یا فرزندان یک پدر به کار می رود.
کار با این تابع قدری پیچیدست.
نکته: در دنیای برنامه نویسی، به تمامی عناصر (نه تنها فرم)، پنجره گفته می شود.
ممکنه یک فرزند نیز خود یک فرزند دیگر داشته باشد.
مثال:
<span dir=ltr>
XChild = FindWindowEx(XParent, 0&, "ThunderRT5PictureBox", vbNullString)
XChild = FindWindowEx(XParent, XChild, "ThunderRT5PictureBox", vbNullString)
XChild = FindWindowEx(XParent, XChild, "ThunderRT5PictureBox", vbNullString)
.
.
.
XList = FindWindowEx(XChild, 0&, "ThunderRT5ListBox", vbNullString)
</span>
زمانی که هندل عنصر مورد نظر را به دست آوردید، موقع انجام عمل مورد نظر فرا رسیده است:
با 3 تابع API (که بیشتر استفاده می شوند) می توان عمل مورد نظر را به عنصر منتقل کرد:
<span dir=ltr>
SendMessage
SendMessageLong&
SendMessageByString
</span>
تابع SendMessage: برای ارسال مقادیر Action (اعمالی که نیاز به ارسال پارامتر ندارند) مورد استفاده قرار می گیرد.
مثال: فرستادن رویداد کلید مکان نما به عنصر.
تابع SendMessageLong&: برای ارسال و دریافت مقادیر واقعی از نوع صحیح به کار می رود:
مثال: تغییر یا دریافت رنگ پس زمینه ی یک Text Box.
تابع SendMessageByString: برای ارسال و دریافت مقادیر واقعی از نوع رشته ای به کار می رود.
مثال:
تغییر یا دریافت متن یک Text Box.
برای آشنایی با تمام پارامترهای قابل ارسال و دریافت به هر عنصر به سایت مایکروسافت مراجعه کنید.
موفق باشید.
:wise1:
Mehdi0016
دوشنبه 23 آذر 1383, 08:20 صبح
مرسی از توضیحات شما دوست عزیز .
البته مشکل اصلی من disable کردن کلیلک راست بر روی flashobject در وی بیه !!؟؟
اگه خاصیت window mode فلش رو روی opacity یا transparent بگذاریم کلیک راست غیر فعال میشه .
ولی یه مشکل کوچیک داره اونم اینه که وقتی داخل یه textbox در فایل فلش کلیک میکنیم مکان نما چشمک نمیزنه (blink) !
برای همون با توجه به کدی که برای غیر فعال کردن کلیک راست دارم نیاز به hwnd فلش دارم.
چون وقتی از چند object فلش استفاده میکنم این کد فقط کلیک راست روی آخرین فلش رو غیر فعال میکنه .
برای همین میخوام خاصیت hwnd رو به flash object اضافه کنم .
ممنون
Behrouz_Rad
دوشنبه 23 آذر 1383, 09:00 صبح
سلام.
من امتحان کردم و مکان نما چشمک می زد!!!! البته اگر منظورتون Text Box خود VB باشه.
Text Box فلش رو امتحان نکردم.
:wise1:
Mehdi0016
پنج شنبه 26 آذر 1383, 11:37 صبح
دوست عزیز textbox فلش رو گفتم .
textbox وی بی که معلومه...
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.