کلاس نقاشی ( Class TCanvas ) :
در این کلاس متدها و روالهای متعددی وجود دارد ( Function And Procedure ) شما با استفاده از این روالها و دستورات به راحتی می توانید به طراحی و ترسیم بپردازید . این کلاس که معمولا در بخش گرافیک کامپیوتری و ترسیمات مورد استفاده قرار می گیرد امکانات متعددی را برای ایجاد ترسیمات دلخواه و حتی ایجاد کامپوننتهایی با اشکال مختلف در اختیار شما قرار می دهد . و ما در این بخش شما را با اجزای مختلف این کلاس آشنا می سازیم . که به علت فراوانی دستورات و پروسه ها این آموزش را در 3 درس ارائه می دهیم .
درس اول ***
چگونگی استفاده از TCanvas :
این کلاس که از کلاسهای درونی دلفی محسوب می شود معوملا در بعضی از کلاسهای گرافیکی مورد استفاده قرار می گیرد ولی در کل شما در مواردی مانند ترسیمات کامپوننتها و حتی در مواردی همچون آبجیکت های TLabel , TForm , TListBox , .... نیز برای انجام ترسیمات در اختیار شما قرار گرفته است .
در اینجا نوبت به چگونگی دست رسی به این کلاس می رسد :
استفاده درون اشیاء آماده :
اگر از اشیا خود دلفی و یا از کلاسهای دارای این کلاس درونی استفاده می کنید ، می توان گفت که برای دست رسی در اکتر مواقع مشخصه یا Property به نام Canvas در اختیار شما قرار دارد که شما با استفاده از این مشخصه می توانید همانند مشخصه های دیگربه زیر روال ها و متدهای این کلاس دست رسی پیدا کنید . مانند روشهای زیر :
کد:
همانطور که در بالا مشاهده می کنید با استفاده از نام یک شی ( Object ) به راحتی می توان به کلاس زیرین نقاشی آن دست پیدا کرد . البته به شرط وجود و توانایی دست رسی به آن .کد:Label1.Canvas.Refresh(); Image1.Canvas.Refresh(); ListBox1.Canvas.Refresh();
پس از دست رسی به مشخصه نقاشی ما احتیاج به دست رسی به صفت ها ، مشخصه ها و دستورات درونی مشخصه می باشیم . برای این کار کافیست تا با زدن نقطه پس از نام مشخصه Canvas به لست متدها و روالهای آن دست رسی پیدا کنید . همانند مثال بالا که علامت نقطه با رنگ قرمز مشخص شده است .
ایجاد و ساخت کلاسهای دلخواه :
برای ایجاد کلاسهای دلخواه برای دست رسی به اشیاء و محیطهای دلخواه به صورت زیر عمل می کنیم .
1- ابتدا یک متغییر از نوع کلاس TCanvas تعریف می کنیم . که این متغییر بسته به نیاز ما می تواند سراسری و یا درونی باشد . در اینجا به یک مثال توجه کنید که تا انتها در مراحل بعد نیز با همین مثال پیش می رویم :
کد:
2- پس از تعریف متغییر در اینجا نوبت به ساخت و تخصیص حافظه به متغییر می رسد . توجه کنید که اگر بدون ساخت یک متغییر قصد استفاده از آن را داشته باشید با خطای هین برنامه با پیام عدم درسترسی به محافظه بر خورد می کنید . برای این کار مجدد از کلاس TCanvas استفاد می کنیم . همانند مثالکد:Var ADesktop:TCanvas;
کد:
3- در این قسمت می بایست دسته یا دستگیره Handel متغییر را به یک کنترل نصبت بدهیم تا بتوانیم از آن کنترل استفاده کنیم . این کار معمولا با استفاده از Function به نام GetDC صورت می پذیرد . به طور مثال م قصد دست یابی به کنترل دسکتاپ Desktop را داریم تا بر روی آن طراحی انجام دهیم . با توجه به مثال بالا این چنین عمل می کنیم.کد:Var ADesktop:TCanvas; begin ADesktop := TCanvas.Create; ... End;
نکته : Handel یا HWND ها شماره های خاصه هر کنترل یا پنجره می باشند که سیستم عامل با توجه به آنان به اشیاء دست رسی پیدا می کند . به طور مثال دست گیره صفحه دسکتاپ ( 0 ) صفر و یا برای دستیابی به دستگیره Form1 از Form1.Handel استفاده می کنیم . برای راهنمایی بیشتر می توانید از راهنمای خود محیط دلفی استفاده کنید . کافیست تا کلمه را تایپ کرده و کلیدهای CTRL+F1 را فشار دهید .
کد:
حال کلاس شما آماده برای استفاده می باشد . شما می توانید با استفاده از زیر روالها و متدهای درونی متغییر تعریف شده به طراحی بپردازید .کد:... ADesktop.Handel := GetDC(0); ....
توجه به این نکته ضروریست که پس از اتمام کار با متغییر حتما فضای اختصاص یافته به متغییر را رها کنید همانند زیر .
کد:
برای دریافت اینکه چگونه می توانید عملیات ترسیمی را انجام دهید می بایست تا ارسال بعد منتظر بمانید یا اینکه با استفاده از راهنمای مشخصه های خود دلفی با استفاده از کنجاوی خودتان به انجام این کار بپردازید .کد:.... ADesktop.free; End
تا ارسال بعد منتظر بمانید .
بالا |+| نوشته شده توسط محمود آزادی در جمعه شانزدهم تیر 1385 | موضوع: آموزش دلفی و برنامه نویسی
==============================================
منبع:
Persianblog.com - persian business Resources and Information.This website is for sale!
======================
هندل؟!
بورلند دلفي - كه آخرين نگارش موجود آن در بازار دلفي 7 است - علاوه بر دستوراتي كه براي كنترل محيط برنامه دارد، براي كنترل اكثر اشياي ويندوز (Windows) نيز امكانات زيادي را در اختيار برنامه نويس قرار مي دهد. از اين ميان امكان دستكاري (Handling) اجزاي برنامه هاي مختلف را مورد مطالعه قرار مي دهيم.
بطوريكه مي دانيد، هريك از اجزايي كه در پنجره هاي مختلف ويندوز مشاهده ميشود و يا حتي آنهايي كه قابل مشاهد نيست، با اعداد صحيح بزرگتر از صفر (Cardinal) و متمايز از هم شماره گذاري مي شوند. به اين اعداد اصطلاحاً هندل (Handle) گفته مي شود. اشيايي مانند Textbox,lable,button,... هركدام هندلي منحصربفرد دارند. اجزا (components) بكار رفته پروژة دلفي شما نيز اگر از فرزندان TWinControl باشد، داراي هندل هستند. در برنامه هاي مختلف مي توان با استفاده ازش هندل يك شئ (object) به داده هاي مربوط به شئ دسترسي يافته و حتي در اغلب موارد مي توان مشخصات مربوط به اشياء را تغيير داد. در مثالي كه خواهد آمد، با استفاده از هندل Desktop ، يك تايمر، گرافيك يا متن دلخواه خود را بر روي آن خواهيم نوشت.
اولين سؤالي كه پيش مي آيد اين است كه هندل محتويات Desktop را چگونه بايد يافت؟! جواب اين سؤال تابع Get Device Context زير است:
کد:
سپس با اختصاص اين هندل به يك Canvas مي توانيم مانند ساير ترسيمهايي كه در دلفي مي توان انجام داد، بر روي Desktop نيز بنويسيم.کد:Handle:=GetDC(Hwnd_Desktop);
کد:
پس از اينكه با نحوة يافتن هندل آشنا شديم، به بررسي خواص (properties) و روالهايي (Methods) مي پردازيم كه در كلاس TCanvas براي اينكار مهيا است.کد:CustomCanvas.Handle:=Handle;
Canvas وسيله ايست كه توسط آن مي توان در ظاهر اجزاي ويژوال تغييراتي ايجاد نمود. در زير برخي خواص و روالهاي مربوط به Canvas آورده شده است:
کد:
Properties:
کد:Brush مشخصات مربوط به مساحتها Pen مشخصات قلم ترسيم Handle هندل Pixels رنگ يك پيكسل خاص از تصوير Font خصوصيات قلم متنکد:
Methods:
حال كه بخشهاي مهم برنامه را شناختيم، به سراغ خود برنامه مي رويم.کد:Arc ترسيم كمان CopyRect كپي قسمتي از تصويربه تصويري ديگر Creat ايجاد Draw رسم يك گرافيك Ellipse رسم بيضي و دايره FillRect رنگ كردن يك مستطيل FloodFill رنگ كردن داخل يك شكل بسته LineTo رسم خط از نقطة جاري MoveTo تغيير نقطة جاري Pie رسم قسمتي از بيضي Polygon رسم چندضلعي Rectangle رسم مستطيل RoundRect رسم مستطيل با گوشه هاي دايروي TextOut نوشتن متن
برنامه اي براي نوشتن متن روي Desktop
يك برنامه جديد را در دلفي ايجاد كنيد. با دوبل كليك كردن فرم، رويداد (event) مربوط به زمان بار شدن فرم را ظاهر كنيد:
کد:
كدها را به طرف بالا اسكرول كرده و در قسمت Var و قبل از implementation متغير را معرفي كنيد:کد:Procedure TForm1.FormCreate(Sender:TObject); Begin End;
کد:
سطرهاي زير را براي ايجاد Canvas و اختصاص هندل بين سطرهاي شروع و پايان پروسيجر FormCreate وارد كنيد:کد:var Form1: TForm1; DesktopCanvas:TCanvas; implementation
کد:
اين سطر متغير را از نوع TCanvas ايجاد مي كند.کد:DesktopCanvas:=TCanvas.Create;
کد:
در اين سطر نيز هندل مختص Desktop را به ترسيم خود نسبت مي دهيم.کد:DesktopCanvas.Handle:=GetDC(Hwnd_Desktop);
حال يك Button به فرم خود اضافه كنيد. آنرا دوبل كليك كرده و كدهاي زير را وارد كنيد:
کد:
زمينة (Background) سطح متني كه در سطر بعد مي نويسيم را رنگي نمي كند. اين سطر را اگر حذف كنيد، زمينة متن پاك خواهد شد.کد:DesktopCanvas.Brush.Style:=bsClear;
کد:
اين سطر موجب مي شود تا به هنگام فشار دادن كليد در برنامه، عبارت This is your text on the Desktop! در گوشة بالا سمت چپ بر روي Desktop شما نوشته شود، البته با قلم و رنگ پيش فرض.کد:DesktopCanvas.TextOut(10,10,'This is your text on the Desktop!');
تمام شد! برنامه را مي توانيد Compile و يا اجرا (Run) كنيد. مي توانيد كارهاي ديگري را نيز انجام دهيد، كارهايي مانند آنچه در نرم افزارهاي Desktop Toys يا نرم افزار نگار انجام شده است.
مثلا براي نمايش ساعت جاري مي توانيد يك Timer از صفحة System به برنامة خود اضافه كنيد. تايمر را دوبل كليك كرده و كدهاي زير را براي رويداد ontimer آن اضافه كنيد:
کد:
برنامه را بار ديگر اجرا كنيد. حالا شما يك ساعت در گوشه سمت چپ داريد. مي توانيد بيشتر وقت شناس باشيد!کد:DesktopCanvas.TextOut(10,40,TimeToStr(Time));
اگر نگران خط خطي شدن Desktop خود شده ايد، اگر برنامه اي در آن گوشه اجرا شود همة متنها پاك خواهد شد.
در پايان يكبار ديگر تمام متن فايل ذكر مي شود تا اگر در درج كدها اشتباهي شده باشد، براحتي اصلاح شود. در پايان لازم به ذكر است كه اين دستورات تقريبا در تمامي نگارشهاي دلفي موجود است و در نگارشهاي 3 و 6 و7 (client/server-proffesional-personal) توسط نگارنده آزمايش شده است.
کد:
کد:unit dsktop_handling; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; DesktopCanvas:Tcanvas; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin DesktopCanvas:=TCanvas.Create; DesktopCanvas.Handle:=GetDC(HWND_DESKTOP); end; procedure TForm1.Button1Click(Sender: TObject); begin DesktopCanvas.Brush.Style:=bsClear; DesktopCanvas.TextOut(10,10,'This is a text'); end; procedure TForm1.Timer1Timer(Sender: TObject); begin DesktopCanvas.TextOut(10,40,TimeToStr(Time)); end; end.




نمي كنيد
پاسخ با نقل قول
