آموزش محیط گرافیکی در توربو پاسکال 7
برای برنامه نویسی در محیط گرافیکی نیاز به مقدماتی برای ورود به محیط گرافیک است . اولین خط هر برنامه گرافیکی بعد از دستور Program ، فرمان زیر است :
Uses graph ;
با استفاده از دستور uses برنامه شما می تواند از پیمانه ها و ثوابت توربو پاسکال استفاده کند . این ثوابت و پیمانه ها در فایلی که یک unit نامیده می شود جای می گیرند . کدی که در حالت گرافیکی توسط کامپیوتر تولید می شود ، به نوع کامپیوتر بستگی دارد . بنابراین نوع سخت افزار گرافیکی که در اختیار سیستم است باید به توربو پاسکال اعلام شود . برای این کار از دو متغیر Driver و Mode بصورت زیر استفاده می شود :
Var
Driver , Mode : Integer ;
محتوای این دو متغیر نوع سخت افزارهای گرافیکی سیستم را مشخص می کند . برای تعیین حالت گرافیکی از دستور زیر استفاده می شود :
InitGraph (Driver, Mode, ‘…….’) ;
رویه InitGraph سیستم گرافیکی شما را بررسی کرده و سپس در متغیرهای Driver و Mode مقادیر مناسب را قرار می دهد . پارامتر رشته ای ‘……’ شاخه ای را مشخص می کند که در آن نرم افزار کنترل سیستم گرافیکی شما وجود دارد . رشته ای که بدون کاراکتر است ‘ ‘ به این معناست که این نرم افزار در شاخه جاری قرار دارد .
این نرم افزار همواره در شاخه BGI قرار دارد و معمولا" در محلی است که برنامه توربو پاسکال نصب شده است . بنابراین باید آدرس شاخه BGI را بجای این رشته بنویسیم . برای انعطاف پذیر شدن برنامه و قابلیت اجرای آن روی سیستم های مختلف معمولا" یک نسخه از شاخه BGI را در شاخه ای که برنامه در آن قرار دارد ، کپی می کنیم .
صفحه نمایشی که مانند یک صفحه مختصات است :
در برنامه نویسی گرافیکی موقعیت هر خط یا هر شکلی را که روی صفحه نمایش رسم می کنید ، باید کنترل کنید . صفحه نمایش را در محیط گرافیکی بصورت مختصات X-Y تعدادی نقطه می توان در نظر گرفت . در اکثر نمایشگرها ابعاد متداول عبارتند از : 200×320 ، 350×640 ، 480×640 . که معمولا" تعداد نقاط در محور X ها بیشتر است .
توابع GetMaxX و GetMaxY در توربو پاسکال، به ترتیب حداکثر تعداد نقاط در Xها و Yها را برمی گردانند . بنابراین برای بدست آوردن ابعاد واقعی نمایشگر خود می توانید از این توابع بصورت زیر استفاده کنید :
MaxX := GetMaxX ; MaxY := GetMaxY ;
مختصات گوشه های صفحه نمایش به صورت زیر است.
برای برگرداندن برنامه به حالت متنی از دستور زیراستفاده می کنیم .
CloseGraph ;
رنگ زمینه و متن :
بطور پیش فرض برای رنگ های زمینه و متن ، به ترتیب از سیاه و سفید استفاده می شود . دستورات زیر امکان تغییر رنگ زمینه و متن را فراهم می کنند .
SetBkColor (….) ; تعیین رنگ زمینه
SetColor (….) ; تعیین رنگ متن
برای انتخاب رنگها از ثوابت رنگی یا معادل عددی رنگها طبق جدول زیر استفاده می شود :
ثابت
مقدار
ثابت
مقدار
Black
0
DarkGray
8
Blue
1
LightBlue
9
Green
2
LightGreen
10
Cyan
3
LightCyan
11
Red
4
LightRed
12
Magenta
5
LightMagenta
13
Brown
6
Yellow
14
LightGray
7
White
15
خلاصه ای از توابع و رویه های گرافیکی :
· Line (X1, Y1, X2, Y2) ;
بین نقاط (X1,Y1) و (X2,Y2) خطی رسم می شود .
· Rectangle (X1, Y1, X2, Y2) ;
مستطیلی که قطر آن بین نقاط (X1,Y1) و (X2,Y2) است می کشد .
· Circle (X, Y, R) ;
دایره به مرکز (X,Y) و شعاع R رسم می کند .
· Arc (X, Y, Angle1, Angle2, R) ;
کمانی از زاویه Angle1 تا Angle2 و به مرکز (X,Y) و شعاع R رسم می کند .
· SetFillStyle (FilPat, FilCol ) ;
برای رنگ آمیزی قسمتهایی از صفحه نمایش با رنگهای مختلف از این رویه استفاده می شود تا نوع رنگ و نحوه رنگ آمیزی مشخص شود .
الگوهای رنگ آمیزی و رنگها با توجه به جدول زیر انتخاب می شوند ، در این رویه هم از نام ثابت و هم از معادل عددی می توانید استفاده کنید .
تا زمانیکه بار دیگر این رویه را فراخوانی نکنید ، این حالت فعال خواهد بود .
ثابت
معادل عددی
الگوی رنگ آمیزی
ثابت
معادل عددی
الگوی رنگ آمیزی
EmptyFill2
0
رنگ زمینه
LtBkSlashFill
6
\ \ \ \ (بافاصله)
SolidFill
1
بصورت توپر
HatchFill
7
هاشور
LineFill
2
- - - -
XhatchFill
8
متقاطع
ItSlashFill
3
/ / / / (بافاصله)
InterLeaveFill
9
خط در میان
SlashFill
4
//// (بدون فاصله)
WidDotFill
10
نفطه ای (بافاصله)
BslashFill
5
\\\\ (بدون فاصله)
CloseDotFill
11
نقطه ای(بدون فاصله)
FloodFill (X, Y, Border) ;
محدوده ای را که حاوی نقطه (X,Y) است و با خطوطی به رنگ Border محصور شده است ، با الگوی جاری رنگ آمیزی می کند .
· Bar (X1, Y1, X2, Y2) ;
مستطیلی توپر می کشد که قطر آن بین نقاط (X1,Y1) و (X2,Y2) است .
· PieSlice (X, Y, Angle1, Angle2, R) ;
یک برش دایره توپر می کشد که از زاویه Angle1 شروع شده و به Angle2 ختم می شود و دارای مرکز (X,Y) و شعاع R می باشد .
· OutTextXY (X, Y, TextString) ;
در نقطه (X,Y) کاراکترهای رشته TextString را چاپ می کند .
v برنامه زیر یک نمونه از برنامه نویسی ساده گرافیکی را نشان می دهد .
uses graph;
procedure HappyFace(MidX,MidY:integer);
var
HeadRadius:integer;
begin
HeadRadius:=GetMaxY div 4;
Circle (MidX, MidY, HeadRadius);
end;
var
Driver,Mode,MidX,MidY:integer;
begin
InitGraph (Driver, Mode, ' ');
MidX:=GetMaxX div 2;
MidY:=GetMaxY div 2;
HappyFace(MidX,MidY);
OutTextXY(230, 400, '!!! Press Any Key !!!');
readln;
CloseGraph;
end.
نقاشی متحرک گرافیکی :
اگر یک رویه گرافیکی دارای پارامتر باشد ، می توان موقعیت یک شکل را تغییر داد و یا آن شکل را در چند نقطه از صفحه نمایش رسم کرد . علاوه بر این می توان یک شکل را متحرک ساخت . این کار به این صورت انجام می شود که ابتدا شکلی در نقطه خاصی از صفحه نمایش رسم می شود ، سپس از آن نقطه پاک شده و در محل دیگری رسم می شود . با تکرار این عمل شکل مورد نظر متحرک به نظر می رسد .
برای تعیین سرعت حرکت از یک تأخیر زمانی بین دفعات رسم شکل استفاده می کنیم . برای ایجاد این تأخیر می توان از رویه Delay (DelayTime) استفاده کرد . عدد DelayTime بر اساس میلی ثانیه بیان می شود و البته برای استفاده از این تابع باید واحد Crt را با فرمان uses Crt در ابتدای برنامه فراخوانی کنید .
v در مثال بعد با استفاده از روش گفته شده ، شکل رسم شده در مثال قبل را متحرک می کنیم.
var
Driver,Mode,MidX,MidY:integer;
begin
InitGraph (Driver, Mode, ' ');
MidX:=0;
MidY:=0;
while ((MidX
begin
HappyFace(MidX,MidY);
MidX:=MidX+50;
MidY:=MidY+50;
Delay(50);
SetFillStyle(3,4);
Bar(0,0,639,479);
end;
OutTextXY(230, 400, '!!! Press Any Key !!!');
readln;
CloseGraph;
end.
دستور کار (1 )
در محیط گرافیک توربو پاسکال برنامه ای بنویسید که اشکال زیر را در خروجی رسم کند . سعی کنید توابع را طوری بنویسید که با دریافت مختصات یک نقطه از شکل مثلا" مرکز آن ، تمام شکل را رسم کند . (مانند مثال مطرح شده در جزوه) سعی کنید تمام مختصات لازم برای رسم اشکال را با فرمول بدست آورید و تا حد امکان از استفاده مستقیم از اعداد خودداری کنید .