مشاهده پست هاي بدون جواب | نمايش مبحث هاي فعال امروز چهارشنبه 17 شهریور , 89 6:45 pm



ارسال مبحث جديد پاسخ به مبحث  [ 8 پست ] 
ساخت آبجکت با تعریف رویداد !! 
نويسنده پيغام
مدیر انجمن AMS
نماد کاربر

تاريخ عضويت: شنبه 7 آذر , 88 3:54 pm
پست ها : 506
محل سکونت: پاسارگاد
تشکر کرده: 133 بار
تشکر شده:
207 بار در 93 پست
پست ساخت آبجکت با تعریف رویداد !!
تابع CreateWindowEx.

سلام

در این مقاله قصد دارم تا نحوه ساخت یک آبجکت رو آموزش بدم و اینکه چطوری میتونیم برای این آبجکتمون رویداد های جدید تعریف کنیم , اما با یه آبجکت خیلی ساده به نام دکمه شروع میکنیم , پس تا پایان ما رو هم راهی کنید.

در ضمن در این آموزش ما فقط به آخرین نسخه از پلاگین حافظه نیاز داریم , که میتونید اونو در فروم با یه سرچ ساده پیداش کنید . Memory Plugin

در واقع در این مقاله یاد میگیرید تا هندل یه آبجکت دیگه در Ams رو بگیرید و سپس آبجکت جدیدتون روی اون اعمال کنید , مثل پلاگین ListIcon. خوب اول بریم سراغ کدها و بعدش هم توضیحات درباره عملکردشون :

برای ساخت یک آبجکت نیاز هست تا شما با تابع CreateWindowEx آشنا باشید , یکی از اصلی ترین کارهای این تابع ایجاد یک پنجره یا کنترل می باشد , مثل :
Button
ComboBox
Edit
ListBox
ScrollBar
و..

نحوه تعریف این تابع به این شکل است :

کد:
کدها فقط برای اعضا قابل رویت هستند.اگر در سایت عضو هستید از اینجا وارد شوید ، در غیر اینصورت عضو شوید


در کدهای بالا به غیر از تابع string.format چیز دیگه برای توضیح دادن وجود نداره , کار این تابع هم تعیین نوع پارامترهای تابع CreateWindowEx می باشد , مثلا عدد صحیح , رشته و...

اما توضیحات مختصر در مورد پارامترهای این تابع , از این ابزار هم برای آشنایی با پارامترها و توابع ویندوز میتونید استفاده کنید : (خیلی به کار میاد حتما دانلودش کنید , خودم لینکش رو تست نکردم اگه مشکل داشت در تاپیک اصلاح لینک اطلاع بدهید)

http://lesco.vasva3.ir/Lesco_Project/WIN32.zip

dwExStyle -1 :یک قالب توسعه داده شده می باشد که استایل و شمایل کنترل ساخته شده رو تنظیم میکنه . مثلا برای پنجره ها , مثلا میتونه حالت فرورفتگی حاشیه به سمت داخل رو ایجاد کنه!
lpClassName -2 : نام کلاسی که کنترل از روی آن ساخته می شود را دریافت می کند. تابع به وسیله این نام با سیستم ارتباط برقرار کرده و مشخص می سازد که این کنترل از کدام نوع از کلاسهای رجیستر شده موجود در سیستم ساخته می شود.
3- lpWindowName : یک نام برای عنوان پنجره یا کنترل دریافت می کند.
4- dwStyle : یک قالب استاندارد کنترل را دریافت می کند.
6و5- (X,Y) : موقعیت مکانی کنترل را بر حسب محورهای x و y تعیین می کند , واحد مقدار این پارمترها pixel می باشد که کوچکترین واحد برای صفحه نمایش هست.
8و7- (nWidth , nHeight) : طول و عرض کنترل را دریافت می کند. واحد این دو پارامتر نیز pixel می باشد.

چهار پارامتر آخر نیز مربوط به دستگیره هایی برای کنترل بیشتر آبجکت یا پنجره هستند ,در این آموزش از پارامتر نهم هم جهت ارسال هندل آبجکتی که در ams میخوایم روش کار کنیم (ارسال هندل به تابع) استفاده میکنیم.
پارامترهای نه به بعد رو دیگه فعلا کاری نداریم و هنگام فراخونی تابع که میفته برای قسمت بعدی آموزش مقادیر صفر رو براشون درنظر میگیریم.

ادامه دارد ...

_________________



