PDA

View Full Version : clientRectangle



gomnam
یک شنبه 07 مرداد 1386, 20:35 عصر
همونطورکه میدونین خاصیت clientRectangle مربوط به فرم از نوع get یا بهتره بگم readOnly هستش
من بنا به دلایلی میخوام مقدار این خصیصه را عوض کنم
جستجو زیاد کردم اما نتیجه مطلوبی نگرفتم
می دونم که به wm_nccalcsize ربط داره یعنی میشه با این یه کارایی کرد ولی چیز بدرد بخوری پیدا نکردم
ممنون میشم کمک کنین

gomnam
یک شنبه 07 مرداد 1386, 21:33 عصر
کسی نیست جواب مارو بده ؟ آقا خیلی نیازمندیما

mehdi.mousavi
دوشنبه 08 مرداد 1386, 00:26 صبح
همونطورکه میدونین خاصیت clientRectangle مربوط به فرم از نوع get یا بهتره بگم readOnly هستش
من بنا به دلایلی میخوام مقدار این خصیصه را عوض کنم
جستجو زیاد کردم اما نتیجه مطلوبی نگرفتم
می دونم که به wm_nccalcsize ربط داره یعنی میشه با این یه کارایی کرد ولی چیز بدرد بخوری پیدا نکردم
ممنون میشم کمک کنین

سلام.
در مورد ClientRectangle، در واقع این property سایز Client Area یک کنترل رو به شما بر میگردونه. Client Area چیه؟ ناحیه ای از پنجره که شامل Scrollbar ها، منو، title bar و border ها نمیشه. اگه میخواهید مقدار این Property رو تغییر بدین، باید کنترل رو Resize کنید. برای Resize کردن هم می تونید از Size Property روی کنترل استفاده کنید.

پیام WM_NCCALCSIZE توسط سیستم عامل وقتی به یک Window ارسال میشه که اندازه و جایگاه یک پنجره باید محاسبه بشه (شما نیازی به این message ندارین).

gomnam
دوشنبه 08 مرداد 1386, 17:26 عصر
سلام.
در مورد ClientRectangle، در واقع این property سایز Client Area یک کنترل رو به شما بر میگردونه. Client Area چیه؟ ناحیه ای از پنجره که شامل Scrollbar ها، منو، title bar و border ها نمیشه. اگه میخواهید مقدار این Property رو تغییر بدین، باید کنترل رو Resize کنید. برای Resize کردن هم می تونید از Size Property روی کنترل استفاده کنید.

پیام WM_NCCALCSIZE توسط سیستم عامل وقتی به یک Window ارسال میشه که اندازه و جایگاه یک پنجره باید محاسبه بشه (شما نیازی به این message ندارین).

بنده به این مطالبی که فرمودین واقف هستم
ولی به هر حال ممنو از لطفتون میشه یه نمونه کد بذارین که clientRectangle را resize کنید
البته منظور من clientRectangle مربوط به فرم است
گرچه اگر برای فرم بشه برای دیگر کنترل ها هم شدنی است
منتظرم
ممنون

mehdi.mousavi
دوشنبه 08 مرداد 1386, 21:48 عصر
بنده به این مطالبی که فرمودین واقف هستم
ولی به هر حال ممنو از لطفتون میشه یه نمونه کد بذارین که clientRectangle را resize کنید
البته منظور من clientRectangle مربوط به فرم است
گرچه اگر برای فرم بشه برای دیگر کنترل ها هم شدنی است
منتظرم
ممنون


شما ClientRectangle رو Resize نمیکنید. شما فرم رو Resize میکنید، ClientRectangle خودش Update میشه. برای تغییر سایز فرم هم از Property ای به اسم Size که روی فرم هستش استفاده کنید: Size = new Size(100, 100);

اگر مشکلتون حل نشد، بفرمایید که نیازتون در وحله اول دقیقا چی هست تا پاسخ بدم.

gomnam
دوشنبه 08 مرداد 1386, 22:24 عصر
شما ClientRectangle رو Resize نمیکنید. شما فرم رو Resize میکنید، ClientRectangle خودش Update میشه. برای تغییر سایز فرم هم از Property ای به اسم Size که روی فرم هستش استفاده کنید: Size = new Size(100, 100);

اگر مشکلتون حل نشد، بفرمایید که نیازتون در وحله اول دقیقا چی هست تا پاسخ بدم.

