PDA

View Full Version : سوال: افزودن Button درون پنجره برنامه دیگر



Nabi
جمعه 03 شهریور 1391, 09:51 صبح
چگونه میشه یک دکمه (Button) درون پنجره برنامه دیگر اضافه کرد.
برای مثال افزودن یک دکمه با وظیفه مشخص در جای مشخص در پنجره چت یاهو مسنجر.

محسن واژدی
جمعه 03 شهریور 1391, 11:45 صبح
سلام علیکم
میتوانیم ابتدا دکمه مورد نظر را در فرم طراحی سپس با FindWindow ، FindWindowEx هندل فرم و شی را به دست آورده و با SetParent دکمه آماده شده را ضمیمه فرم چت یاهو کنیم

موفق باشید

Nabi
جمعه 03 شهریور 1391, 20:53 عصر
دست شما درد نکنه، با راهنمایی که کردید موفق شدم انجامش بدم.
فقط چرا وظیفه ای که به button داده میشه روی برخی فرم ها کار نمیکنه. مثلاً دستور msgbox ساده، وقتی دکمش میره توی برخی فرمها دیگه کار نمیکنه.

setroyd
جمعه 03 شهریور 1391, 21:08 عصر
باید کد رو بزاری تا بشه فهمید !

Nabi
جمعه 03 شهریور 1391, 21:48 عصر
Private Declare Function SetParent Lib "user32.dll" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long


Private Sub Command1_Click()
' Move button Command1, which is considered to be a window,
' from its old parent window of Form1 to its new parent window of Form2.
Dim oldhwnd As Long ' receives handle of button's former parent

'YahooBuddyMain , CConvWndBase
lMainHwnd = FindWindow("YahooBuddyMain", vbNullString)

oldhwnd = SetParent(Command2.hWnd, lMainHwnd) ' button is now in window Form2.
End Sub

Private Sub Command2_Click()
MsgBox "test"

End Sub

با CConvWndBase کار میکنه. با YahooBuddyMain کار نمیکنه.

setroyd
جمعه 03 شهریور 1391, 23:07 عصر
دوست عزیز اگه دقت کنی زمانی که رو command کلیک میشه فرم شروع به چشمک میزنه و close نمیشه این نشون میده اون پنجره رو برنامه ی ما مشکل ایجاد میکنه که فکر میکنم باید اینو تو گوگل سرچ کنیم و مشکل رو بفهمیم !

ASedJavad
شنبه 04 شهریور 1391, 00:53 صبح
سلام

من تو لینک زیر یه روش دیگه گذاشته بودم
اون رو هم یه چک بکن!
http://barnamenevis.org/showthread.php?348849-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-%DB%8C%DA%A9-%DA%A9%D9%84%DB%8C%D8%AF-%DB%8C%D8%A7-...-%D8%A8%D9%87-%DB%8C%DA%A9-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%AE%D8%A7%D8%B5-%D8%A8%D8%A7-%D9%87%D9%86%D8%AF%D9%84-%DB%8C%D8%A7-%D8%B1%D9%88%D8%B4%D9%87%D8%A7%DB%8C-%D8%AF%DB%8C%DA%AF%D9%87

محسن واژدی
شنبه 04 شهریور 1391, 01:16 صبح
با CConvWndBase کار میکنه. با YahooBuddyMain کار نمیکنه. چک کنین ممکن هست YahooBuddyMain خودش child باشد نه parent

Nabi
شنبه 04 شهریور 1391, 16:28 عصر
دوست عزیز اگه دقت کنی زمانی که رو command کلیک میشه فرم شروع به چشمک میزنه و close نمیشه این نشون میده اون پنجره رو برنامه ی ما مشکل ایجاد میکنه که فکر میکنم باید اینو تو گوگل سرچ کنیم و مشکل رو بفهمیم !
ببخشید با من بودید؟! اصلاً متوجه نشدم!

Nabi
شنبه 04 شهریور 1391, 16:30 عصر
سلام

من تو لینک زیر یه روش دیگه گذاشته بودم
اون رو هم یه چک بکن!
http://barnamenevis.org/showthread.php?348849-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-%DB%8C%DA%A9-%DA%A9%D9%84%DB%8C%D8%AF-%DB%8C%D8%A7-...-%D8%A8%D9%87-%DB%8C%DA%A9-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%AE%D8%A7%D8%B5-%D8%A8%D8%A7-%D9%87%D9%86%D8%AF%D9%84-%DB%8C%D8%A7-%D8%B1%D9%88%D8%B4%D9%87%D8%A7%DB%8C-%D8%AF%DB%8C%DA%AF%D9%87
ممنون. اینم روش خوبی به نظر میرسه. فقط من چطوری به دکمه ها وظیفه بدم. یعنی دستوراتی که بعد از کلیک شدن باید انجام بشن کجا نوشته بشن؟

Nabi
شنبه 04 شهریور 1391, 16:32 عصر
چک کنین ممکن هست YahooBuddyMain خودش child باشد نه parent
از عکس زیر اینطور به نظر میرسه که parent نداره.
91822

ASedJavad
شنبه 04 شهریور 1391, 20:38 عصر
سلام

ممنون. اینم روش خوبی به نظر میرسه. فقط من چطوری به دکمه ها وظیفه بدم. یعنی دستوراتی که بعد از کلیک شدن باید انجام بشن کجا نوشته بشن؟

به نظرم با توابعی مثل getMessage و امثالهم

چک کنین ممکن هست YahooBuddyMain خودش child باشد نه parent

بعید میدونم ربطی داشته باشه
اگه اینجوری بود، دکمه اصلا اضافه نمیشد. نه اینکه دکمه اضافه بشه ولی کار نکنه!

محسن واژدی
شنبه 04 شهریور 1391, 20:47 عصر
سلام علیکم،
از چه نسخه ای از مسنجر یاهو استفاده میکنید، متاسفانه کلاس های نسخه فعلی در سیستمی که بنده نشسته ام CConvWndBase هست

Nabi
شنبه 04 شهریور 1391, 22:27 عصر
به نظرم با توابعی مثل getMessage و امثالهم


سرنخ خوبی بود دارم روش کار میکنم ممنون.

Nabi
شنبه 04 شهریور 1391, 22:30 عصر
سلام علیکم،
از چه نسخه ای از مسنجر یاهو استفاده میکنید، متاسفانه کلاس های نسخه فعلی در سیستمی که بنده نشسته ام CConvWndBase هست

نسخه 11.5.0.192
بله برای بنده هم همین است و همانطور که عرض شد، با CConvWndBase کار میکنه. ولی با YahooBuddyMain کار نمیکنه. (یعنی در دکمه ظاهر میشود ولی فرمان تعریف شده عمل نمیکند)

مهرداد صفا
شنبه 04 شهریور 1391, 23:30 عصر
سلام

ممنون. اینم روش خوبی به نظر میرسه. فقط من چطوری به دکمه ها وظیفه بدم. یعنی دستوراتی که بعد از کلیک شدن باید انجام بشن کجا نوشته بشن؟

فکر میکنم با hook کردن بتوانید. با استفاده از SetWindowsHookX میتوانید تابعی را به عنوان CallBack معرفی کنید تا هنگام اتفاق افتادن برخی رویدادها تابع اجرا شود.