فصل اول
ساخت کامپوننت
یکی از ویژگی های کلیدی دلفی این است که می توانید کتابخانه کامپوننت های موجود درون دلفی را برای برنامه های کاربردی خود ، گسترش دهید . در این بخش تمام جنبه های ساخت کامپوننت تشریح خواهد شد.
برای اینکه استاد ساخت کامپوننت خودتان شوید به دانستن مطالب زیر نیاز دارید:
- بررسی اجمالی ساخت کامپوننت
- برنامه نویسی شیء گرایی (OOP) برای کامپوننت نویسان
- ایجاد خصوصیات (Properties)
- ایجاد رویداد ها (Events)
- ایجاد متد ها (methods)
- استفاده از گرافیک در کامپوننت ها
- مدیریت پیامها
- رجیستر (ثبت) کردن کامپوننت
بررسی اجمالی ساخت کامپوننت
در این فصل شاهد مرور گسترده ای بر معماری کامپوننت ، فلسفه ی طراحی کامپوننت و فرایند نوشتن کامپوننت ها برای برنامه های کاربردی دلفی خواهید بود.
موضوعات اصلی بحث :
- کتابخانه کامپوننت های بصری (Visual)
- کامپوننت ها و اشیاء
- چگونه کامپوننت می سازید؟
- کامپوننت چگونه کار میکند؟
- ساخت یک کامپوننت جدید
- تست کامپوننت حذف شده
برای تمام این موارد، شما باید با استفاده از دلفی و کامپوننت های استاندارد آن آشنایی داشته باشید.
کتابخانه کامپوننت های بصری (Visual)
کامپوننت های دلفی قسمت هایی از یک شیء وراثتی (سلسله مراتبی) هستند که کتابخانه کامپوننت های بصری (VCL) نامیده می شوند. تصویر 1.1 ارتباط بین اشیاء را بخوبی نمایش می دهد. در فصل دوم درباره روابط بین اشیاء و اشیاء وراثتی بحث خواهیم کرد.
توجه داشته باشید که TComponent جد مشترک بسیاری از کامپوننت های VCL است. TComponent حداقل خصوصیات و رویداد های مورد نیاز برای یک کامپوننت در محیط دلفی را فراهم می کند.
[برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید]
تصویر 1.1
وقتی شما یک کامپوننت می سازید ، با مشتق کردن یک شیء جدید از یکی از انواع اشیاء موجود در این سلسله مراتب ، به کتابخانه کامپوننت های بصری یکی اضافه می کنید.
کامپوننت ها و اشیاء
بدلیل اینکه کامپوننت ها ، در واقع اشیاء هستند ، کامپوننت نویسان در سطحی متفاوت از کاربران کامپوننت با اشیاء کار می کنند. ایجاد کامپوننت های جدید مستلزم مشتق کردن از انواع اشیاء دیگر است. فصل دوم توضیحات مفصلی درباره انواع وظایف شیء گرایی که کامپوننت نویسان باید انجام دهند، ارائه می دهد.
بطور خلاصه، دو تفاوت عمده بین ساخت کامپوننت و استفاده از کامپوننت وجود دارد . وقتی کامپوننت ها را می سازید:
- شما به قسمت هایی از اشیاء دسترسی پیدا می کنید که برای کاربران کامپوننت ها غیر قابل دسترسی است
- شما قسمت های جدیدی (مانند خصوصیات ) به کامپوننت ها ی خود می افزایید
بخاطر همین تفاوت ها ، باید به قواعد کار و شرایطی که کاربران کامپوننت های شما از آنها استفاده خواهند کرد ، آگاه باشید.
چگونه کامپوننت می سازید؟
رایج ترین روش های ساخت کامپوننت ها عبارتند از :
- تغییر کنترل های موجود
- ساخت کنترل های اصلی
- ساخت کنترل های گرافیکی
- انشعاب از کنترل های ویندوزی
- ساخت کامپوننت های غیر بصری (nonvisual)
جدول 1.1 تفاوت انواع کامپوننت ها و انواع اشیائی که برای شروع هر کدام استفاده می کنید نشان میدهد.
هدف
با این نوع شروع کنید تغییر یکی از کامپوننت های موجود هر کامپوننتی که وجود دارد، مانند TButton یا TListBox یا یک نوع کامپوننت انتزاعی مانند TCustomListBox ساخت یک کنترل اصلی TCustomControl ساخت یک کنترل گرافیکی TGraphicControl استفاده از یکی از کنترل های ویندوزی TWinControl ساخت کامپوننت غیر بصری (nonvisual) TComponent
همچنین شما می توانید اشیاء دیگری را که کامپوننت نیستند نیز مشتق کنید، در این صورت دیگر نمی توانید آنها را در فرم دستکاری کنید. دلفی شامل تعدادی از این نوع اشیاء است مانند TINIFile یا TFont .
تغییر کنترل های موجود
ساده ترین راه برای ساخت کامپوننت ، شروع با یکی از کامپوننت های موجود است. با آن کار کنید و آن را به دلخواه خود تغییر دهید.شما می توانید یک کامپوننت جدید را از یکی از کامپوننت های موجود که در دلفی ارائه شده است مشتق کنید. برای نمونه ممکن است بخواهید مقادیر پیش فرض خصوصیات یکی از کنترل های استاندارد را تغییر دهید.
بعضی از کنترل ها مانند ListBox ها و Grid ها ، در تم پایه ، حاوی تعدادی تغییر هستند. در این موارد ، وقتی که می خواهید نسخه دلخواه خود را مشتق کنید، دلفی یک نوع کنترل انتزاعی ارائه می کند (که در نام آن عبارت "Custom" وجود دارد ، مانند "TCustomGrid").
به عنوان مثال ، ممکن است بخواهید نوع خاصی از ListBox بسازید که بعضی از خصوصیات نوع TListBox استاندارد را نداشته باشد. شما می توانید یکی از خصوصیاتی که از نوع والد خود به ارث برده است را حذف کنید. بنابر این باید کامپوننت خود را از چیزی بالاتر از TListBox که در سلسله مراتب وجود دارد مشتق کنید.
بجای اینکه مجبور باشید تمام توابع یک ListBox را از یک نوع کنترل انتزاعی دوباره اختراع کنید، کتابخانه کامپوننت های بصری (VCL)، TCustomListBoxرا به شما ارائه می دهد که تمام خصوصیاتی که برای ListBox مورد نیاز است را داراست.اما تمام آنها را Publish نکرده است.
وقتی یک کامپوننت را از یک نوع انتزاعی مانند TCustomListBox مشتق می کنید ، آن خصوصیاتی را که مایلید در کامپوننتتان در دسترس باشد را Publish کرده و مابقی را به حالت Protected (محافظت شده) رها کنید. در فصل سوم چگونگی انتشار (Publishing) خصوصیات به ارث برده شده را توضیح می دهیم.
فصل 9 و 11 مثال هایی از تغییر کنترل های موجود را نشان می دهد.
ساخت کنترل های اصلی
یک کنترل استاندارد در زمان اجرا قابل مشاهده است و معمولا کاربر می تواند با آن تعامل داشته باشد. این کنترل های استاندارد از نوع شیء TWinControl پیاده سازی شده اند.زمانیکه می خواهید یک کنترل اصلی ایجاد کنید (یکی که با هیچیک از کنترل های موجود ارتباطی ندارد) ، برای شروع از TWinControl استفاده کنید.
جنبه کلیدی یک کنترل استاندارد ، هندل ویندوزی آن است که بصورت یک خصوصیت وجود دارد . این خصوصیت Handle نامیده می شود.هندل ویندوزی بدین معناست که ویندوز می تواند در میان سایر چیز های دیگر بوسیله این هندل ، کنترل را شناسایی کند و :
- کنترل می تواند فوکوس دریافت کند
- شما می توانید توابع API ویندوز را به آن پاس دهید (ویندوز برای شناسایی یک کنترل به هندل آن نیاز دارد)
اگر کنترل شما نیازی به دریافت فوکوس ندارد ، می توانید برای حفظ منابع سیستم آن را از نوع گرافیکی بسازید. بخش بعد درباره کنترل های گرافیکی توضیح می دهد.
تمام کامپوننت هایی (مثل Button ها، ListBox ها و EditBox ها غیر از TLabel که نیازی به دریافت فوکوس ندارد) که کنترل های استاندارد ویندوزی را نشان می دهند، از روی TWinControl پیاده سازی شده اند.
ساخت کنترل های گرافیکی
کنترل های گرافیکی بسیار شبیه به کنترل های Custom هستند.اما آنها در مقایسه با کنترل های ویندوزی سربار ایجاد نمی کنند. بخاطر آن است که ویندوز در مورد کنترل های گرافیکی چیزی نمیداند ! آنها هندل ویندوزی ندارند و از این رو منابع سیستم را مصرف نمی کنند. محدودیت اصلی کنترل های گرافیکی این است که نمی توانند فوکوس بگیرند.
دلفی ساخت کامپوننت های دلخواه از نوع TGraphicControl را بطور کامل پشتیبانی می کند. TGraphicControl یک نوع انتزاعی مشتق شده از TControl است. اگر چه شما می توانید کنترل ها را از TControl مشتق کنید، ولی بهتر است آنها را از TGraphicControl بگیرید. زیرا یک Canvas (کادر رسم) در اختیار شما می گذارد. همچنین میتوانید پیام های WM_PAINT را نیز مدیریت کنید. بنابر این شما باید متد Paint را نادیده بگیرید یا (override) کنید.
فصل 10 نمونه ای از ساخت یک کنترل گرافیکی را نشان می دهد.
انشعاب از کنترل های ویندوزی
سیستم عامل ویندوز مفهومی به نام window class دارد که تا حدی شبیه به مفهوم شیء یا کلاس در برنامه نویسی شیء گرا ست. یک window class مجموعه ای از اطلاعات مشترک شده بین نمونه های مختلف همان نوع پنجره یا کنترل در سیستم عامل ویندوز است.
وقتی شما یک نوع کنترل ایجاد می کنید (معمولا آن را Custom Control می نامند)، در برنامه نویسی مرسوم برای ویندوز ، یک window class جدید تعریف کرده و آنرا با ویندوز ثبت می کنید.
همچنین شما می توانید یک window class را به عنوان پایه برای یک کلاس موجود قرار دهید که آن را subclassing (انشعاب از کنترل های ویندوزی) می نامند.
در برنامه نویسی مرسوم برای ویندوز ، اگر شما بخواهید یک Custom Control بسازید، باید آن را مانند بسیاری از کنترل های ویندوز در یک فایل DLL بنویسید و یک interface برای آن ارائه کنید.
با استفاده از دلفی ، می توانید یک کامپوننت جدید "wrapper" (پوشه) پیرامون هر یک از کلاس های موجود در ویندوز بسازید. بنابراین اگر اکنون کتابخانه ای از Custom Control ها دارید که می خواهید آن را در برنامه های دلفی مورد استفاده قرار دهید ، همچون هر کامپوننت دیگری ، می توانید کامپوننت هایی با دلفی بسازید که اجازه استفاده از کنترل های موجود را به شما می دهند و کنترل های جدید را از آنها مشتق کنید.
اگر چه در این راهنما مثالی برای subclassing یک کنترل ویندوزی وجود ندارد ، می توانید تکنیک های استفاده شده در کامپوننت های یونیت StdCtls را ببینید که چگونه کنترل های استاندارد ویندوزی (مانند TButton) را نشان می دهند.
ساخت کامپوننت های غیر بصری (nonvisual)
نوع انتزاعی شیء TComponent نوع پایه برای تمام کامپوننت هاست. تنها کامپوننت هایی که از TComponent مشتق می کنید ، کامپوننت های غیر بصری (nonvisual) هستند.بیشتر کامپوننت هایی که شما می نویسید ، احتمالا انواع مختلفی از کنترل های بصری (visual) هستند.
TComponent تمام خصوصیات و متد های ضروری یک کامپوننت را برای استفاده در محیط طراح فرم تعریف می کند. بدین ترتیب هر کامپوننتی که از TComponent مشتق می کنید سازگار با محیط طراحی فرم دلفی است.
کامپوننت های غیر بصری نسبتا کمیاب هستند. شما بیشتر آنها را در برنامه های غیر بصری (دلفی اغلب برای عناصر پایگاه داده و نیز محلی برای نگهداری Dialog Box ها مانند File Dialog Box استفاده می کند) بکار خواهید برد.
فصل 13 نمونه ای از ساخت یک کامپوننت غیر بصری (nonvisual) را نشان می دهد.
علاقه مندي ها (Bookmarks)