با جوابی که دادین مشخص میشه که شما اصلا متوجه سوال و مقصود من نشدین
در واقع شاید تقصیر از من بوده که درست و کامل سوالم را نپرسیدم
ببینید وقتی شما میخواین یه border خوب برای فرمتون اونطوری که میخواین ترسیم کنین میتونین از gdi+ خیلی خوب استفاده کنین
به این شکل که border فرمتون را روی none ست میکنین و بعد شروع میکنین به طراحی
تا اینجا مشکلی نبست اما وقتی طراحیتون تموم شد و مثلا یه menustrip گذاشتین روی فرم اون وقت متوجه میشین که همه چیز نابود شده
در واقع مقدار clientRectangle محلی است که که کنتر لها در اون میتونن قرار بگیرن و طراحی ها یعنی border ها بایستی خارج از آن باشن
اما وقتی که شما خاصیت formBorderStyle را none میکنین اونوقت تمام فضای فرمتون میشه clientRectangle و اونوقه که همه چیز خرا ب میشه
در واقع باید ابتدا خاصیت clioentRectangle را همونطور که گفتم resize کرد تا بتونین طراحی border فرمتون را خارج از اون فضا قرار بدین
و اگه خوب به این مطالب دقت کنین میبینید که دقیقا باید از wm_nccalcsize استفاده کرد
حتی یکی دو نمونه کد هم دیدم اما خیلی خوب واضح نبودن برای اینکه طراحی فرم به اون شکلی که آدم میخواد کار سخت و حرفه ای هستش که هرکسی سراغش نمیره
البته یه روش ماسمالی هم که اکثر برنامه نویس ها از اون استفاده میکنن اینه که 4 تا panel چار گوشه یه فرم به عنوان فرم borde میذارن و بعدش هم 4 تا عکس قشنگ میندازن bavjGround این panel ها و بعد بقیه فرم هاشون از این فرم ارث بری میکنن
اما همونطور که گفتم این کار بچه بازی و یه جورایی ماسمالی هستش که من خیلی خوشم نمیاد
امید وارم که منظورم را متوجه شده باشین
ولی به هر حال از اینکه وقت گذاشتین ممنونم
راستی یه راه دیگه ای هم هست اونم اینه که از کامپوننت های موجود مثل dotnetskin یا skincrafter و ... استفاده کرد
متاسفانه یا خوشبختانه من کرک این فایل ها را ندارم اگر دارین ممنون میشم برام بفرستین البته با pmخصوصی چون فعالیت وارز همونطور که میدونین ممنوعه توی سایت
شرمنده اگه سرتون را درد اوردم
منتظر م
یا حق

hdv212
سه شنبه 09 مرداد 1386, 00:33 صبح
gomnam عزیز، ظاهرا این مبحث اسکین ها و gdi+ خیلی برات حیاتیه چون خیلی وقته دنبالش میگردی، منم برای راهنمایی بیشتر این لینک رو بهت پیشنهاد میکنم که با کلاسی که داره میتونی ظاهر هر کنترلی حتی فرمتو باهاش عوض کنی، دیگه توضیح نمیدم چون یه مثال خوب و گویا داره، فقط موقع کامپایل و اجرا در vs یک کمی کند کار میکنه ولی اگه مستقیما و خارج از محیط debug اجراش کنی، سرعتش خوبه. به هر حال موفق باشی و امیدوارم به دردت بخوره :
http://www.codeproject.com/csharp/bmprgnform.asp?df=100&forumid=33223&exp=0&select=1154174&tid=1154174

mehdi.mousavi
سه شنبه 09 مرداد 1386, 01:30 صبح
با جوابی که دادین مشخص میشه که شما اصلا متوجه سوال و مقصود من نشدین
در واقع شاید تقصیر از من بوده که درست و کامل سوالم را نپرسیدم
ببینید وقتی شما میخواین یه border خوب برای فرمتون اونطوری که میخواین ترسیم کنین میتونین از gdi+ خیلی خوب استفاده کنین
به این شکل که border فرمتون را روی none ست میکنین و بعد شروع میکنین به طراحی
تا اینجا مشکلی نبست اما وقتی طراحیتون تموم شد و مثلا یه menustrip گذاشتین روی فرم اون وقت متوجه میشین که همه چیز نابود شده
در واقع مقدار clientRectangle محلی است که که کنتر لها در اون میتونن قرار بگیرن و طراحی ها یعنی border ها بایستی خارج از آن باشن
اما وقتی که شما خاصیت formBorderStyle را none میکنین اونوقت تمام فضای فرمتون میشه clientRectangle و اونوقه که همه چیز خرا ب میشه
در واقع باید ابتدا خاصیت clioentRectangle را همونطور که گفتم resize کرد تا بتونین طراحی border فرمتون را خارج از اون فضا قرار بدین
و اگه خوب به این مطالب دقت کنین میبینید که دقیقا باید از wm_nccalcsize استفاده کرد
حتی یکی دو نمونه کد هم دیدم اما خیلی خوب واضح نبودن برای اینکه طراحی فرم به اون شکلی که آدم میخواد کار سخت و حرفه ای هستش که هرکسی سراغش نمیره
البته یه روش ماسمالی هم که اکثر برنامه نویس ها از اون استفاده میکنن اینه که 4 تا panel چار گوشه یه فرم به عنوان فرم borde میذارن و بعدش هم 4 تا عکس قشنگ میندازن bavjGround این panel ها و بعد بقیه فرم هاشون از این فرم ارث بری میکنن
اما همونطور که گفتم این کار بچه بازی و یه جورایی ماسمالی هستش که من خیلی خوشم نمیاد
امید وارم که منظورم را متوجه شده باشین
ولی به هر حال از اینکه وقت گذاشتین ممنونم
راستی یه راه دیگه ای هم هست اونم اینه که از کامپوننت های موجود مثل dotnetskin یا skincrafter و ... استفاده کرد
متاسفانه یا خوشبختانه من کرک این فایل ها را ندارم اگر دارین ممنون میشم برام بفرستین البته با pmخصوصی چون فعالیت وارز همونطور که میدونین ممنوعه توی سایت
شرمنده اگه سرتون را درد اوردم
منتظر م
یا حق

