قسمت دهم

**** دستورات در دلفی :
- در جلسه قبل یک نمونه دستور شرطی را توضیح دادیم ، در این جلسه به دستورات در دلفی می پردازیم .
به طور کلی در دلفی سه نوع دستور وجود دارد :

شرطی
تکرار
کنترل

1- دستورات شرطی :
این دستورات با توجه به برقرار بودن و یا عدم برقراری یک شرط منطقی کاری را انجام می دهد . این دستورات شامل :
* if then ... else که در جلسه قبل به طور کامل بحث شد .
* دستور case of که فرم کلی آن به صورت زیر می باشد :

case عبارت of
دستور 1 : مقادیر1 ;
دستور 2 : مقادیر2 ;
.
.
.
n دستور : n مقادیر ;
else
دستور
end ;

* این دستور عبارت مورد نظر را چک می کند با کدامیک از مقادیر 1 تا n برابری دارد و با توجه به آن دستور مورد نظر را انجام می دهد در غیر اینصورت دستور قسمت else‌ را انجام می دهد .
* این دستور در مواقعی که بخواهیم با توجه به مقدار یک عبارت تنها یک عمل انجام شود به کار می رود و بهترین جایگزین برای if های تودرتو می باشد .
** نکات :
1- دستور case می تواند بودن قسمت else ‌نیز باشد که در اینصورت شکل کلی به صورت زیر می باشد :

case عبارت of
دستور 1 : مقادیر1 ;
دستور 2 : مقادیر2 ;
.
.
.
n دستور : n مقادیر ;
end ;

2- عبارت ارزیابی شونده باید از نوع مقادیر ترتیبی باشند به عبارت دیگر نمی توان از مقادیر اعشاری ، رشته ه‎ا و امثالی نظیر اینها استفاده کرد . مقادیر ترتیبی مورد استفاده می تواند از نوع صحیح و یا از نوع بولین باشد .
3- در صورتی که بخواهیم بیش از یک دستور در هر یک از مقادیر 1 تا n‌ اجرا شوند باید از بلوک begin و ;end استفاده شود .

============================
2- دستورات تکرار :
هرگاه بخواهیم عمل و یا عملیاتی به تکرار در برنامه اجرا شوند از این دستورات استفاده می کنیم .
* for do : این دستور به دو صورت به کار می رود -» افزایشی ، کاهشی .
افزایشی : فرم کلی آن به صورت زیر می باشد :

for مقدار اولیه =: شمارنده to مقدار نهایی do
دستور ;

== این دستور با توجه به مقدار اولیه شمارنده و مقدار نهایی شمارنده دستورات را انجام می دهد . در هر بار اجرای حلقه یک واحد به شمارنده اضافه می شود و سپس برای اجرای بعدی چک می شود که آیا از مقدار نهایی کوچکتر مساوی هست یا خیر . در صورتی که مقدار شمارنده از مقدار نهایی بیشتر شود اجرای حلقه خاتمه پیدا می کند .
*** نکات :
1- نوع شمارنده باید از نوع صحیح باشد .
2- مقدار اولیه باسد از مقدار نهایی کوچکتر یا مساوی باشد در غیر اینصورت حلقه تکرار نمی شود .
3- باید توجه داشت که مقدار شمارنده نباید در بدنه حلقه تغییر یابد .
4- در صورتی که مقادیر اولیه و نهایی با یک متغیر مشخص می شود می توان آنها را در بدنه حلقه تغییر داد برای اینکه فقط مقادیرفقط یکبار ارزیابی می شوند .
5- پس از خروج از حلقه مقدار شمارنده همان مقدار نهایی می باشد .
6- در صورتی که بخواهیم بیش از یک دستور اجرا شود از بلوک ;begin ... end استفاده می کنیم .

کاهشی : فرم کلی آن به صورت زیر می باشد :

for مقدار اولیه =: شمارنده downto مقدار نهایی do
دستور ;

== این دستور در هر بار اجرا یک واحد از شمارنده کم می کند و سپس ارزیابی می کند که آیا از مقدار نهایی بزرگتر یا مساوی هست یا خیر .
نکته :
مقدار اولیه شمارنده باید از مقدار نهایی بزرگتر یا مساوی باشد در غیر اینصورت حلقه تکرار نمی شود .

For تودرتو : در این دستور از دو یا چند حلقه for‌ به صورت تودرتو استفاده می شود :
مثال :

