View Full Version : سوال: آیا راهی هست که با دونستن هندل یک کامپوننت هندل فرم رو هم بدست بیارم؟
mbshareat
جمعه 01 اردیبهشت 1391, 12:40 عصر
سلام و درود
فرض کنین یه برنامه در حال اجرا داریم هندل یک کامپوننت از پنجره برنامه رو داریم ولی کل کامپوننتهای پنجره روی پنل یا چنین چیزیه!
من می خوام هندل پنجره رو بدست بیارم که بتونم اون رو از حالت Minimize در بیارم.
راستش نمی دونم ReStore کردن یک پنجره چطوریه BringWindowToTop , SetForeGroundWindow آیا کمک می کنه یا نه؟
بعد از بالا آمدن پنجره می خوام کلیک رو روی اون شبیه سازی کنم که الته مشکلی از این جهت ندارم.
کد این کار رو چند بار توی این تالار گذاشتن و وقتی پنجره بالا باشه هم امتحان کردم مشکلی نداشت.
مشکل من 3 چیزه ::متفکر:
1.بدست آوردن هندل پنجره
2.خارج کردن از حالت Minimize و نمایش اون بالای پنجره های دیگست.
3. بدست آوردن مختصات پنجره از خروجی GetWindowRgn.
لطفا در مورد هر کدوم که بلید منو راهنمایی کنین..ممنون!:تشویق:
Felony
جمعه 01 اردیبهشت 1391, 14:13 عصر
سوالتون رو در تاپیک های جدا بپرسید تا در آینده کاربران دیگه ای که همین مشکل رو دارن راحت بتونن با جست و جو بهش برسن .
سوالی رو که عنوان تاپیک هست جواب میدم : تابع GetParent از کتابخانه ویندوز یک هندل رو به عنوان پارامتر میگیره و هندل Parent اون رو بر میگردونه .
mbshareat
جمعه 01 اردیبهشت 1391, 19:27 عصر
سلام آقای تاجیک عزیز.
از محبتتون ممنونم
لطفا جواب سوال آخرم رو در این تاپیک (http://barnamenevis.org/showthread.php?337620-%DA%86%D8%B7%D9%88%D8%B1-%D9%85%DB%8C%D8%B4%D9%87-%D9%85%D8%AE%D8%AA%D8%B5%D8%A7%D8%AA-%DB%8C%D9%87-%D9%BE%D9%86%D8%AC%D8%B1%D9%87-%D8%B1%D9%88-%D8%A8%D8%AF%D8%B3%D8%AA-%D8%A2%D9%88%D8%B1%D8%AF%D8%9F&p=1489384&viewfull=1#post1489384) بفرمایین.
ShowWindow به درد ReStore و بزرگ نمایی پنجره می خوره.
(اگه حوصله دارین کدم رو در این پست (http://barnamenevis.org/showthread.php?336818-%D8%A2%DB%8C%D8%A7-%D8%B1%D8%A7%D9%87%DB%8C-%D9%87%D8%B3%D8%AA-%DA%A9%D9%87-%D8%B4%DA%A9%D9%84-%D8%B8%D8%A7%D9%87%D8%B1%DB%8C-%D8%AF%DA%A9%D9%85%D9%87-%D8%A7%DB%8C-%D8%B1%D9%88-%D8%AE%D9%88%D8%AF%D9%85-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%DA%A9%D9%86%D9%85-%D9%88-%D8%A7%D8%B2-TButton-%D9%87%D9%85-%D9%85%D8%B4%D8%AA%D9%82-%D8%A8%DA%AF%DB%8C%D8%B1%D9%85%D8%9F&p=1488953&viewfull=1#post1488953) هم یه نگاهی بندازین. دوست دارم به جواب برسم!!)
mbshareat
جمعه 01 اردیبهشت 1391, 22:09 عصر
سلام
متاسفانه متوجه شدم که من در این تاپیک نیاز به هندل Owner دارم چون Parent کامپوننتی که دارم یه چیزی مثل GroupBox هستش(برنامه Silver Handle Viewer شما نام کلاس کامپوننت بالاتر رو کلمه ای حاوی عبارت GroupBox گزارش می کنه!)
آیا برای پیدا کردن Owner یا هر چی دیگه که یک راست هندل فرم رو بده راهی هست؟
GetOwner از متدهای TComponent هستش ولی نمی دونم به درد کارم میخوره یا نه؟
MohsenB
جمعه 01 اردیبهشت 1391, 22:49 عصر
سلام
از این راه میتونید به نتیجه برسید :
function GetFormHandle(Obj :TWinControl):THandle;
begin
if not Assigned(Obj.Parent) then
Result:= Obj.Handle
else
Result:= GetFormHandle(Obj.Parent);
end;
توضیح اینکه این تابع رو با یک کنترل صدا بزنید تا براتون دستگیره فرم اصلیی که اون کنترل توی اون قرار داره رو برگردونه .
موفق باشید
mbshareat
شنبه 02 اردیبهشت 1391, 00:37 صبح
تنها چیزی که من دارم هندل کنترله. چطور میتونم به عنوان پارامتر ازش استفاده کنم.
من سه بار GetParent رو به کار بردم شاید به فرم برسم ولی نتونستم!
یه چیزی رو سر در نمیارم. چطور از تابع در خودش به عنوان خروجی استفاده کردین!!
Felony
شنبه 02 اردیبهشت 1391, 06:28 صبح
تابعی که بالا گذاشته شده باید اینطور نوشته بشه :
function GetFormHandle(ObjHandle: THandle): THandle;
begin
if GetParent(ObjHandle) = 0 then
Result := ObjHandle
else
Result := GetFormHandle(ObjHandle);
end;
یه چیزی رو سر در نمیارم. چطور از تابع در خودش به عنوان خروجی استفاده کردین!!
به اون تابع میگن تابع بازگشتی ؛ یعنی خودش ، خودش رو صدا میزنه ، توابع بازگشتی همیشه دارای شرطی برای خروج از تابع هستند وگرنه به یک حلقه بینهایت تبدیل میشن ؛ میتونید در موردشون مطالعه کنید .
mbshareat
شنبه 02 اردیبهشت 1391, 20:37 عصر
سلام
تازه وقت کردنم تست کنم. اگه کد رو اینطور نکین همون مشکلی که گفتین یعنی حلقه بی نهایت پیش میاد!
function GetFormHandle(ObjHandle: THandle): THandle;
begin
if GetParent(ObjHandle) = 0 then
Result := ObjHandle
else
Begin
ObjHandle:=GetParent(ObjHandle);
Result := GetFormHandle(ObjHandle);
End;
end;
MohsenB
شنبه 02 اردیبهشت 1391, 22:07 عصر
سلام
اصلاحیه :
function GetFormHandle(ObjHandle: THandle): THandle;
begin
if GetParent(ObjHandle) = 0 then
Result := ObjHandle
else
Result := GetFormHandle(GetParent(ObjHandle));
end;
موفق باشید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.