آخرين ويرايش توسط mohsen on دوشنبه 4 مرداد , 89 4:30 am, ويرايش شده در 2.



اعضاي زير از mohsen براي اين پست تشکر کرده اند
sinamosavi, mehdi2477, . ., mnfahkmh
شنبه 2 مرداد , 89 12:36 pm

مشخصات

مدیر انجمن AMS
نماد کاربر

تاريخ عضويت: شنبه 7 آذر , 88 3:54 pm
پست ها : 506
محل سکونت: پاسارگاد
تشکر کرده: 133 بار
تشکر شده:
207 بار در 93 پست
پست ساخت آبجکت با تعریف رویداد !!
ایجاد آبجکت .

خوب در این قسمت باید از تابعی که به نام CreateWindowEx ایجاد کردیم استفاده کنیم , در اینجا شما میتونید شکل آبجکت تون رو درست کنید , پس میریم سراغ کدها

کد:
کدها فقط برای اعضا قابل رویت هستند.اگر در سایت عضو هستید از اینجا وارد شوید ، در غیر اینصورت عضو شوید


کدهای بالا چی هستند و به چه کاری می آیند ؟؟


شما باید اون تابع CreateWindowEx روکه در پست قبلی تعریف کردیم در Global Function تعریف میکردید که به احتمال 100% این کار رو از قبل انجام دادید , اما خوب باید اون تابع رو در یه جایی مثل قسمت On Show فراخوانی کنید , که میتونید کدهای بالا رو در On Show کپی کنید , ,ولی ما قصد داشتیم که هندل یه آبجکت به عنوان مثال ListBox رو بگیریم و اونو به تابع ارسال کنیم تا مختصات و مشخصات و قیافه آبجکت جدید رو روش ست کنیم , که این کار هم در کدهای بالا انجام شده ,( فقط باید از قبل داخل پروژه آبجکتی که میخواهید هندلش رو بگیرید ایجاد کنید , در اینجا از ListBox استفاده شده ), در نهایت میمونه عباراتی مثل WS_CHILD و WS_VISIBLE و... که الان توضیح میدم کارشون چی هست !!


همونطور که قبلا هم توضیح دادم در پارامتر چهارم تابع CreateWindowEx میتونیم یک استایل استاندارد برای آبجکتمون تعریف کنیم , یعنی تعریف میکنیم از نظر شمایل و حتی ویژگی ها آبجکت مون باید چطوری باشه (اینجاست که اون راهنمای توابع ویندوز به کار میاد , البته میتونید از راهنمای پلاگین WinApi هم برای اطلاعات بیشتر از عملکرد این پارامتر استفاده کنید. برای تازه کارها بهتره که از همین راهنمای پلاگین استفاده کنند , شاید اون راهنمای دیگه کمی گیج کننده باشه, ولی کامل هست) , خوب حالا برای استفاده از این ثابت ها در ams باید مقدار هکس شون رو بدونیم و بعد اونو به دسیمال تبدیل کنیم تا بتونیم در تابع ازشون استفاده کنیم . که میبینید در کدهای بالا توسط تابع Math.HexToNumber این کار انجام شده . (اگر دقیقا متوجه نمیشید , اشکال نداره و دلسرد نشید چون با مثال ها و کدهایی که میزارم و بعد تحلیلشون میکنم یواش یواش یاد میگیرید , پس فکر نکنید که همه اینا رو باید از حفظ کنیم , فقط با تمرین زیاد میشه در این کار مهارت پیدا کرد).

از لینک زیر میتونید این ثابت ها که به صورت کلی تعریف شدن رو دانلود کنید و بعد هر کدوم رو که نیاز داشتید مثل کدهای بالا استفاده کنید .

لینک ها فقط برای اعضا قابل رویت هستند.اگر در سایت عضو هستید از اینجا وارد شوید ، در غیر اینصورت عضو شوید

نگاهی به مقادیر اعمال شده در هنگام فراخوانی تابع CreateWindowEx :