for i := 1 to 10 do
begin
for j := 1 to 10 do
begin
.
.
end ;
.
.
end ;

*در این مثال از دو حلقه به صورت تودرتو استفاده شده است که نحوه اجرای آن به این صورت می باشد که در هر بار اجرای حلقه بیرونی حلقه داخلی یکبار به طور کامل اجرا می شود .
*شمارنده حلقه ها نباید همنام باشند .
*توجه داشته باشید که اگر تعداد حلقه ها بیش از 2 باشد حلقه بیرونی تا اجرای کامل اولین حلقه داخلی منتظر می ماند .
مثال :
فرض کنید حلقه های ما به صورت زیر باشند :

1. for i := 1 to 3 do
2. for j := 1 to 3 do
3. for m := 1 to 3 do
دستور ;

== برای اینکه حلقه شماره 1 یکبار اجرا شود باید حلقه شماره 2 یکبار به طور کامل اجرا شود و این در صورتی است که در هر بار اجرای حلقه 2 حلقه 3 یکبار به طور کامل اجرا شود . در اینصورت اجرای دستور به تعداد 3×3×3 می باشد .

حلقه تکرار while : فرم کلی آن به صورت زیر می باشد :

while شرط do
begin
.
.
end ;

== در این دستور ابتدا شرط بررسی می شود و در صورت صحّت شرط بدنه حلقه اجرا می شود .
نکات :
* اجرای حلقه while‌ تا موقعی انجام می شود که شرط حلقه برقرار باشد .
* باید توجه داشت که در داخل بدنه حلقه شرط نقض شود در غیر اینصورت حلقه بینهایت اجرا می شود .
* از این دستور در مواقعی استفاده می کنیم که تعداد دفعات تکرار دستورات برای ما مشخص نباشد و یا بخواهیم دستورات با توجه به شرطی خاص انجام شوند .

حلقه تکرار repeat : فرم کلی آن به صورت زیر می باشد :

repeat
دستورات
until شرط ;

== هنگامی که کنترل اجرای برنامه به repeat‌ می رسد دستورات یکبار به طور کامل اجرا می شوند و با رسیدن به until‌ شرط تست می شود و در صورت نادرستی شرط اجرای دستورات تکرار می شود .
نکات :
* در این دستور ابتدا دستورات یکبار به طور کامل اجرا می شوند و سپس شرط حلقه بررسی می شود .
* تکرار حلقه در صورتی است که شرط بعد از until ارزش نادرستی داشته باشد .
* در این حلقه برای دستورات بیش از یکی نیاز به بلوک ; begin ... end نمی باشد .

3- دستورات کنترلی :
این دستورات برای مواقعی که بخواهیم کنترل اجرای برنامه را به جایی دیگر از برنامه و یا اجرای برنامه را متوقف کنیم مورد استفاده قرار می گیرد .
Break : کاربرد این دستور در حلقه هاست در صورتی که بخواهیم به ادامه اجرای دستورات حلقه خاتمه دهیم .
Continue : این دستور در حلقه ها موجب می شود که کنترل اجرای برنامه در هر جای حلقه به انتهای حلقه منتقل شود ، به عبارت دیگر از اجرای دستورات بعدی حلقه صرف نظر کرده و کنترل برنامه به تکرار بعد منتقل می شود .
exit : این دستور در توابع و یا رویدادها موجب می شود که کنترل برنامه از تابع خارج شود . (موجب خروج از توابع و یا رویدادها می شود)

قسمت نهم

عنصر TButton :
این عنصر یک کلید فرمان بر روی فرم ایجاد می کند که با کلیک کردن بر روی آن کد مربوط به رویداد OnClick آن اجرا می شود .

برخی خواص ==>
Cancel : این خاصیت تعیین می کند ، در صورتی که کاربر کلید ESC را فشار دهد آیا رویدادی رخ دهد یا خیر . در صورتی که مقدار آن True تنظیم شود با فشار دادن کلید ESC رویداد OnClick مربوط به عنصر اجرا می شود .
Caption : متن داخل عنصر را مشخص می کند .
Default : از این خاصیت برای مشخص کردن یک دکمه پیش فرض استفاده می شود . در صورتی که مقدار آن بر روی True تنظیم شود در صورتی که کاربر کلید Enter را فشار دهد کد مربوط به رویداد OnClick عنصر مربوطه اجرا می شود .
ModalResult : این خاصیت برای مواقعی به کار می رود که بخواهیم با ایجاد یک جعبه پیغام از کاربر برای انجام کاری خاص تأیید بگیریم . این خاصیت مشخص می کند که موقعی که کاربر این دکمه را کلیک کرد چه مقدار را برگرداند . [به عنوان مثال اگر مقدار این خاصیت بر روی mrOK تنظیم شود ، وقتی کاربر این دکمه را کلیک کرد مقدار بازگشتی آن مشخص می کند که کاربر موافق با انجام عملیات مورد نظر است]