سلام.
این سوال با اینکه "چطوری ClientRectangle رو عوض کنم" فرق میکنه. :) حالا کاملا متوجه شدم مشکل شما چی هست. درسته. برای اینکه بتونید خارج از ClientRectangle بکشید، باید پیام WM_NCCALCSIZE رو در WndProc بگیرید و خودتون محاسبات منجر به تغییر ClientRectangle رو انجام بدید. مراحل انجام این کار در یک مقاله دو بخشی در این سایت (http://geekswithblogs.net/kobush/articles/CustomBorderForms.aspx) کاملا توضیح داده شده. برای گرفتن Source های مربوط به مقاله هم میتونید به این آدرس رجوع کنید (http://www.codeplex.com/Wiki/View.aspx?ProjectName=CustomerBorderForm). اگر بازهم مشکلی بود در خدمتم.

gomnam
سه شنبه 09 مرداد 1386, 06:09 صبح
سلام.
این سوال با اینکه "چطوری ClientRectangle رو عوض کنم" فرق میکنه. :) حالا کاملا متوجه شدم مشکل شما چی هست. درسته. برای اینکه بتونید خارج از ClientRectangle بکشید، باید پیام WM_NCCALCSIZE رو در WndProc بگیرید و خودتون محاسبات منجر به تغییر ClientRectangle رو انجام بدید. مراحل انجام این کار در یک مقاله دو بخشی در این سایت (http://geekswithblogs.net/kobush/articles/CustomBorderForms.aspx) کاملا توضیح داده شده. برای گرفتن Source های مربوط به مقاله هم میتونید به این آدرس رجوع کنید (http://www.codeplex.com/Wiki/View.aspx?ProjectName=CustomerBorderForm). اگر بازهم مشکلی بود در خدمتم.

من این لینک ها را هم قبلا خودم دیده بودم و هم یکی از کاربرای دیگه لطف کرده بودن و به من داده بودن
اولا اینکه من خیلی درست متوجه نشدم که چیکار کرده (شاید خیلی سطحش بالاست که فکر نمیکنم)
ثانیا این مقاله و برنامه نمونه ای که با اون نوشتن مشکل داره
میتونید برنامه را دان کنید و بعد demo ی آن را اجرا کنید و بعدش فرمی را که بازمیشه چندین بار پشت سر هم minimez و restore کنید ببینید چه اتفاقی میافته
این یکی از مشکلاتشه و احتمالا مشکلات دیگه ای هم داره
اگه لینکی یا مقاله دیگه ای دارین ممنون میشم





ظاهرا این مبحث اسکین ها و gdi+ خیلی برات حیاتیه



gdi+ نه ولی skin چرا (البته برای skin هم از gdi باید استفاده کرد)
hdv212 عزیز راستی ببینم از ابزار dxpereience نمیشه استفاده کرد ؟ میشه اگه لینک کامپوننتش را دارین بهم بدین البته با pm خصوصی ممنون میشم

اون لینکی هم که دادی بدک نیست ممنون ولی اگر این clientRectangle میشد resize بشه خیلی عالی بود

راستی dotnetskin هم خیلی کامپوننت خوبیه فقط اینکه کرکش را من ندارم میشه اگه کر ک اون را هم دارین بهم بدین ؟ البته بازم با pm خصوصی که قوانین هم نقض نشه
ممنون بازم از لطفتون

hdv212
سه شنبه 09 مرداد 1386, 18:05 عصر
gomnam عزیز، کامپوننت dxpereience بسیار کامپوننت خوبیه ولی برای اسکین زیاد امکانات نداره ولی ابزارهای خوبی داره با ظاهر شیک، ولی متاسفانه مشکل اصلی، deploy کردن اونه که من هنوز درگیرش هستم، الان حدود 10 تا فرم توی برنامم که هر کدم سه تا tab داره با یه عالمه کنترل، طراحی کردم ولی توش گیر کردم و دیگه ادامه ندادم تا تکلیف رجیستر کردن این کامپوننت روی سیستم مشتری مشخص بشه، برای اطلاعات بیشتر به این سایت برو :
http://www.devexpress.com
در ضمن اون مقاله ای که بهت دادم، نمونه ی خیلی خوبی از gdi و اسکین بود، من که خیلی ازش خوشم اومد.