در پارامتر اول از مقدار صفر استفاده کردیم که , که به معنای حالت پیش فرض ویندوز می باشد . اما شما میتونید مقادیر دیگری رو هم وارد کنید و نتیجه کار رو ببینید.(برای اینکه کار این پارامتر رو بفهمید میتونید وقتی مثال زیر رو دانلود کردید آرگومان اول تابع ساخت Status Bar رو یک بار روی صفر بزارید و نتیجه رو مشاهده کنید و یک بار روی یک )
در پارامتر دوم نام کلاسی که کنترل یا آبجکت قرار هست از روی اون ساخته بشه رو بیان کردیم "BUTTON" , (می تونید از این کلاس ها هم استفاده کنید : BUTTON , COMBOBOX , EDIT , LISTBOX , SCROLLBAR , MDICLIENT , STATIC) و...
در پارامتر سوم یک نام برای آبجکت مون نوشتیم . "Button Object"
در پارامتر چهارم هم از اون ثابتهایی که در بالا توضیح دادم استفاده کردیم.(Estilo) ( زمانی که نام کلاس رو تغییر میدهید , این قسمت هم باید مطابق با خوصیات اون کلاس تنظیم بشه) , ( انشاالله بعدا یه لیست از این ثابت ها و کارهر کدامشون رو درست میکنم و قرار میدم).
پارامترهای 8و7و6و5 هم که تابلو هستند.(البته لازم به ذکر هست که مقادیر این پارامترها برابر با مختصات و اندازه آبجکتی هست که هندلش رو میگیریم , پس حتما میزان طول وعرض برابر با آبجکت روی صفحه باشه و x,y هم صفر)
پارامتر نهم هم که از هندل آبجکت لیست باکس استفاده میکنه.( HwndLisB )
پارامترهای بعدی هم که باهاشون کاری نداریم و از مقدار پیش فرض یا همون صفر استفاده میکنند.


خوب برای اینکه یه مقدار تنوع ایجاد بشه و مدل های کاری دیگه این تابع قدرتمند رو ببینید , و همچنین نحوه مقدار دهی به پارامترهاش دست تون بیاد میتونید مثال زیر رو دانلود کنید :

توجه : کلیه مثال های این تاپیک با نسخه 7.5 اتوپلی همخوانی دارند .

لینک ها فقط برای اعضا قابل رویت هستند.اگر در سایت عضو هستید از اینجا وارد شوید ، در غیر اینصورت عضو شوید

در سری بعدی هم انشالله نحوه تعریف ویژگی ها رو آموزش میدم ....

_________________



آخرين ويرايش توسط mohsen on دوشنبه 4 مرداد , 89 12:07 pm, ويرايش شده در 11.



اعضاي زير از mohsen براي اين پست تشکر کرده اند
sinamosavi, mehdi2477, . ., mnfahkmh
شنبه 2 مرداد , 89 6:21 pm

مشخصات

مدیر انجمن AMS
نماد کاربر

تاريخ عضويت: شنبه 7 آذر , 88 3:54 pm
پست ها : 506
محل سکونت: پاسارگاد
تشکر کرده: 133 بار
تشکر شده:
207 بار در 93 پست
پست ساخت آبجکت با تعریف رویداد !!
یه چیزی رو که یادم رفت بگم اینه که برای تمام آبجکت هایی که میخواهید بسازید باید حتما از دو ثابت WS_VISIBLE و WS_CHILD استفاده کنید , بقیه شون مربوط میشن به ویژگی های آبجکت که بعدا درباره شون توضیح میدم , پس یادتون نره برای نمایش آبجکت موردنظر از هر کلاسی که هست نوشتن اون دو تا ثابت اجباریه.

_________________



اعضاي زير از mohsen براي اين پست تشکر کرده اند
mehdi2477, sinamosavi, mnfahkmh
شنبه 2 مرداد , 89 7:23 pm

مشخصات

مدیر انجمن AMS
نماد کاربر

تاريخ عضويت: شنبه 7 آذر , 88 3:54 pm
پست ها : 506
محل سکونت: پاسارگاد
تشکر کرده: 133 بار
تشکر شده:
207 بار در 93 پست
پست ساخت آبجکت با تعریف رویداد !!

ویژگی ها و تنظیمات آبجکت .


در این قسمت میخوام توضیح بدم برای آبجکتی که دارید میسازید چطوری میشه ویژگی یا خصوصیت یا به اصطلاح تنظیمات آبجکت رو ایجاد کرد.

نکته : در اینجا داریم روی یک آبجکت از کلاس BUTTON کار میکنیم و فقط با آرگومنت چهارم تابع CreateWindowEx کار داریم , پس کلیه مطالبی که اینجا خواهید خواند نحوه مقدار دهی به این آرگومنت می باشد.