** مثالی برای استفاده از عنصر TButton و خاصیت ModalResult **
در این مثال طرز ایجاد یک جعبه پیغام را آموزش می دهیم .
ابتدا یک پروژه جدید ایجاد کنید و یک عنصر TLabel بر روی فرم قرار دهید .
=> در رویداد OnCreate فرم کدهای زیر وارد نمائید :

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Caption := 'This is my program' ;
Form1.Width := 300 ;
Form1.Height := 200 ;
Form1.BorderIcons := [biMinimize,biSystemMenu] ;
Form1.Position := poDesktopCenter ;
Label1.Left := Form1.Width - 240 ;
Label1.Top := Form1.Height - 125 ;
Label1.Caption := 'For Exit Press Close SystemMenu Button.' ;
end;

توضیحات==>
این کدها تنظیمات اولیه را انجام می دهد . 5 خط اول تنظیماتی برای فرم می باشد که مقادیر خاصیت‎هایCaption , Width Height و نمایش دکمه های سیستمی و مکان فرم را در صفحه نمایش تنظیم می کند . سه خط بعد تنظیماتی در مورد عنصر TLabel انجام می دهد .[هدف اصلی این کدها در واقع یادگیری تنظیم خاصیت‎ها با استفاده از کد برنامه می باشد و چگونگی مقدار گیری هر خاصیت در کد برنامه .]

=> کدهای زیر را در رویداد OnCloseQuery فرم وارد کنید :

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Form2.ShowModal = mrYes then
Application.Terminate
else
CanClose := False ;
end;

توضیحات==>
این دستورات Form2 را با استفاده از متد ShowModal به صورت مقید نشان می دهد و چک می کند که مقدار ModalResult بازگشتی فرم که توسط دکمه‎های موجود بر روی فرم مقدار گرفته برابر mrYes (یعنی دکمه Yes کلیک شده است) است یا خیر . در صورت برابری به اجرای برنامه خاتمه می دهد .
نکات :
1- استفاده از دستور Application.Terminate به اجرای برنامه خاتمه می دهد .
2- رویداد OnCloseQuery دارای پارامتر CanClose می باشد که از نوع بولیین می باشد . این پارامتر یک مقدار بازگشتی به برنامه است که مشخص می کند آیا برنامه بسته شود (‏True) یا خیر (False) . در صورتی که در کد مربوط به رویداد ، مقدار این پارامتر برابر با False قرار گیرد از بستن فرم جلوگیری می شود .

=> ایجاد Form2 :
*برای ایجاد فرم از منوی File گزینه New سپس گزینه Form را انتخاب کنید تا فرم جدیدی ایجاد شود .
خواص فرم را به صورت زیر تنظیم کنید :

Caption = 'Message'
BorderIcons = []
BorderStyle = bsDialog
Height = 118 ;
Position = poMainFormCenter
Width = 270

یک برچسب در وسط فرم قرار دهید و خاصیت Caption آن را با مقدار '? Are you sure to want exit program' تنظیم کنید .
یک دکمه بر روی فرم قرار دهید و خواص آن را به صورت زیر تنظیم کنید :

Caption = 'Yes'
Height = 25
ModalResult = mrOk
Left = 40
Top = 56
Width = 65

دکمه دیگری ایجاد کنید و خواص آن را به صورت زیر تنظیم کنید :

Caption = 'No'
Height = 25
ModalResult = mrNo
Left = 152
Top = 56
Width = 65

=> توجه :
برای اینکه بتوان Form2 را از درون Form1 فراخوانی کرد باید Form2 را به Form1 پیوند دهیم برای این کار Form1 را فعال کرده سپس از منوی File گزینه ...Use Unit را انتخاب کرده و از لیست مربوطه Unit2 را انتخاب کنید تا Form2 به Form1 پیوند داده شود . حال برنامه را اجرا کرده و سپس دکمه Close فرم را کلیک کنید .
=== امیدوارم که این مثال برای شما مفید واقع شود ===

منبع : آموزشگاه کاشانه

قسمت هشتم

عنصر TMemo‌ :
با استفاده از این عنصر می توان میتوان چند خطی را وارد و یا ویرایش کرد .
* برای عنصر TMemo محدودیتی برای تعداد خطوط نمی باشد و تعداد آن به ظرفیت دیسک سخت بستگی دارد .

خواص ==>
Lines : این خاصیت که بیشتر در موقع طراحی مورد استفاده قرار می گیرد برای کنترل محتویات و یا وارد کردن متن استفاده کرد .
ScrollBars : این خاصیت برای نمایش نوارهای پیمایش عمودی و افقی در عنصر TMemo به کار می رود .
WantReturns : با استفاده از این خاصیت می توان مشخص کرد که کاربر برای جداکردن خطوط از کلید Enter باید استفاده کند یا از کلیدهای Ctrl+Enter . [اگر مقدار آن True تنظیم شود برای جدا کردن خطوط از کلید Enter استفاده می شود]
WantTabs : این خاصیت مشخص می کند که کاربر با کلید Tab بین عناصر حرکت کند یا با کلید Ctrl+Tab .[در صورت True بودن با کلید Tab بین عناصر حرکت می شود]

برخی از توابع و متدهای کاربردی عنصر TMemo ==>
Clear : این متد برای پاک کردن محتویات داخل عنصر به کار می رود .
ClearSelection : از این متد برای پاک کردن محتویات انتخاب شده عنصر استفاده می شود .
ClearUndo : آخرین مقادیری را که از عنصر پاک شده است را بازمی گرداند .
SelectAll : تمام متن موجود در عنصر را انتخاب می کند .
Undo : آخرین تغییرات اعمال شده بر روی متن موجود در عنصر را بازیابی می کند .
CanUndo : این متد مشخص می کند که آیا خاصیت Undo (برگردان) فعال باشد یا خیر . [از خاصیت نیز می توان برای فهمیدن فعال و یا غیرفعال بودن خاصیت Undo نیز استفاده کرد]
Modified : این تابع مشخص می کند که آیا محتویات عنصر تغییر یافته است و یا خیر . [از این تابع می توان در موقع ذخیره کردن محتویات عنصر برای فهمیدن اینکه آیا محتویات تغییر یافته است یا خیر استفاده کرد]
Text : تمام متن داخل عنصر را مشخص می کند .
SelLength : با استفاده از این متد می توان تعداد کاراکترهای انتخاب شده عنصر را بدست آورد .
SelStart : این خاصیت شماره اندیس اولین کاراکتر انتخاب شده از کاراکترهای انتخابی را به ما می دهد .
SelText : این تابع متن انتخاب شده درون عنصر را برای ما بر می گرداند .
GetTextLen : با استفاده از این تابع می توان تعداد کل کاراکترهای موجود در عنصر را تعیین کرد .
Hide : از این تابع برای مخفی ساختن عنصر استفاده می شود .
Show : برای ظاهر ساختن عنصر از این تابع استفاده می شود .

-- چند متد برای کپی کردن و چسبانیدن محتویات عنصر TMemo با استفاده از حافظه ClipBoard :
CopyToClipBoard : این متد متن انتخاب شده درون عنصر را داخل حافظه ClipBoard کپی می کند .
CutToClipBoard : این متد متن انتخاب شده درون عنصر را داخل حافظه ClipBoard منتقل می کند .
PastFromClipBoard : با استفاده از این متد می توان اطلاعات موجود در ClipBoard را در جایی که در آن مکان‎ نما قرار دارد ، کپی کرد .

-- چند متد برای ذخیره و بازیابی اطلاعات عنصر TMemo درون فایل :
LoadFromFile : با استفاده از این متد می توان متنی را درون عنصر قرار داد . [توجه داشته باشید از این متد برای عناصری که لیستی از رشته ‎ها را دارا هستند ، نیز به کار می رود]
SaveToFile : از این متد برای ذخیره کردن محتویات عنصر درون یک فایل متنی استفاده می شود .

== کاربرد این دو متد برای عنصر TMemo به صورت زیر می باشد :

TMemoنام عنصر.Lines.LoadFromFile('نام و مسیر فایل مورد نظر ') ;
TMemoنام عنصر.Lines.SaveToFile('نام و مسیر فایل مورد نظر ') ;