آموزش گام به گام دلفی [HR][/HR] قسمت اول مقدمه: دلفي زباني شي گرا، رويداد گرا، ويژوال و داراي محيط RAD مي باشد. دلفي علاوه بر ساختن شالوده مستحكم Object Pascal ويژگي توليد ويژوال محصولاتي چون ويژوال بيسيك را نيز ارائه نموده و مزاياي توليد حقيقي را نيز براي برنامه ساز ارائه مي كند. قابليت هاي بيشمار دلفي در زمينه هاي مختلف همچون ارتباط آسان و قوي با انواع بانكهاي اطلاعاتي قدرتمند و ارتباط آسان و سازگاري بي مانند با اينترنت و داشتن ابزار قوي مالتيمديا برنامه نويس را قادر مي سازد تا روياهاي خود را به واقعيت تبديل كند. امروزه برنامه نويسان با داشتن ابزار قدرتمند RAD ، Rapid Application Development همچون دلفي قادرند در كوتاه ترين زمان به بهترين شكل نرم افزارهاي تجاري را تهيه كنند. حال براي شروع به چه چيزهايي احتياج داريم: ابتدا بايد يكي از جديد ترين نسخه هاي دلفي را روي سيستم نصب كنيم. در قدم بعد سوالي كه مطرح مي شود اين است كه آيا تا بحال يك زبان ويژوال را تجربه كرده ايد يا نه؟! در صورتي كه تابحال با يك زبان ويژوال كار نكرده ايد مطلب بعد مي تواند تا حدودي شما را با اين مفهوم آشنا سازد ولي براي شناخت بهتر كتابهايي كه در اين زمينه وجود دارد مي تواند به شما كمك كند. توجه! حرفه اي ها نخوانند سه تا از ويژگي هاي بارز زبانهايي مانند دلفي شي گرايي، رويداد گرايي و ويژوال بودن آنها مي باشد. شي گرايي چيست؟ برنامه نويسي سنتي ابتدا بدين صورت بود كه برنامه نويسان برنامه هاي خود را طوري مي نوشتند كه به طور متوالي از ابتدا تا انتها در يك مسير مستقيم اجرا شودسپس با تابعي شدن برنامه ها برنامه نويسي آسان تر شد و امروز با ظهور مفهوم شي گرايي دنياي واقعي برنامه نويسي همانند دنياي واقعي ما بر مبناي اشيا شكل گرفته است. اشيا داراي دو مفهوم Method ، Properties مي باشند. براي تشريح اين دو مفهوم يك شي در دنياي واقعي را در نظر مي گيريم. براي مثال ماشين را در نظر بگيريد، ماشين ابزاري براي كنترل قسمتهاي مختلف خود دارد مانند كليد چراغ جلو يا كليد برف پاك كن چنين ابزاري شما را ياري مي كنند بدون اينكه از نكات فني و طرز ساخت اينكونه وسايل با خبر باشيد از آنها استفاده كنيد در واقع مشخصات فني هر برف پاك كن در هر ماشين متفاوت مي باشد ولي طرز براه انداختن همه آنها همانند هم است اين ويژگي همانند مفهوم متد در اشيا مي باشد. همچنين ماشين داراي خصوصياتي است كه نشان دهنده وضعيت آن در يك لحظه زماني مي باشد مانند سرعت اين ويژگي قابل تغيير در ماشين همانند مفهوم Property در اشيا مي باشد. رويداد گرايي چيست؟ رويدا گراي به اين صورت است كه در نرم افزارهاي جديد مانند Word Pad نرم افزار در حالت عادي در انتظار به سر مي برد تا اينكه اتفاقي كه مربوط به آن باشد رخ دهد در صورت رخداد يك اتفاق سيستم عامل اين رويداد را به برنامه درحال اجرا منتقل كرده و برنامه در حال اجرا به آن عكس العمل نشان مي دهد. به همين دليل در اين گونه زبانها برنامه نويس بايد براي اين رويداد برنامه بنويسد. ويژوال چيست؟ اتفاق شي گرا شدن برنامه ها برنامه نويسي را به كارهاي روزمره نزديك كرد اما هنوز اين اشيا واقعي به نظر نمي رسيدند و براي رفع اين مشكل برنامه نويسي Visual يا بصري مرسوم شد كه در اينگونه زبانها برنامه نويس اشياي مورد استفاده را مي توانست ببيند و بدين صورت اشيا ملموس تر بودند اكنون VCL هاي دلفي كه به صورت ويژوال طراحي شده اند به شما اين قدرت را مي دهند كه مثلاً يك دكمه را برداشته و روي فرم خود بگذاريد.
پاسخ : آموزش گام به گام دلفی قسمت دوم: كاربرد علامت تساوي در دلفي: در دلفي براي تخصيص عملگر =: استفاده مي شود. کد: y:=mx+b همچنين براي بررسي تساوي از = استفاده مي شود. کد: If A=B then Writeln ('A and B are equal') شكل ديگر استفاده از علامت تساوي در معرفي ثابت ها است. کد: Const TaxRate = 0.0075 ثابت ها: براي مقادير خاص كه در برنامه زياد استفاده مي شود مي توان از ثابت ها استفاده كرد كه مثال آن در بالا آمده. متغييرها: ازاجزاء ثابت همه زبان ها كه انواع آن عبارتند از: نوع صحيح: نوع حقيقي: نوع ارزي: اين نوع متغيير ها براي نگهداري مقادير پولي مناسب است و با اجزاي ويژوال مانند Currency Field مورد استفاده قرار مي گيرد. باانواع دادههايي كه در بانك هاي اطلاعاتي براي مقادير پولي بكار مي رود سازگار است.
پاسخ : آموزش گام به گام دلفی قسمت سوم: قبل از شروع مطلب اين نكته را متذكر مي شوم كه اين سري مقالات براي افرادي كه آشنايي اوليه با برنامه نويسي و ترجيحاً برنامه نويسي تحت ويندوز دارند مفيد تر مي بلشد چون آموزش جزئيات بيشتر در حوصله اين سري مقالات نمي گنجد. براي نوشتن كدهاي آزمايشي اين بخش كارهاي زير را انجام بدهيد: 1. دلفي را اجرا كنيد. 2. اگر پروژه جديدي به طور خودكار باز نشد، File|New Project را از منوي دلفي انتخاب كنيد. 3. Project|Options|Linker را انتخاب كنيد، كادر مكالمه Generate Consol Application را انتخاب كنيد، و سپس OK را به وسيله ماوس انتخاب كنيد. اين كار براي دلفي مشخص مي كند برنامه اي كه ايجاد مي كنيد، يك برنامه پنجره دار نيست، بلكه برنامه اي از نوع «پنجرهDos » است. 4. View|Project Source را انتخاب كنيد، متن اصلي پروژه در پنجره ويراستار قابل رويت خواهد بود. اگر چه اين متن عموماً ويرايش نمي شود، اما در اين حالت بايد اين متن را با متن خودتان جايگزين كنيد. اين يك روش آسان براي ايجاد يك برنامه است 5. زمانيكه برنامه را اجرا مي كنيد، حاصل آن در پنجره خودش ظاهر مي شود. براي بستن پنجره خروجي، Alt+F4 را فشار دهيد، يا x را از گوشه بالايي پنجره خروجي انتخاب كنيد. 6. نكته اي كه در اينجا وجود دارد. زماني كه متن قديمي را با متن برنامه خود جايگزين مي كنيد، پروژه را ابتدا با نام جديدي ذخيره كنيد، و يا خط Program پروژه را تغيير ندهيد. كنترل جريان برنامه: دلفي دو ساختار براي كنترل جريان برنامه دارد كه به تفصيل به آنها مي پردازيم. دستور If...Then...Else اين دستور از اساسي ترين دستورات شرطي مي با شد كه اين امكان را به برنامه نويس مي دهد كه پرسشي را مطرح كرده و بر اساس پاسخ آن كار يا عمل درخواستي را انجام دهد. مثالي در اين رابطه: کد: program IfDemo; uses Forms; var UserInput : Integer; begin Write('How old are you ? '); ReadLn(UserInput); If (UseerInput < 1) or (UserInput > 130) Then WriteLn('You are not telling the truth.') Else WriteLn('Being ', UserInput, 'yers old is great!'); WriteLn('Press Enter to Exit program'); ReadLn {To keep the window from closing until you press Enter} end {InDemo} در برنامه فوق عبارت بين If...Then در صورتي كه عدد ورودي توسط كاربر كوچكتر از 1 يا بزركتر از 130 باشد برابرTrue شده در نتيجه كد نوشته شده بين Then...Else اجرا مي شود. در غير اين صورت عبارت بعد از Else اجرا مي شود. درصورتي كه بخواهيم بيش از يك دستور را بين Then...Else و يا بعد ازElse قرار دهيم بايد از يك بلاك استفاده كنيم بلاك: مجموعه اي از دستورات كه بين Begin...End واقع مي شوند. دستور Case...of همانند دستور If...Then مي باشد ولي با اين تفاوت كه بجاي دو حالت True و False چند حالت را بررسي مي كند. براي تشريح اي ساختار به مثال زير توجه كنيد. program CaseDemo; Uses Forms; var UserIn : Char; begin Write('Type in character followed dy the Enter key: '); ReadLn(UserIn); Case UserIn of 'a' :WriteLn('That is a Small a'); 'z','Z':WriteLn('That is a small or capital z') else WriteLn('That is a character other than an a, z, or Z.') end; WriteLn('Press Enter to exit program'); ReadLn {To keep the window from closing until you press Enter} end {CaseDemo} در مثال فوق در صورتي كه مقدار بين Case...of برابر با هر يك از ثابتهاي قبل از علامت ( : ) باشد، دستور يا بلاك دستورات بعد از علامت ( : ) اجرا مي شود. همچنين، توجه به اين امر كه يك دستور end در پايان به عنوان پايان بخش دستور Case قرار مي گيرد نيز بسيار مهم است. در ضمن قسمت else نيز در اين ساختار اختياري بوده و مي تواند حذف شود. __________________
پاسخ : آموزش گام به گام دلفی راي اينكه هرچه سريع تر به مطالب كاربردي برسيم بايد كمي راجه به شي گرايي و رويداد گرايي بدانيم. البته ممكن است كمي خسته كننده باشد ولي واقعاً موثر است. * شي گرايي: در نظر بگيريد براي رانندگي مجبور بوديد از تمام نكات فني و همه اتفاقاتي كه در موتور و پيستونها اتفاق مي افتد با خبر بوديد واقعاً گيج كننده مي شد، اينطور نيست! در واقع برنامه نويسي ابتدا بدين صورت بود و فقط افراد خاصي مي توانستند اين كار را انجام دهند ولي با ظهور شي گرايي همه چيز عوض شد. حالا ببينيم يك شي دقيقاً چكار ميكند. اول اينكه يك شي طوري طراحي شده كه برنامه نويسي همانند دنياي اطراف ما بنظر برسد. يك شي همه چيزهاي مربوط را دور هم جمع ميكند مثلا توابع ، زيرروالها، متغييرها و حتي پايگاه داده مربوط همه و همه در يك جا و به صورت يك موجوديت. كار ديگر شي اين است كه جزئيات را از ديد شما پنهان مي كند به طوري كه شما بدون آن كه از ماهيت دروني آنها آگاه باشيد مي توانيد به راحتي از آنها استفاده كنيد. همانطور كه بدون آنكه از جزئيات دروني و مدارهاي يك تلوزيون باخبر باشيد با آن كار ميكنيد و اين به يكي از آرزروهاي ديرينه برنامه نويسان يعني سادگي و عدم پيچيدگي پاسخ داد. حال بياييد ببينيم يك شي چگونه اين كارها را انجام مي دهد. شي هاي يك زبان مانند دلفي همانند اشياي دنياي واقعي مثل ماشين و متورسيكلت اهرمهايي براي كنترل نياز دارند كه اين وظيفه را Method ها به عهده مي گيرند. متدها نقش زيرروالها را در زبانهاي قديمي ايفا مي كنند. شي ها براي حفظ حالت جاري از Properties استفاده ميكنند مثلاً شما با ديدن كيلومتر ماشين به سرعت آن پي مي بريد و در اشيا با خواندن يك Properties همان كار را انجام مي دهيد. در واقع Properties يا خاصيتها نقش متغييرها و به طور كلي ساختمان دادهها را در زبانهاي قديمي ايفا مي كنند البته تفاوتهايي بين يك متغيير و Properties وجود دارد كه شما به تدريج به آن پي مي بريد. حالا به مفاهيم مشكل تر شي گرايي مي رسيم. اشيا قابليتي بنام ارث بري دارند در واقع هر شي مي تواند خصوصيات خود را به فرزند خود منقل كند و يا به عكس مي تواند از والد خود خصوصياتي را به ارث ببرد. حالا سعي ميكنم با مثالي اين را تشريح كنم. فرض كنيم شما مي خواهيد شي اي ايجاد كنيد مثل قناري شما ابتدا مي توانيد شي به نام پرنده بوجود آورده و همه خصوصيات پرنده را در آن ايجاد كنيد. سپس شي بنام قناري ايجاد مي كنيد كه خصوصيات مربوط به پرندگان را مي تواند از شي پرنده به ارث ببرد و بقيه خصوصيات را براي آن مشخص كنيد و اگر بعداً خواستيد پرنده ديگري مثل گنجشك را معرفي كنيد هنوز هم مي توانيد از شي پرنده استفاده كنيد و اين يعني راحت تر شدن كد نويسي. قانون مهمي كه بايد بخاطر داشته باشيد و به سادگي از آن رد نشويد اين است كه هر شي مي تواند بجاي والد خود بكار گرفته شود چون همه خصوصيات آن را دارد ولي يك والد نمي تواند بجاي فرزند خود بكار رود اين مثل اين است كه دوست شما ، شما را به يك ميهماني دعوت كند و بگويد ميتوانيد پرنده خود را بياوريد و شما مي توانيد قناري را با خود ببريد ولي در صورتي كه مي گفت فقط مي توانيد گنجشك با خود بياوريد شما نمي توانستيد هر پرنده ديگري را با خود ببريد. اين نكته مهم در آنجا كاربرد دارد كه در صورتي كه پارامتر يك زيرروال از نوع يك شي باشد همه فرزندان آن شي مي توانند به آن زيروال ارسال شوند. براي فهم اين موضوع عجله نكنيد و فقط قانون را بياد داشته باشيد. مطلب ديگري كه راجع به شي گرايي بايد بدانيد Class و instance مي باشد . در واقع اشيا فقط يك قالب مي باشند كه نمي توانند به تنهايي مورد استفاده قرار گيرند. براي مثال وقتي شما مي گوييد قناري منظورتان قناري خاصي نيست. ولي وقتي يك قناري را با اسمي كه براي آن گذاشته ايد صدا مي زنيد يك قناري خاص را در نظر داريد. در واقع قناري به طور كلي وجود خارجي ندارد بلكه يك قناري خاص كه مثلاً اسم آن تويتي است وجود خارجي دارد در واقع Class مانند قناري و Instance مانند تويتي است و اين به معني اين است كه ما همواره ابتدا كلاسها را تعريف كرده و سپس براي استفاده يك نمونه يا Instance از آن را بوجود مي آوريم. رويداد گرايي: در زبانهاي قديمي دستورات خط به خط انجام مي شد تا برنامه به پايان برسد و اين يك روند قابل پيشبيني را ايجاد ميكرد ولي با به وجود آمدن روشهاي رويدادگرا برنامه منتظر يك اتفاق مي ماند تا عكس العمل نشان دهد. در اشياي روزمره هم همين طور است مثلاً يك ماشين حساب تازماني كه شما دكمه اي را فشار ندهيد عمل نمي كند. در اينجور زبانها بايد برنامه را طوري طراحي كنيد كه كدهايتان براي عكس العمل نشان دادن به كار كاربر نوشته شده باشد. اين خلاصه اي از شي گرايي و رويداد گرايي بود. من پيشنهاد مي كنم حتماً كتابي در اين زمينه بخوانيد واين مطالب را فقط به عنوان معرفي شي گرايي در نظر بگيريد. فكر كنم براي امروز كافي باشه بزودي مقاله بعدي هم مي رسه پس منتظر نشينيد و هرچي مي تونيد تو اين مدت ياد بگيريد و آموخته هاتون رو به ديگران منتقل كنيد. __________________
پاسخ : آموزش گام به گام دلفی براي شروع نيازهاي يك برنامه كاربردي را براي شما تشريح مي كنم. يكي از مهترين اجزاي يك برنامه حرفه اي DataBase مي باشد كه دلفي با قدرت از آن پشتيباني مي كند. دلفي از بانكهاي زيادي همچون Paradox, Access, SQL, Oracel, Fox Pro و غيره حمايت مي كند. دلفي همچنين ابزار زيادي براي استفاده از بانكهاي اطلاعاتي در اختيار ما مي گذارد. دلفي همچنين DataBase DeskTop را در اختيار ما مي گزارد تا بانكهاي اطلاعاتي را توسط آن ايجاد كرده و عمليات ورود اطلاعات را انجام دهيم. در مقالات بعدي به طور مشروح به بانك اطلاعاتي و طريقه استفاده از آن در دلفي مي پردازيم. از ديگر اجزا يك برنامه حرفه اي Instuler مناسب است كه با وجود متعلقات زيادي كه همراه يك برنامه حرفه اي بايد روي سيستم كاربر نهايي قرار گيرد اجتناب ناپذير بنظر مي رسد. تصور اينكه كاربر نهايي مجبور باشد خودش فايلهاي مورد نياز را در پوشه مناسب قرار داده و Registry را تنظيم كرده و موتور بانك اطلاعاتي مناسب را نصب كنند ActiveX ها را Register نمايند و متغيرهاي محيطي را تعريف كنند و ShortCut هاي مناسب را براي دسترسي به برنامه در Startmenu يا Desktop قرار دهد بسيار گيج كننده و غير ممكن است. دلفي اين مشكل را نيز با ارائه InstallShield Express حل كرده كه اگر فرصت شود در مقاله ديگري به تشريح قابليتهاي آن مي پردازيم. البته اين به اين معني نيست كه شما مجبوريد از اين Installer استفاده كنيد Installer هاي زيادي وجود دارند كه شما مي توانيد از آنها استفاده كنيد. جزء ديگر يك برنامه حرفه اي Interface يا رابط كاربر مي باشد و اين همان فرمهايي است كه كاربر نهايي مي بيند و از آنها براي ارتباط برقرار كردن با برنامه شما استفاده مي كند. ايجاد يك Interface مناسب مي تواند كاربران را در استفاده موثر و آسان از برنامه شما ياري دهد. استاندارد هاي زيادي در اين زمينه وجود دارد كه شما مي توانيد از آنها بهره ببريد. يكي از مباحثي كه در اين ضمينه مطرح مي شود GUI است كه در فرصت مناسب به آن مي پردازيم. اجزا ديگري نيز هستند كه در برخي از برنامه ها كاربرد پيدا مي كنند. مثلا Skin يا پوسته كه همان ظاهر برنامه مي باشد كه برنامه را با ظاهري گرافيكي مي آرايد. بعضي برنامه ها Skin هايي ايستا و بعضي داراي ظاهري پويا مي باشند. اين مبحث نيز بايد در يك مقاله جدا مورد بررسي قرار گيرد. همچنين دلفي داراي قابليتهاي بيشماري براي ايجاد يك محيط برنامه نويسي تيمي با امكان Integrated Debug و مديريت پروژه و نظارت بر چرخه زندگي يك برنامه مي باشد
پاسخ : آموزش گام به گام دلفی یک آرایه مجموعه ای از متغیر های هم نام است که در آن هر متغیر با یک شماره مشخص می شود. آرایه های با طول ثابت (Static Arrays) مثلا در برنامه ای می خواهیم معدل بیست درس را محاسبه کنیم. یک راه این است که از بیست متغیر با نام های متفاوت استفاده کنیم! اما راه بهتری نیز وجود دارد. از یک آرایه که شامل بیست متغیر است استفاده می کنیم. در متغیرهای آرایه ای، یک نام برای کل مجموعه انتخاب می کنند و هر متغیر را با یک شماره مشخص می کنند. در این مثال متغیر های آرایه با اعداد صفر تا نوزده شماره گذاری می شوند، توسط یک حلقه for می توان اعداد صفر تا نوزده را تولید کرد. به همین سادگی. برای تعریف کردن یک آرایه باید از الگوی زیر پیروی کنیم: کد: var x : array[index1, ..., indexN] of baseType; که در الگوی فوق، x نام متغیر آرایه ای، index1 شماره اولین خانه، indexN شماره آخرین خانه و baseType نوع متغیر آرایه ای می باشد.مثلا: کد: var nomre : array[0..19] of integer; دستور فوق بیست متغیر از نوع integer می سازد که اولین متغیر nomre[0] و آخرین متغیر nomre[19] می باشد. برای دسترسی یافتن به هر کدام از متغیر ها، شماره آن متغیر را داخل یک جفت کروشه در مقابل آن می نویسیم. در مثال زیر معدل بیست عدد را با استفاده از آرایه محاسبه می کنیم: procedure DoIt; کد: var nomre : array[0..19] of integer; i : integer; m : real; begin nomre[0] := 15; nomre[1] := 20; . . . nomre[19] := 19; m := 0; for i := 0 to 19 do m := m + nomre; m := m / 20; Edit1.Text := FloatToStr(m); end; می توانید در صورت نیاز، متغیر های آرایه را با شماره های دیگری شماره گذاری کنید. مثلا: کد: var x : array[12..46] of string; دستور فوق، 35 متغیر با نام x ایجاد می کند که با شماره های 12، 13، ... 46 مشخص می شوند. آرایه های دو بعدی: یک صفحه شطرنجی را در نظر بگیرید که هر خانه آن را می توان با دو عدد طول و عرض شماره گذاری کرد. به همین ترتیب می توان در دلفی نیز یک جدول دو بعدی داشت. برای در مثال زیر یک آرایه دو بعدی تعریف می شود که 10 در 50 می باشد. یعنی به تعدد یک جدول 10 در 50 متغیر دارد. کد: var s : array[1..10, 1..50] of integer; در مثال زیر یک آرایه دو بعدی 10 در 10 تعریف می کنیم و هر کدام از خانه های آرایه را با عدد مربوطه جدول ضرب پر می کنیم: کد: var jadval : array[1..10, 1..10] of integer; var i, j : integer; begin for i := 1 to 10 do for j := 1 to 10 do jadval[i, j] := i * j; for i := 1 to 10 do for j := 1 to 10 do form1.Canvas.TextOut(i*20, j*20, inttostr(jadval[i, j])); end; آرایه های دو بعدی را به صورت دیگری نیز می توان تعریف نمود، مثلا دستور زیر آرایه دو بعدی آرایه jadval در مثال بالا تعریف می کند: var jadval : array[1..10] of array[1..10] of integer; با کمی دقت می توان منطق ساده این دستور را درک کرد! چند نکته در مورد آرایه های با طول ثابت: • اگر آرایه های a و b از یک نوع باشند، دستور b := a متغیر های متناظر a را در b کپی می کند. • طول آرایه های استاتیک را نمی توان تغییر داد. • می توان خانه های آرایه را با کاراکتر نیز مشخص نمود! مثال: کد: var x : array['a'..'e'] of integer; begin x['a'] := 1; x['b'] := 2; x['c'] := x['a'] + x['b']; end; آرایه های با طوی متغیر (Dynamic Arrays) آرایه های دینامیک اندازه ثابتی ندارند و در طول اجرای برنامه می توان اندازه آن ها را به میزان مورد نیاز تعیین کرد و در حافظه صرفه جویی نمود. در مثال زیر یک آرایه دینامیک یک بعدی از اعداد صحیح به نام dyna تعریف شده است. کد: var dyna : array of integer; برای تعیین اندازه آرایه دینامیک باید از دستور SetLength استفاده کرد. مثلا دستور SetLength(dyna, 10); تعداد 10 متغیر در آرایه dyna تعریف می کند. این متغیر ها از 0 تا 9 شماره گذاری می شوند. در آرایه های متغیر شماره خانه اول همواره 0 می باشد. برای از بین بردن آرایه و آزاد کردن حافظه اشغال شده، از دستور dyna := nil; استفاده کنید. آرایه های دینامیک از نوع اشاره گر ها هستند. در مثال زیر اگرx و y دو آرایه دینامیک از یک نوع باشند، دستور x := y; باعث می شود که x به حافظه اشغال شده توسط y اشاره کند. یعنی x برای خودش حافظه جداگانه اشغال نمی کند. برنامه زیر را در نظر بگیرید: کد: var A, B: array of Integer; begin SetLength(A, 1); A[0] := 1; B := A; B[0] := 2; end; مقدار a[0] پس از اجرای برنامه بالا برابر 2 می باشد، چراکه b[0] به همان a[0] اشاره می کند. همانطور که در بالا ذکر شد در آرایه های استاتیک، عمل x := y; متغیر y را در متغیر x کپی می کند. برای ساختن یک کپی حقیقی از یک آرایه دینامیک باید از تابع Copy استفاده نمایید. کد: var A, B: array of Integer; begin SetLength(A, 1); A[0] := 1; B := Copy(A); B[0] := 2; end; توجه داشته باشید که دستور b := copy(a) برای آرایه b بصورت جدا از a، حافظه اشغال می کند و سپس مقدار a را در b کپی می نماید. وقتی متغیر های آرایه های دینامیک را با یکدیگر مقایسه می کنید در حقیقت اشاره گر آنها با یکدیگر مقایسه می شود. در مثال زیر دو آرایه همنوع a و b هر یک حافظه مخصوص به خود را اشغال کرده اند، عبارت مقایسه ای a = b مقدار false را باز می گرداند زیرا a و b به جاهای مختلفی از حافظه اشاره می کنند: کد: var A, B: array of Integer; begin SetLength(A, 1); SetLength(B, 1); A[0] := 2; B[0] := 2; end; توجه داشته باشید که عبارت مقایسه ای a[0] = b[0] مقدار true بر می گرداند چون a[0] و b[0] هر دو برابر 2 هستند. در آرایه های دینامیک، برای به دست آوردن اندازه آرایه از تابع length استفاده می کنند. همچنین تابع low شماره اولین خانه آرایه و تابع high شماره آخرین خانه آرایه را باز می گرداند. توجه داشته باشید که مقدار تابع low برای آرایه های دینامیک برابر 0 می باشد. مثال: کد: var A : array of Integer; x0, x1, x2 : integer; begin SetLength(A, 123);