اگه مثال پست قبلی رو نگاه کرده باشید , حتما دیده بودید که مثلا آبجکت Edit قابلیت Multi Line رو نداشت , یعنی به عبارتی نمیتونستید داخلش چند خط مطلب بنویسید , یا به عنوان مثال آبجکت دکمه به یه شکل بود و هیچ تغییراتی نمیشد داخلش دید , اما در اینجا قصد دارم تا به شما آموزش بدم که چطور برای آبجکت هاتون این ویژگیها رو تعریف کنید .

همونطور که قبلا هم گفتم برای ظاهر شدن یک آبجکت نوشتن دو ثابت WS_VISIBLE و WS_CHILD ضروری هست , اما می تونید با اضافه کردن ثابت های دیگه به دنباله این ها ,به آبجکت تون ویژگی های جدیدی اضافه کنید . اگر اون فایل txt مربوط به ثابت ها رو که در بالا لینک کرده بودم گرفته باشید , می تونید با جستجوی کلمه BS در متنش قسمت ثابت های مربوط به تنظیمات و ویژگی های کلاس دکمه رو به راحتی پیدا کنید , در اینجا من نحوه اضافه کردن این ویژگی ها رو با ذکر چند مثال بیان میکنم و پیشنهاد میکنم که حتما بعد از اینکه طریقه اضافه کردن این خصوصیات رو یاد گرفتید خودتون هرچی ثابت مربوط به دکمه هاست رو امتحان کنید و نتیجه اش رو ببینید (BS) , حتی در بعضی از مواقع با اضافه کردن یک ثابت مثل BS_AUTOCHECKBOX می بینید که کل ظاهر و عملکرد دکمه تغییر پیدا میکنه و به یه آبجکت دیگه به نام CheckBox تبدیل میشه , خوب دیگه فکر کنم توضیحات کافی باشه , پس میریم سراغ کدها و بعد هم توضیحاتشون :

برای اینکه بتونیم نوشته داخل دکمه مون رو به جهت های مختلف (چپ , راست , بالا , پایین , وسط و جهت های فرعی ) ببریم باید از این ثابت ها استفاده کنیم :

کد:
کدها فقط برای اعضا قابل رویت هستند.اگر در سایت عضو هستید از اینجا وارد شوید ، در غیر اینصورت عضو شوید


نحوه اضافه کردنشون به دنباله اون دو تا ثابت اصلی اینطوریه :

کد:
کدها فقط برای اعضا قابل رویت هستند.اگر در سایت عضو هستید از اینجا وارد شوید ، در غیر اینصورت عضو شوید


یا
کد:
کدها فقط برای اعضا قابل رویت هستند.اگر در سایت عضو هستید از اینجا وارد شوید ، در غیر اینصورت عضو شوید


و به همین ترتیب. تازه میتونید ترکیبی هم کار کنید :

کد:
کدها فقط برای اعضا قابل رویت هستند.اگر در سایت عضو هستید از اینجا وارد شوید ، در غیر اینصورت عضو شوید


در نهایت متغییر Mohsen رو داخل آرگومان چهارم تابع CreateWindowEx بنویسید و تغییرات رو مشاهده کنید .

( برای تمرین بیشتر از لیست کلی ثابلت ها که در پست اول لینکش کردم استفاده کنید , در زیر هم یه راهنمایی کوچولو برای پیدا کردن ثابت های مربوط به کلاس ها رو گذاشتم.)


WS ثابت های مربوط به کلاس پنجره و کنترل ها

BS ثابت های مربوط به کلاس
BUTTON

CBS ثابت های مربوط به کلاس
COMBOBOX

ES ثابت های مربوط به کلاس
EDIT

LBS ثابت های مربوط به کلاس
LISTBOX

SBS ثابت های مربوط به کلاس
SCROLLBAR

SS ثابت های مربوط به کلاس
STATIC
و ...

اینم کد نمونه برای اینکه همین حالا مطالب این قسمت از آموزش رو تمرین کنید.(برای اینکه بیشتر تمرین کرده باشید , یه آبجکت Edit درست کنید و بعد قابلیت نوشتن چند خط مطلب رو بهش اضافه کنید یا کاری کنید که نوشته های داخلش به صورت ستاره ای دیده بشن).
کد:
کدها فقط برای اعضا قابل رویت هستند.اگر در سایت عضو هستید از اینجا وارد شوید ، در غیر اینصورت عضو شوید

_________________



آخرين ويرايش توسط mohsen on دوشنبه 4 مرداد , 89 4:32 am, ويرايش شده در 3.



اعضاي زير از mohsen براي اين پست تشکر کرده اند
mehdi2477, sinamosavi, . ., mnfahkmh
يکشنبه 3 مرداد , 89 12:58 pm

مشخصات

مدیر انجمن AMS
نماد کاربر

تاريخ عضويت: شنبه 7 آذر , 88 3:54 pm
پست ها : 506
محل سکونت: پاسارگاد
تشکر کرده: 133 بار
تشکر شده:
207 بار در 93 پست
پست ساخت آبجکت با تعریف رویداد !!

ویژگی ها و تنظیمات آبجکت .


اینم یه مثال جالب برای تنظیمات مربوط به آبجکت Edit

1- دارا بودن اسکرول بار افقی و عمودی برای آبجکت, و Multi line

2- چپ چین , راست چین و وسط چین بودن آبجکت.


لینک :
لینک ها فقط برای اعضا قابل رویت هستند.اگر در سایت عضو هستید از اینجا وارد شوید ، در غیر اینصورت عضو شوید

_________________



اعضاي زير از mohsen براي اين پست تشکر کرده اند
mehdi2477, sinamosavi, hamseda04, mnfahkmh, . .
يکشنبه 3 مرداد , 89 9:59 pm

مشخصات

کاربر دائم سایت
نماد کاربر

تاريخ عضويت: چهارشنبه 8 اردیبهشت , 89 11:24 pm
پست ها : 353
تشکر کرده: 71 بار
تشکر شده:
115 بار در 86 پست
پست ساخت آبجکت با تعریف رویداد !!
ممنون از زحمات شما
در این پروژه من دیدم که شما توانسته اید TREE را وسط چین کنید چطور می توان input را وسط چین کرد؟

_________________
در جهان بال و پر خویش گشودن آموز
که پریدن نتوان با پر و بال دگران


اعضاي زير از hamseda04 براي اين پست تشکر کرده اند
mohsen
پنج شنبه 7 مرداد , 89 2:44 pm

مشخصات

مدیر انجمن AMS
نماد کاربر

تاريخ عضويت: شنبه 7 آذر , 88 3:54 pm
پست ها : 506
محل سکونت: پاسارگاد
تشکر کرده: 133 بار
تشکر شده:
207 بار در 93 پست
پست ساخت آبجکت با تعریف رویداد !!
منظورتون رو اگه میتونید دقیق تر بیان کنید , ممنون. (منظورتون رو از وسط چین بودن tree نفهمیدم , چون در این پروژه tree نیست که وسط چین میشه بلکه اون آبجکت edit جدیدی که روش ست میشه وسط چین هست).


آبجکت Tree رو برای گرفتن هندل و ارسالش به تابع ازش استفاده کردم تا بتونه آبجکت جدید رو روش ست کنه , اما در هنگام اجرای برنامه تمام آبجکت هایی که در صفحه مشاهد میکنید Edit هستند .

انشالله اگه وقت کنم نحوه اضافه کردن ویژگی های جدید به آبجکت های Ams رو از طریق توابع GetWindowLong و SetWindowLong آموزش خواهم داد.

_________________



اعضاي زير از mohsen براي اين پست تشکر کرده اند
sinamosavi, hamseda04
پنج شنبه 7 مرداد , 89 3:14 pm

مشخصات

کاربر دائم سایت
نماد کاربر

تاريخ عضويت: چهارشنبه 8 اردیبهشت , 89 11:24 pm
پست ها : 353
تشکر کرده: 71 بار
تشکر شده:
115 بار در 86 پست
پست ساخت آبجکت با تعریف رویداد !!
اشتباه از من بود چون فکر کردم Tree وسط چین شده

_________________
در جهان بال و پر خویش گشودن آموز
که پریدن نتوان با پر و بال دگران


اعضاي زير از hamseda04 براي اين پست تشکر کرده اند
mohsen
جمعه 8 مرداد , 89 3:04 pm

مشخصات

نمايش پست ها از پيشين:  مرتب سازي بر اساس  
ارسال مبحث جديد پاسخ به مبحث  [ 8 پست ] 


چه کسي حاضر است ؟

کاربران حاضر در اين انجمن: Google [Bot], KHaled_7, Peyman, sinamosavi و 1 مهمان


شما نمي توانيد مبحث جديدي در اين انجمن ايجاد کنيد
شما نمي توانيد به مباحث در اين انجمن پاسخ دهيد
شما نمي توانيد پست هاي خود را در اين انجمن ويرايش کنيد
شما نمي توانيد پست هاي خود را در اين انجمن حذف کنيد

جستجو براي:
انتقال به: