67
ذد سل ج05 Issue 05 D4A Magazine www.delphi4arab.com حى نهكائشيجت بان انبOOP ةة خط خطي دنفيشاث فؤش انقظشة أع اس انح انزس تنبيو: يزل، ال لة تجمع بيه الجدلمقا ىره افق ذلك يجب أن تقرأ . ظاو ايم يع انخع64 بجق في انـاث، حعنبيااعذ ا قADO نخقاسيشث اا يصت بي يقاس

Delphi en Arabe

Embed Size (px)

Citation preview

Page 1: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

خطة خطة – OOP انبشيجت بانحى نهكائ

ظشة أعق – انؤششاث في دنفي

انزس انحاس ىره المقالة تجمع بيه الجد اليزل،: تنبيو

. يجب أن تقرأ فق ذلك

بج64انخعايم يع ظاو

ADOقاعذ انبيااث، حعق في انـ

يقاست بي يصاث انخقاسيش

Page 2: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

جفططحق١س: Restriction (prohibited)

شز أك :جإؽشجش ف دف

ضك ف جـ: لجذ جر١ححشADO– جؿضء جألي

جؿضء جألي–محسس ذ١ قحش جطمحس٠ش : ىحش دف

ذص64جطح ح :أجش دف

جضس جكحس: ىحش دف

جؿضء جػح–خيز خيز : جرشؿس ذحك جىحت

فـــشط جذد

Page 3: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

Restriction (prohibited)

في اتفاليح استغالل انثسايج انتي تضعها شسكح صاحة انثسايج ي اجم عىيا "تمييد"جد عثازج

دو إعطاء يماتم نهرا االستغالل، طثعا تعتثس حمىق غيس انماىيحايح حمىله ي االستغالل

فكسيح يسجهح وعهيح انىافمح تكى خالل تثثيت انثسايج عه انجهاش و اختياز يىافك عه يا

.تص عهيه االتفاليح

. و هرا زاجع نعدو اخر يا تحتىيه تجديح%15سثح انثثتي انري يمىيى تمساءج االتفاليح ال يتعدي

:XEالتثاس ي اتفاليح استغالل دنفي

Abstract: End-User License Agreement (EULA) for RAD Studio XE, Delphi XE, C++Builder XE, Delphi Prism XE, and RadPHP XE

2.1 LICENSE GRANT. Licensor grants to Licensee a non-exclusive, nontransferable, perpetual license (the “License”) to install this Product within the country

(or in the case of a country within the European Union within the European Union) specified by Licensee‟s ship to address provided by Licensee in the ordering

documentation for the Product at the time of purchase (“Licensed Country”) and solely for the development of software programs and/or management of its

internal systems and data in the following manner:

(a) If Licensee has purchased a Network Named User or Named User License, Licensee may designate one person in Licensee‟s organization ("Named User")

the right to install the Product on one or more computers and use the Product within the Licensed Country, provided that only the Named User uses the Product.

(b) If Licensee has purchased a Concurrent Users License, Licensee may install the Product on a network within the Licensed Country to be used concurrently

on different computers by up to the authorized number of users for which Licensee has purchased a license provided that the Product is accessed and used only in

the Territory. “Territory” means the geographical area in which the Product may be accessed and used. The use in the Territory shall be subject to the export

restrictions set forth below. Territory may be any one, and only one, of the following three geographic areas: Americas Territory, EMEA Territory or Territory

AsiaPac each as defined below.

The geographic Territories are:

„Americas Territory‟ including and limited to those geographical areas found within the boundaries of North and South America (but excluding Cuba). „Europe,

Middle East and Africa Territory‟ or „EMEA Territory‟ including and limited to those geographical areas found within the boundaries of Europe, Middle East and

Africa, including countries in the former Soviet Union (but excluding Syria, Iran and Sudan); „Asia Pacific Territory‟ or „AsiaPac Territory‟ including and limited

to those geographical areas found within the boundaries of Asia and Australia/Pacific (but excluding North Korea).

Except where prohibited by applicable law, transfer of the Product into a country (or in the case of the European Union, outside the EU) not identified on the

ordering documentation at the time of purchase is prohibited and will void the license. Temporary usage of a Product outside the Licensed Country or Territory not

to exceed 30 days while a user is traveling, is permitted.

ال تسح تثيع يتجاتها نثعض Embarcaderoيعهى ألهيح ي أعضاء يتدي دنفي نهعسب أ شسكح

انثهدا انعستيح ألسثاب سياسيح طثعا و انكم يعهى ذنك، إ كت ي احد انثهدا انعيح تانتمييد فه

.تستطيع شساء دنفي ي احد انىكالء انعتدي في انعانى

ئدجسز جطذ: جىحضد

جفططحق١ـــــــــــــــــس

Page 4: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

جإلىحسجش–جؿضء جػح

شز أك–جإؽشجش ف دف

جإؽشجش و١ف١س جطح ح أوػش ح ٠ك١ش جرطذت١ ف جرشؿس ذذف، ره أل جرطذأ

أح ز … جىحش جكؿصز غ١شحwhile…do أ ٠beginى أ ٠كضس

! ف ٠ؿذ ح قغحخ@ ^جشص

جغش٠د أ ئ عأي فال ٠ىحد ٠ؿذ ٠ؿ١د عإج، ره أل جز ع١ؿ١د غحرح ح ٠نيش

... ئ ؽشـ غحت طمس ذحطحد ضمغ١ جزجوشز جك١س سع ذ١ح١س لذ ٠ؿض ح

ئ – طيشق ئ و ره ذحطفق١، ى عكحي جطشو١ض أ جمحه جط ضؿ ه

!ضطم ئ شقس أخش ح آخش ف جرشؿس ذذف- وص رطذب

ض جإؽشجش ١ظ مشسز، خحفس ئ وص ضرشؽ فمو ضير١محش لجذ ذ١ححش، عس

.جرشؿس ذذف ؾطح طحصي ف قحالش وػ١شز جطح جرحؽش جإؽشجش

٠م ذ طشؾ دف ذحطح ٠ض٠ذ أوػش ف١حغ١ش أ فه إؽشجش ع١ؿه ضطكى

.لذسضه جوطؾحف جألخيحء أغحء جطم١ف

فحش جغحذز ف دف ضؾشـ ذؾى فق و ح ٠طك ذحإؽشجش، فال ضطشدد ف

. شجؾطح

... ذخ جم

Kachwahed ذم - دفجإؽشجش ف

Page 5: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

ػ جزجوشز ؽى ؿس ور١شز جألعيش، ق١ع ٠مغ و عيش ئ ؿس

٠ق ذد جخال٠ح جط ٠ى أ ٠كؿضح ذشحؽ ئ bit 32 ، ف دف bytesجخال٠ح غ١ح

231ال ضكط ز جخال٠ح ئال أذجد وح لذ ضى خح١س ال . 2Gb خ١س ح ٠حدي

.ضكط أ ل١س

يارا حثم ز األعذاد؟

جط 97جم١س : ئر ٠ى جعطخذجح أل حعد، ػال!ز جألذجد ١ظ ح كذد

ف دف، وح ٠ى أ جعطخذجح Byteضخض ف خ١س جزجوشز ٠ى جطرحسح ذد

.97 جز ٠طػ ذحم١س aشك جكشف

ق١ض ذمذجس خ١س (ضخق١ـ)٠ط قؿض ؛ذشحؿه ف (Variable) جإلال أ طغ١ش ذ

ف ق١ع ٠ىه جمشجءز ح جىطحذس ف١ح، ٠ط ره جزجوشز (أ أوػش قغد قؿ جطغ١ش)

، خقحتـ زج جطغ١ش أ جعح ح ل١س جزجوشز رشحؿه زجكؿصجغحقس

.عا

Program Test;

Var Var1, Var2: Byte;

Var3: Integer;

Begin

end.

:ى طغ١ش (أ أوػش)و١ف ٠ط قؿض ق١ض ( !ذؾى خحىة)طم١ف جفىشز عكحي أ ػ

... 1جخ١س 2جخ١س 3جخ١س 4جخ١س 5جخ١س 6جخ١س... انخهيت

Var3 Var2 Var1 انخغيش 12 45 150 انقيت

، ىرح جطغ١شجش ال ضقيف ذزج جؾى ف (Octets 1 :ذحفشغ) byte 1ضػ و خحس

. جطشض١دجزجوشز، ١ظ ؽشىح أ ضى ططحذس ذزج

Page 6: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

Var1جطغ١ش (byte 1)أسذ أمحف ح ٠كؿض ( bytes 4) ٠كؿض Var3الق أ جطغ١ش

٠حدي أسذ أمحف قؿ جو Var3 Integerره أل قؿ ذ١ححش جطغ١ش

Byteالق ،: ShowMessage(IntToStr(SizeOf(Integer)));

ShowMessage(IntToStr(SizeOf(Byte)));

.عا ئح ٠شف و ق١ض خالي Var1 Var3ى جرشحؽ ال ٠شف

إر، كيف يحذد انبشايج يضع انخغيشاث في انزاكشة؟

)٠كذد جرشحؽ م أ وحت عا خالي (...، ئؾشجءطغ١ش، غحذص، ؾذي، عؿ

(Address ) جىحت جزجوشزجك١ض جز ٠ؾغ أي خ١س .

E76013: ؾش٠س، ػحي-ذأذجد عص- جفيالقح–جج ل١س ذد٠س ٠رش ح

Global) ئرج طغ١ش ح 0ذ جإلال طغ١ش سل ف دف ٠ط ض١ثط ذم١س

Variable) أح ئرج وح طغ١ش ك ،(Local Variable) ف ٠ط ض١ثطح عطأخز ل١س

.ؾجت١س ضػ كط جك١ض جؾغي جزجوشز ألؾ جطغ١ش

يارا عي بانؤششاث؟

ضحح ػ جو ) byte 4جشل١س قؿ جطغ١شجش أج (Pointer)جإؽش

Cardinal) غ١ح أسلح خححش جزجوشزطخض٠ ذ١ححش ئح ٠غطخذ طخض٠ جي، غ١ش أ ال

. عاي

ػال؟ Var2قغح، و١ف كق ج جطغ١ش

، ؾحذ Addr أ جطحذ جن @كق ف دف ج أ وحت ذحعطخذج جشض

: Var2ج

ShowMessage(IntToStr(Integer(@Var2)));

:(Hexadecimal)ؾش٠س -شم ذؾى أسلح عصأ

ShowMessage(IntToHex(Integer(Addr(Var2)), 8));

ال ضمر ضش٠ش ل١ إؽشجش IntToStr IntToHexجطجذ أل ()Integerجعطخذح جطغ١ف

…ىرح، جج ٠خطف ؾحص ئ آخش، رحؽشز

Page 7: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

؟PVar2 ف طغ١ش آخش Var2ج٢، حرج لح ذطخض٠ ج جطغ١ش

: ػ ره ف جؿذي ،Var2 يؤشش عهى انخغيش PVar2ف ز جكحس مي أ جطغ١ش

... 1ج 2عا 3ج 4ج 5ج 6ج... انعا

PVar2 Var2 Var1 انخغيش 12 45 2عا انقيت ئح Var2 ال ٠خض ل١س جطغ١ش (Pointer )يؤشش ٠غ PVar2جطغ١ش : اخب

:ج، م ذزه ذؾء ػ

program Test;

var Var1, Var2: byte;

Var4: Pointer;

begin

Var4 := @Var2;

end.

4294967295 ئ 0 - ش٠ح–( Unsigned) أ جإؽش ل١ ؾرس ٠Pointerكط

فظ قؿ جر١ححش FFFFFFFF ئ 0 : ؾش٠س-ذحألذجد جؾش٠س، أ ذأسلح عص

Cardinal أ DWORD.

؟PVar2 خالي جإؽش Var2 ٠ىح جكقي ل١س جطغ١ش

٠ػ مرل PVar2، وأ جإؽش PVar2أؾ، ذرغحىس مشأ كط جطغ١ش جز ج

ذحشض ٠PVar2ىح ف دف لشجءز جطغ١ش جز ج ل١س جإؽش . Var2طغ١ش

PVar2^

var

Var2: Byte;

PVar2: Pointer;

begin

Var2 := 2;

PVar2 := @Var2;

ShowMessage(IntToStr(Byte(PVar2^)));

Page 8: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

:PVar2 رش إؽش Var2وح ٠ىح ضغ١١ش ل١س جطغ١ش

Byte(PVar2^) := 3;

:جإؽشجش لغح

Untyped Pointer: أ جإؽشجش جط ال ضإؽش و كذد، ٠ى جعطخذجح

.P : Pointerطأؽ١ش أ وحت، ضشف ذح

Typed Pointer : ،جإؽشجش جط ضغطخذ طأؽ١ش كذد جر١ححش

، Byte، ^Integer ،^Char^: ، ػحي^ضشف ذأقذ أج جر١ححش ٠غرم جشض

^Boolean...

system.pas ف جىطرس P ز جألج شفس ف دف غرمح ذالقمس

...PByte، PInteger ،PChar ،PBoolean: جطشض١د

Untyped)١ظ و كذد (PVar2: Pointer) لح ذطش٠ف إؽش

Pointer) زه جعطخذح ح جطغ١ف ئ ،Byte خرش طشؾ دف أ جم١س جط ،

.٠PVar Byteإؽش ١ح

زه ٠ؿد ضغ١١ش PByteئ (١ظ جم١س)فظ جط١ؿس ٠ى جكقي ١ح ذطغ١ف جإؽش

:م جمط

ShowMessage(IntToStr(PByte(PVar2)^));

:Byteيؤشش عهى م ذطش٠ف جإؽش ذ PVar2طكذ٠ذ جم١س جط ٠إؽش ١ح

var

Var2: Byte;

PVar2: ^Byte;

begin

PVar2 := @Var2;

PVar2^ := 5;

ShowMessage(IntToStr(Var2));

ال ٠غ١ش قؿ جإؽش، ذرحسز أخش PVar2 ضغ١١ش جر١ححش جز ٠إؽش ١ :يالحظت

.bytes 4 ع١رم PVar2ص جإؽش

؟PVar2 ٠ىح ئؾحء إؽش جإؽش

Page 9: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

:ىرح فك فظ جرذأ

var

Var1, Var2: Byte;

PVar2: ^Byte;

PPVar2: ^Integer;

begin

Var1 := 2;

Var2 := 3;

PVar2 := @Var2;

PPVar2 := @PVar2;

Pointer(PPVar2^) := @Var1;

ShowMessage(IntToStr(Byte(PVar2^)));

، ئر ٠ىح ضخض٠ ج طغ١ش ف طغ١ش Integer فغ Pointerذم ؽء أخ١ش، ذح

آخش؟

ؿحي Integerسغ أح ذفظ جكؿ، ضزوش أ٠نح أ ) Integer ١ظ Pointerال، جقزس

:ز جىطحذس خحىثس (٠ؾ ل١ عحرس

var

Var1: Byte;

Var2: Integer;

begin

Var1 := 3;

Var2 := @Var1;//هنب اخلطأ

؟Var2 ف طغ١ش حد Var1ئر و١ف ٠ىح ضخض٠ ج جطغ١ش

(:Integer ئ Pointer)ذرغحىس م ذحطغ١ف

Var2 := Integer(@Var1);

.Integer ١ظ Cardinal ذ Var2جألفف ح أ ٠ط جإلال جطغ١ش

٠كط ج ١ظ ذد، ٠ى ره Var2مشجءز خرش جطشؾ أ جطغ١ش

: جشف وح Ptr٠ذحعطخذج ضحذ جطك٠ جن

function Ptr(Address: Integer): Pointer;

:ػحي

ShowMessage(IntToStr(Byte( Ptr(Var2)^ )));

Page 10: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

:( ؾذ٠ذIntegerذد ) ٠PVarىح ئؾحء غخس ؾذ٠ذز . Integer إؽش ١PVarى

var

PVar: ^Integer;

begin

New(PVar); // إنشبء نسخة جديدة

PVar^ := 3;

ShowMessage(IntToStr(Integer(PVar^)));

Dispose(PVar); //حترير املؤشر

New غ١ش كذد، Untyped Pointer ال ٠ىح ئؾحء غخس إؽش :يالحظت

Dispose ضغطخذ إؽشجش أج كذدز Typed Pointer :PByte أ

PInteger...

ف و شز ( pseudo-functionأ ) Newجإلؾشجء -٠ىح ئؾحء ذز غخ ذحعطخذج ؽر

، ال ٠ىح جفي ئ١ ئال خالي (Anonymous)كق طغ١ش ؾذ٠ذ ال جع

.إؽش

ألدجء فظ جغشك، غ١ش أ ز٠ جإلؾشجء٠ ٠GetMem FreeMemى جعطخذج

.New Disposeح١ ال ٠خقح كذد جإؽشجش، جألفن جعطخذج

( !أ ؾح ٠إؽش طغ١ش آخش )ئرج لح ذاؾحء غخس أخش ذحعطخذج فظ جإؽش

فغ١ن١ ح ج جطغ١ش جألي، ذحطح طى جفي ئ١ ال جمشجءز

:٠قرف ق١ح إؽش ٠ط١، ػحي (Memory Leak)ف جزجوشز (أ ضغشخ)ع١غرد ض٠ف

var

X: Integer;

PI: PInteger;

begin

New(PI);

PI^ := 5;

X := 1;

PI := @X;// 5هنب تضيع القيمة

ShowMessage(IntToStr(Integer(PI^)));

...

Page 11: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

TList ئال ئرج لح ذكف ج ف إؽش آخش، ف ػ ز جكحالش ٠ىح جعطحي جقف

:جز ٠ى جعطخذج وؿذي جإؽشجش

var MyList: TList;

procedure TForm1.Button1Click(Sender: TObject);

var MyByte: ^Byte;

begin

MyList := TList.Create;

try

New(MyByte);

MyByte^ := 45;

MyList.Add(MyByte);

ShowMessage(IntToStr(Byte(MyList[0]^)));

Dispose(MyByte);

finally

MyList.Free;

end;

end;

لر شك جحضؽ فغن١ (Disposeذحعطخذج ) MyByteى، ئرج لح ح ذطكش٠ش جإؽش

، ( فح فق جط ضغ١ش جزجوشز ذيش٠مس خطفس2006 جخطالف ف غخ دف ) 45جم١س

٠ى فكـ ره ) ح ٠غرد ض٠ف ف جزجوشز MyByteجطر١ ئ أ ذ ضكش٠ش جإؽش

ف ئفذجسجش True جم١س ReportMemoryLeaksOnShutdownذنرو جطغ١ش

.( فق2006دف

:ي اسخخذاياث انؤششاث

فه جعطخذج جإؽشجش ٠ؿه ضطكشس ل١د وػ١شز ضجؾح أغحء جرشؿس ذذف، ٠ؾش

.ذز جم١د ذل ٠غطخذ غحش ذشؿس ال ضذ جعطخذج جإؽشجش

:جعطخذج جإؽشجش ٠كه ضكى أوػش ف جغس ٠ىغش قذدن جرشؿ١س، ػحي

٠ى أ ضأخز ل١ خطفس أغحء ضؾغ١ جرشحؽ، خالفح (Variables) أ جطغ١شجش

...جط ضرم ل١طح غحذص ى١س ص ضؾغ١ جرشحؽ (Constants)ػجذص

Page 12: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

...١ظ ذذ ج٢

procedure ChangeConst(const Constant; var Value; Size: Integer);

begin

Move((@Value)^, (@Constant)^, Size);

end;

procedure TForm1.Button1Click(Sender: TObject);

const

ConstStr: string = 'String Value';

var

VarStr: string;

begin

VarStr := 'New String Value';

ShowMessage(ConstStr);

ChangeConst(ConstStr, VarStr, SizeOf(String));

ShowMessage(ConstStr);

end;

، p1 := p2: ذح أ جإؽش طغ١ش سل، ف١ى ئؾشجء ج١حش ١، ئسفحق ل١س

p، جطر١ أ ص٠حدز ل١س جإؽش Dec(p): أ جإلمحؿ حInc(p): جض٠حدز ل١ط

:، ػحي(pقؿ جطغ١ش جز ٠إؽش ١ )× D: ٠ ئصجقس جج ذمذجسDذمذجس

var

P: PDouble; // 8حجم اخلبنة اليت يؤشر عليهب

begin

P := Ptr($50000); // هتيئة املؤشر بقيمة ابتدائية

Inc(P); // P = $50000 + 1 * SizeOf(Double) = $50008

...

Inc(P, 6); // P = $50008 + 6 * Sizeof(Double) = $50038

زه ؽح جعطخذج جإؽشجش جؿذجي أ جغالع جق١س م قمس ضىشجس٠س، ذحشس

. ؾ١ جم١ خالي جطأؽ١ش جخحس جالقمس و ص٠حدز ف ل١س جإؽش

Page 13: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

:يشجعيت (يؤشش)انخشيش باسخخذاو قيت

: خالي ئؾشجء ذذجتxف جػحي ج٢ض د ضغ١١ش ل١س جطغ١ش

procedure ChangeValue(i: Integer);

begin

i := 0;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

x: Integer;

begin

x := 5;

ChangeValue(x);

ShowMessage(IntToStr(x));

end;

ض ذحعطخذج جم١س، أ أ ChangeValue أل جطش٠ش ف جإلؾشجء xىرح ضطغ١ش ل١س

. قححx، ذ١ح ضرم ل١س 0 ئ i لح جإلؾشجء ذطغ١١ش ل١س x ل١س أخزش iل١س جطغ١ش

:(جز ٠غطخذ فظ جرذأ) varىرح، عمي ؾ١ح أ جك ع ذامحفس جطؾ١

procedure ChangeValue(var i: Integer);

ال ٠ؾذ ضش٠ش ذز جيش٠مس، ذحطح وح ٠رغ ضش٠ش ( ػالCغس )ف غحش ذشؿس أخش

:جإؽش مح ل١س جطغ١ش غ جطذ٠ خالي جإؽش، ح ٠محذ ف دف

procedure ChangeValue(i: PInteger);

begin

i^ := 0;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

x: Integer;

begin

x := 5;

ChangeValue(@x);

ShowMessage(IntToStr(x));

end;

١م زج ChangeValue ئ جإلؾشجء x جطغ١ش جالق ج٢ ذذ أ لح ذطش٠ش

.iجألخ١ش ذطغ١١ش ل١س كط جج جز ٠ك جإؽش

Page 14: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

! ذغس varحرج و زج ؟ ٠ىح ق جؾى ذحعطخذج جؾ

أل زج ع١كه لذسجش أخش طكى أوػش ف عن جرشحؽ، عذسن أ٠نح حرج ذح

.Windows APIجؾ جعطخذج ذل دجي

:جز ٠غطخذ طأؽ١ش، ػحي (*) ذامحفس فظ جشض Cأ٠نح ضشف جإؽشجش ف غس

int *p, x = 5;

p = &x;

printf("Addr: 0x%p = %d\n", p, *p);

:ف دف، ض جطفش٠ك ذ١ ف١غس جالعطخذج ذ١ ف١غس جطش٠ف

var

P: ^Integer;

X: Integer;

begin

X := 5;

P := @X;

ShowMessage(Format('Addr: $%p = %d', [p, p^]));

خالي إؽش جغؿ فك فظ جرذأ (Records)ف دف غحرح ح ضغطخذ جغؿالش

:جغحذك، ػحي

type

PPerson = ^TPerson;

TPerson = record

Name: string[80];

Age: byte;

end;

procedure SetAge(APerson: PPerson; AValue: Byte);

begin

APerson^.Age := AValue;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

Person: TPerson;

begin

Person.Name := 'Amine';

Person.Age := 62;

SetAge(@Person, 65);

ShowMessage(IntToStr(Person.Age));

end;

Page 15: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

:يالحظاث

جغؿ (PPerson = ^TPerson)ف ز جػحي جألخ١ش لح ذحإلال إؽش

TPersonزج غ١ش ؾش أفال، الق! لر ضش٠ف جغؿ فغ :

type

PPerson = ^TPerson;

TPerson = record

...

غ١ش أ ى ف ز جكحس، ئقذ خقحتـ جإؽشجش، ى ٠ؾطشه ف١ أ

، ز جخحف١س ضغطخذ ذىػشز، خحفس ذ ضش٠ف عؿ ٠typeى م فظ جك١ض

:ئقذ حفش إؽش فغ، ػحي

type

PPerson = ^TPerson;

TPerson = record

Name: string[80]; Age: byte; Son: PPerson;

end;

:أ٠نح ف زج جػحي ٠ىح جالعطغحء جإؽش ضش٠ش طغ١ش جغؿ

procedure SetAge(var APerson: TPerson; AValue: Byte);

طغ١١ش ل١س TPerson ح ع١م ذاؾحء غخس وحس جغؿ SetAgeغ١ش أ جإلؾشجء

... ، ح ٠ؿ جألش أغم خحفس مخحس قؿ جغؿ وػشز جإلؾشجءجشAgeق١ذز

.ضش٠ش جإؽش ف ز جكحس أف أعش

: ٠ى ئح ف قحس جطح جغؿالش ىطف رحؽشز ذـ^ذخقؿ

APerson.Age := AValue;

:إعذاو انؤشش

لح ذطكش٠ش ل١س x جز ٠إؽش طغ١ش p1 ٠أخز ل١س جإؽش p2ئرج ؾح جإؽش

Invalid: كق سعحس جخيأp2، فغ١ن١ جإؽش Dispose ذحعطخذج p1جإؽش

pointer operation ره أل جإؽشجش ال ضطشف ذفشك جطىح جشؾ ،ػحي ،:

Page 16: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

var

x: Integer; p1, p2: ^Integer;

begin

x := 5;

p1 := @x;

p2 := p1;

Dispose(p1);

ShowMessage(IntToStr(p2^));// اخلطأهنب

ف و 0ع١أخز جم١س ) ٠ىح جمي أ ال ٠إؽش ؽء nil ٠أخز ل١س p1ذؿ جإؽش

ف جػحي x ذحطح كق ل١س جطغ١ش !غ١ش أ ح ٠ضجي ؾد (دف ئ قذ ج٢

:جغحذك

var

x: Integer;

p1, p2: PInteger;

begin

x := 5;

p1 := @x;

p2 := p1;

p1 := nil;

ShowMessage(IntToStr(p2^));//متت بنجبح

ج خ١س كذدز جزجوشز، غ١ش أ ز جخ١س (nilضخطف )لذ ضى إؽش ل١س

جزجوشز لذ ال ضك أ ل١س، ذحطح ال ٠ى جؿض ذأ قطح ى إؽش ل١س ٠إؽش ١ح ف

!جزجوشز

، ئال فغطأخز ل١س ؾجت١س لذ (ل١س جذطذجت١س)جإؽشجش ػ ذم١س جطغ١شجش ضكطحؼ ئ ض١ثس

ئ قحص جىطحذس خالح، (Access Violation)ضطغرد ف قذظ أخيحء غ١ش طلس

خحفس ئ وحص ضإؽش خحسؼ جك١ض جكؿص رشحؽ ف جزجوشز، أ لذ ضطغرد ف ضغ١ش ل١

.وحتحش أخش ف جرشحؽ

!كم انكائاث ي يؤششاث

، ق١ع ٠ىه ئؾحء (ئؾشجءجش ضجذ) وحت ؿس جحؽ TObjectجقف

...غخس ف لص، ضكش٠ش جزجوشز ذ جالطحء

New ئؾحء غخس ٠ جعطخذج جإلؾشجء يؤشش ف ججل TObjectجىحت

...Disposeإؽش ضكش٠ش جزجوشز ٠ جعطخذج جإلؾشجء

ضؾأ ذذ، ض كحس جطأؽ١ش ذ TObjectأ كحس العطخذج غخس وحت

...Access Violationسعحس جالعطػحء : ذحطح

Page 17: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

أ ضشو ك Dispose لذ ٠ ذ ضكش٠ش إؽش ذحعطخذج TObjectذ ضكش٠ش أ وحت

!ف جزجوشز ف ىح ؿي ال ٠ى جفي ئ١

ض ؾ جغشك (TObjectق١ع والح وحت ) Object2 := Object1: جىطحذس

Object2 ٠إؽش فظ جم١س جط ٠إؽش ١ح جغشك Object1 ال ض غخ جم١ !

TObjectو جألفحف جط ضؾحذح ف دف ضكذس عالس جقف جألخ

٠يرك ١ح فظ ... TForm ،TControls ،TComponent ،TButtonذح ف١ح

...جكذ٠ع

...يؤششاثفظ جىال جإلؾشجءجش جطجذ وح ف ججل

؟(DLL)أضزوش ىش٠مس جالعطذحء جذ٠ح١ى حؽ ىطرحش جشذو جذ٠ح١ى١س

Type

TDLLProc = procedure(var Param: String); // ...منط مؤشر على إجراء

Var

hDLL : Integer;

MyProc: TDLLProc; // ...اإلجراءمؤشر على

S : String;

begin

hDLL := LoadLibrary('MyDLL.dll');

try

@MyProc := GetProcAddress(hDLL, 'DLLProc'); // ... حفظ قيمة مؤشر

If @MyProc <> Nil Then

MyProc(S);

finally

FreeLibrary(hDLL);

end;

end;

و ح ف جألش أ دف ٠غ ١ح جرشؿس ٠ش٠كح ضد جطح جرحؽش جإؽشجش،

...ضك٠ جم١حدز ئ ىش٠مس أوػش ٠ذ٠س- ئرج جعطض جألش–ف ق١ ٠ىح

:يالحظت

طيشق ئ جؿحد ج جز ٠ر١ جفحتذز ج١س جإؽشجش، عطشن ره جم١

القمس ئ ؽحء جهلل، ق١ع عطكذظ ذل أج جإؽشجش جط ح حس خحفس

.طيشق ئ١ح ف جم

Page 18: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

جؿضء جأليADOحعق في انـ

عء ADOأغد جؾحو جط ٠جؾح جرشؿ ذ ذشؿس جطير١محش ذحـ

جقك١ف ح ضأغ١ش رحؽش ؿحـ Cursor أل جخط١حس جـ Cursorجـ جعطحي جخط١حس

: فح غح٠س ، زوش ذل جؾحو ADO جرشؽ ذحـ جطير١ك

جطغؿ١الش جنحفس ىشف غطخذ ال ضش ذ آخش

جالضقحيذية فطف

سعحس خيأ أغحء ضذ٠ أ قزف ضغؿ١ ذي أ كزف ىشف غطخذ آخش

ال ٠ى جشؾ خف

مشجءز فمو

ل١س جـRecordCount -1

,CursorType: زج ٠ؿد جرشؿ١ أ ٠ىج دسج٠س وحف١س ذـحخقحتـ

CursorLocation, LockType إلؾحء ضير١ك أوػش وفحءز .

: Recordset ،Cursor ،DataSetرذأ ذؾشـ ذل جقيكحش غطس ذىػشز

lam.abdeldjalilذم – لــــجـذ جر١ــححش

Page 19: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

Recordset : ' ؿ جطغؿ١الش '

Recordset object ٠كط طحتؽ جإلعطال ، جطحتؽ ضطى عيس (rows) ضغ

، و جألذز ضخض (fields)ضغ قمي (columns) أذز (records)ضغؿ١الش

. Recordset ف ؿس قمي جـ Field objectف

Recordset جغيس لحذز جر١ححش ٠م ADOق١ ٠غطمر ضير١ك لجذ جر١ححش

object ذطغ١ف جر١ححش ج١حش جغقس ز جر١ححش .

Cursor :

٠ى جمي أ جىحت ADO ١ى جر١ححش جز ٠خض طحتؽ جإلعطالحش ، ف جـ

Recordset رحسز وحت COM ٠غ جفي ئ جر١ححش ف جـ Cursor جـ

CursorType جز ٠كذد جحتف جطحقس ىحت Recordset .

Recordset إلقطجء ؿس جغيس جيم١س جكطف ذح ـ Cursor ٠غط جـ

DataSet: ' ؿ جر١ححش '

ضير١مه . حتس جىحتحشDataSetجقذز جألعحع١س في ئ جر١ححش جـ

. في محذز جر١ححش٠DataSetغطخذ جـ

. ٠ػ ؿس جغؿالش لحذز ذ١ححش س ف ؾذي يمDataSetوحت جـ

لذ ضى ز جغؿالش ؾذي لحذز ذ١ححش جقذ، أ أح لذ ضػ طحتؽ ضف١ز جعطال أ

.ئؾشجء خض

جط ضغطخذح ف ضير١محش لجذ جر١ححش ضكذس DataSetؾ١ جىحتحش جـ

DB.TDataSet ضشظ قمي جر١ححش، جخقحتـ، جألقذجظ ، جحؽ ز ،

: زوش ح ، جفثس

TBDEDataSet / TcustomADODataSet / TcustomSQLDataSet ,,,

Page 20: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

TcustomADODataSet ٠كذس ح :

( TADODataSet, TADOTable , TADOQuery , TADOStoredProc) وح

: ضؾطشن ف جخقحتـ جطح١س

CursorType, CursorLocation, LockType, MarshalOptions

: TcustomADODataSet ي Recordsetانصل نهـ

جفي جرحؽش ئ ٠TcustomADODataSet.Recordsetفشجـ

. ADO ف جـ Recordsetجىحت

ذ . ADO ـ Recordset ججؾس جط ٠ط خالح جفي ئRecordsetجـ

ئ جؾس جز ضفش جفي Recordset ، ٠ط ضمحت١ح ض١١ ل١س ADO datasetفطف

ال ٠رغ أ ضغطخذ ز جم١س قط ذذ ئىالق جكذظ . ئ جغؿالش

OnRecordsetCreate .

جط ADO ف جـ Recordsetئ جىحت في جرحؽش ئ Recordsetجعطخذج

شؾ جفي جرحؽش زج ٠غف طير١ك ذحعطخذج خقحتـ . ٠datasetػح جى

. جقذسRecordsetحؽ جىحت

ف١ذ ذؾى خحؿ العطفحدز خقحتـ أعح١د Recordsetجفي ئ وحت

. ADO dataset ال ضش ف ىحش جطRecordsetجىحت

قحس ى أ زوش . رحؽشزRecordset جطير١ك في ئ جىحت حدسج ح ٠كطحؼ

جط ضطؽ ضف١ز ئعطال ٠شؾ ل١ ف Recordsetضؾ١ : ٠غطخذ ػ زج جفي

جشؾس Recordsetف ز جكحس، ضخق١ـ جـ . TADOCommandجى

رحؽشز ئ جخحف١س ( TADOCommand)ضف١ز

Recordset . ـADO dataset ذحؾى جطح جغطس إلعطمرحي:

ADODataSet1.Recordset := ADOCommand1.Execute;

Page 21: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

: CursorLocationخحف١س - 1

جضذ - ق١ ضفطف ؾحد Recordset طكذ٠ذ أ٠ ٠ط ئؾحء جـ CursorLocationجعطخذج

. جغ١شفش-أ ؾحد

clUseClient clUseServer: جم١ جكطس

. TCursorLocation ف CursorLocationدف ٠غي

. ز جم١ ضي لر فطف جإلضقحي - clUseClient: جم١س جإلفطشجم١س

٠CursorLocationؿد جألخز ذ١ جإلطرحس و جج ججسد ق١ ئخط١حس

clUseClient :

. ٠غط إلدجسضح ADO Cursor جإلعطالحش وحس ف جكشن٠ط ضخض٠ طحتؽ

جغشس جىفحءز ف جطح جر١ححش ألح ضؿد جر١ححش ئ جزجوشز جك١س .

رحسجش جـSQL ضفز ف جغ١شفش .

جرحسجش جط ضكذد ؿ جطغؿ١الش ذاعطخذجWhere ضغطمر ف local

cursor ( خطضس) .

(جإلضقحي فمو ؿد أ قف جر١ححش)ئىح١س ج ذذ ئضقحي

ضشك شس أورشجغحـ ١حش جغ١ش ذس ىشفclUseServer ػ

. جطشض١د جفطشز

ئىح١س ضخض٠ جر١ححش ؾرح جفحش(ADTG ،XML .)

(٠ط ضش٠ش جر١ححش ئ ج١ )ئسضفح قشوس شس ؽرىس جالضقحي .

Page 22: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

clUseServer :

أ لحذز جر١ححش / OLE DB provider ذحضد ضط ئدجسضح Recordsetجـ

ئلطقحد جسد ج١ .

ئعطالن جسد جغ١شفش ى صذ طق .

(جرمحء طق )ذ جإلىح١س ج ذذ ئضقحي .

جخفحك قشوس شس ؽرىس جالضقحي ضطرش جألػ ف قحس مف جإلضقحي .

: CursorTypeخحف١س - 2

CursorType ذذ جطى Recordsetال ٠ى جطى

جغط Cursorجـ ضكط جم١س جط ضذي CursorTypeخحف١س جـ

و١ف ضطكشن دجخ جغؿالش س أ ذ س جطغ١١شجش جط أدخص ف طكذ٠ذ

. ذذ ئعطمرحي جر١ححش لحذز جر١ححش ىشف غط١ آخش٠

، ctdynamic, ctkeyset, ctforward-only ,ctstatic: جم١ جكطس

ctUnspecified

. TcursorType ف cursor typesدف ٠غي

. datasetز جم١ ضي لر فطف جـ - ctKeysetجم١س جإلفطشجم١س

ctUnspecified ٠كذد ذذ جـ CursorType .

Page 23: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

ctDynamic

لر جغط١ (جإلمحفس ضذ٠ قزف )ضغف ه ذشؤ٠س جطغ١١شجش

. ج٢خش٠

(جإلمحفس ضذ٠ قزف )ضغف ه ذ ضغ١١شجش .

جطم ف و جإلضؿححش .

ctKeyset

لر جغط١ ج٢خش٠ أح جطغؿ١الش جنحفس ال (جطذ٠ )ضغف ه ذشؤ٠س

. ٠ى سؤ٠طح جطغؿ١الش جكزفس ال ٠ى جؼ ئ١ح

(جإلمحفس ضذ٠ قزف )ضغف ه ذ ضغ١١شجش .

جطم ف و جإلضؿححش .

ctStatic (غخس غحذطس ؿ جطغؿ١الش )٠م ذمشجءز وحس ؿ جطحتؽ

لر جغط١ (جإلمحفس ضذ٠ قزف )ال ضغف ه ذشؤ٠س جطغ١١شجش

. ج٢خش٠

جطم ف و جإلضؿححش .

(جإلمحفس ضذ٠ قزف )ضغف ه ذ ضغ١١شجش .

ضغطخذ حدز طمحس٠ش ف قحسCursorLocation : clUseClient .

٠CursorLocation : clUseClientغط فمو ذح ٠ى -

Page 24: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

ctForward-only ( رس جقذ |ألح فمو )

لر جغط١ (جإلمحفس ضذ٠ قزف )ضغف ه ذشؤ٠س جطغ١١شجش

. ' ئرج ضق ذذ ئ ز جطغؿ١الش' ج٢خش٠

جألح " جطم ف ئضؿح جقذ "(UniDirectional .)

ذذ جإلطمحي غؿ جج ٠كزف جغؿ جغحذك جزجوشز ! عش٠ ؾذج .

ل١س جخحف١سRecordCount 1- إلعطحدز ذد جطغؿ١الش .

جمجت جق١س ػ / ClientDataset فجتذ أ عش٠ جألػ أل

ComboBox... .

FireHorse ' ف جكم١مس ١ظ ذـ ' جكقح جحسCursorType ع ىزج

. غشط

ctForward-only CursorLocation = clUseServer رحسز

LockType= ItReadOnly .

: ctForward-onlyئمحفس ئ خقحتـ جـ

جمشجءز فمو "(جإلمحفس ضذ٠ قزف )ال ضغف ه ذ ضغ١١شجش ."

أعش جغحذك ! عش٠ ؾذج ctForward-only . أل مشجءز فمو .

ضغطخذ حدز ف جطمحس٠ش ف قحسCursorLocation : clUseServer

ئرج ضكشوص ضغؿ١ ال ٠ى ) ctForward-only ئال bookmarkوح ضذ جـ *

. (جدز ئ١

غ١ش ذ جضد ، فا جضد ى أ ٠ي١ه CursorTypeئرج ض ىد *

= CursorLocation = clUseServer CursorTypeآخش ػال ئرج مص

ctDynamic فا عف ٠غ١ش لحذز ذ١ححش أوغظCursorType ئ ctKeyset .

Page 25: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

٠كط ل١س جقذز CursorType جـ CursorLocation = clUseClientف قحس *

ctStatic ٠ أ جم١ جرحل١س خحفس ذحـ clUseServer

: LockTypeخحف١س - 2

ئرج وص ضرشؽ ذشحؽ طذد جغطخذ١ ف١ه جألخز ذ١ جإلطرحس خحف١س

LockType( . جطغؿ١ قح٠س/ئغالق)قزف فظ جطغؿ١ / ذز غطخذ١ ضذ٠

LockType ضخرش جضد أ جإلغالق ٠ؿد أ ٠م جغؿالش أغحء

. (إلعطحح ٠ؿد أ ٠ى جضد ٠ذ)جطكذ٠ع

، ltOptimistic ،ltPessimistic ،ltReadOnly: جم١ جكطس

ltBatchOptimistic ،ItUnspecified

. TADOLockType ف LockType دف ٠غي

. datasetز جم١ ضي لر فطف جـ - ltOptimisticجم١س جإلفطشجم١س

ItUnspecified ٠كذد ذذ جـ LockType .

ltOptimistic

(جف١ض٠حت )ف زج ج ٠ط غك و عؿ قذز فمو ق١ ضط ١س ضكذ٠ع جغؿ *

ل١ زج جغؿ آخش جم١ جيحز ذ آخش غطخذ لح ذحطكذ٠ع

ltPessimistic

ال ضذ ذل )ف زج ج ٠ط غك و عؿ قذز أغحء ١س جطذ٠ قط جكف *

.(جضدجش زج ج

Page 26: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

ltReadOnly

.جإلع ٠رش فغ ف ز جكحس ٠ى ف قحس جمشجءز فمو*

ltBatchOptimistic

. جطكذ٠ع ذحذفحش ك ئعطخذج جطكذ٠ع جفس *

فىشضح أ جغطخذ ٠م ) د ئضقحي clUseClientضغط *

ق١ ضى (batch)ذح١حش ، ضخض ز ج١حش ف جزجوشز غ ضمذ ؽى دفس

٠ى ئغحء ح ٠ؾذ ف (UpdateBatch)ؾحضز ئ لحذز جر١ححش زج ذحط١س

(batch) ذجعيسCancelBatch أ CancelUpdates

: القس

قزف فظ جطغؿ١ ، ػال /ل١ح أوػش غطخذ ذطذ٠ )٠ى أ ٠ؾذ ضنحسخ ف قحس

. (جألي لح ذحطذ٠ غ جكف جػح ال٠ى جكف ئال ذذ ؾد آخش ضكذ٠ع طغؿ١

Message

“Row cannot be located for updating.Some values may have been

changed since it was last read”

'' ال٠ى ئ٠ؿحد جغيش طذ٠ ، ذل جم١ ضغ١شش ل١ح ذذ آخش لشجءز''

... د ئ ز جكحس ف م آخش ئ ؽحء جهلل

: MarshalOptionsخحف١س - 2

ذ ضغ١١ش ف جر١ححش ١ط ئسعحح ئ جغ١شفش ،ذز clUseClient ضغط

. جخحف١س ٠ى ضخق١ـ جطغؿ١الش ف جر١ححش جك١س جط ٠ط ئسعحح ئ جغ١شفش

Page 27: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

moMarshalModifiedOnly moMarshalAll، : جم١ جكطس

. TMarshalOptionف MarshalOptions دف ٠غي

. moMarshalAll: جم١س جإلفطشجم١س

moMarshalAll : ٠ط ضرثس ؾ١ جطغؿ١الش ف جر١ححش جك١س ئسعحح ئ جغ١شفش

.moMarshalModifiedOnly : ٠ط ضرثس فمو جطغؿ١الش جط ض ضغ١١شح ف جر١ححش

. جك١س ئسعحح ئ جغ١شفش

: ف جألوغظ ١ه ج ذح ٠أض ئفطشجم١ح أ ئضر جؿذي جطح : جألوغظ

CursorLocation CursorType LockType

clUseServer

ctForwardOnly

ctKeyset

ctStatic

ltReadOnly

ctKeyset

ltReadOnly

ltPessimistic

ltOptimistic

ltBatchOptimistic

clUseClient

ctStatic

ltReadOnly

ltOptimistic

ltBatchOptimistic

: ADOConnection يك - 1

-<ConnectionString > : ف١ح ىطد حش جإلضقحي ضد ف جمحذز

..وس جشس ئ ؾذش

Page 28: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

-Connected : إلضقحي لي

-LoginPrompt : خحفس ذحفزز ىد جع جغطخذ وس جشس ئرج وص ال ضش٠ذح أ

Falseضش ئؾ جم١س

-KeepConnection : ئذمحء جإلضقحي أ لي ف قحس ذ ؾدDataset ف م

Active .

: ADOTableيك - 2

-<ConnectionString> : ئرج أسدش ئؾحء ئضقحي آخش د ئعطحيADOConnection .

-AutoCalcFields : طكذ٠ذ جكمي ئرج وحص جكمي جكغحذ١س ضكغد أضحض١ى١ح أ ال .

-Filter : (ذحعطحي قم أ أوػش ضمحذح جم١ )٠غط فطشز .

-Filtered : طف١ ئغحء ضف١ جفطشز .

-MaxRecords : ض غ١ش كذد 0طكذ٠ذ ذد جطغؿ١الش جشجد ئحسح ئفطشجم١ح .

-CommandTimeout : طكذ٠ذ لص طف١ذ أش ح(sql) ذذ ئطحء زج جلص ٠ط ئغحء

جألش جشجد ضف١ز، كذد ذحػح١س ػال ذ كحس ضف١ز أش ئمي جإلضقحي

. ذحغ١شفش عف ٠غ جألش ذذ ئطحء جلص جي

: ADOQueryيك - 3

-SQL : ىطحذس ؾ جـSQL .

-AutoCalcFields : طكذ٠ذ جكمي ئرج وحص جكمي جكغحذ١س ضكغد أضحض١ى١ح أ ال .

-Prepared : طكذ٠ذ ئرج ض١ثس ؾ جـSQL ذح .

-CacheSize : طكذ٠ذ قؿ جزجوشز جع١يس ـdataset طكى ف ذد جألعيش

أل ل١س 1جكطف ذح ف جزجوشز ىشف جضد ، جم١س جإلفطشجم١س

.غـ ذح

Page 29: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

: ADOStoredProcيك - 4

-ProcedureName : طكذ٠ذ جإلؾشجء جخض ف لحذز جر١ححش .

: ADODataSet /ADOCommand يك - 5

-CommandType : طكذ٠ذ جألش جز ع١فز(cmdTable ،

cmdTableDirect ،cmdStoredProc ،cmdFile ،cmdText ،

cmdUnknown )

cmdFile : فطف جفحش جكفس ؽى xml / adtg ذجعيس جـ DataSet (

أ ذحنغو ذح١١ CommandTextضخطحس ئع جف ف جخحف١س

ADODataSet ئخطش Load From File )

cmdStoredProc ضخطحس ئع جإلؾشجء جخض ف ) طح جإلؾشجءجش جخضس

( CommandTextجخحف١س

cmdTable ،cmdTableDirect ضخطحس ئع جؿذي ف ) طح جرحؽش جؿذجي

( CommandTextجخحف١س

cmdText ،cmdUnknown طح ذؿ جـ SQL ( ضىطد ؾ جؿذي جـSQL

( CommandTextف جخحف١س

جط١ؿس ضى أدجء cmdUnknown ذ ضشو CommandTypeى ذطكذ٠ذ جـ

أ٠ر .أفن

: القس

cmdTable, cmdTableDirect, cmdOpenFile ال ٠ؿد أ ضغطخذ ذـ

ADOCommand .

Page 30: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

جؿضء جألي–محسس ذ١ قحش جطمحس٠ش

ئعطخذج ٠فن جألغر١س ى ( ذحىد )٠ذ٠ح جطمحس٠ش ض١ذ ٠فن جرشؿ١ ذل

عشس ذغس جطمحس٠ش طق١ جؾحش ضمذ ألح جطمحس٠ش قحش

:جطغحؤي ىشـ جقذ و أ أطمذ

؟ ضمحس٠ش ق أقغ ح

؟ جحعد أخطحس و١ف

:دف ف جطمحس٠ش قحش أفن أؽش ذ١ جألعحع١س جحتف ذل ف محسس ى مذ

lam.abdeldjalilذم –ــىـــحش دفـــــــ

Page 31: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

Rave reports

ييزاح

جذف ئذطذجءج ضقد أضحض١ى١ح ( Rave BE Bundled Edition ) ئفذجس ؿح

. XE ئ آخش ئفذجس 7جإلفذجس

. طىح ذ١ثس جطي٠ش دف

. ئىح١س ؾ ذز ضمحس٠ش ف ف جقذ

. ئىح١س ق ف جطمحس٠ش ف جف جطف١ز

. فمو طمحس٠ش جرغ١يس Wizardئقطجت غحذ ف جشع

. (طح جألقذج ظ )كشس جغىشذص

. pdf , rtf ,html , txt : جطقذ٠ش ئ

سهبياح

Raveذ ئىح١س ق ق جطمحس٠ش ف جف جطف١ز ئال ذ ؽشجء جإلفذجس

Reports Architect دالس 400 ذغش ( ف جـRave رحسز dll .)

. جذ جف ذ

. جل جشع ١ص

. ذش ص ئفذجسال

Page 32: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

Report Builder

ييزاح

. XE ئ دف ٠4ذ ئفذجسجش جذف

. طىح ذ١ثس جطي٠ش دف

. جغسط شفك ؾ١ جإلفذجسجش

RAP) Runtime Pascal Environment )ئعطحي (كشس جغىشذص) أذؿىص ذحعىحي

. جألقذجظ جذؿس إلؾحء جطمحس٠ش جمذز

. ضغ١ك ؾ١ذ

. ف جف جطف١ز (End-user layout Editor)ئىح١س ق ق جطمحس٠ش

سهبياح

RAP طفش فمو ف جإلفذجس٠ Server Enterprise .

. ٠Professionalرذأ ئفذجس (End-user layout Editor) ق ق جطمحس٠ش

. دالس 1099 ذـ Server دالس ئ 349 ذـ Standardئذطذجءج أعحس شضفس

. ذش ص ئفذجسال

Page 33: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

Quick Report

ييزاح

. XE ئ دف ٠5ذ ئفذجسجش جذف

. طىح ذ١ثس جطي٠ش دف

. عش جشخقس % 25 عش جطشل١س

ؿح ٠ه جإلفذجس QRDesign خحسؾ ٠end-user report designerؾذ

QuickReport Pro .

. ٠ى ضن١ دجخ جف جطف١ز

. HTML, PDF, XML, CSV, XL, WMF,ASCII : ضقذ٠ش جطمحس٠ش ؽى

سهبياح

. QuickReport Pro أس إلفذجس 240جغش قج

. ذش ص ئفذجسال

Fast Report

ييزاح

. XE ئ ٠4ذ جذف

*.( . frxئ *. net fr3. ئ vclعس ضك٠ جطمحس٠ش ) ٠ؾذ ئفذجس ذش ص

د جذف standardئىح١س ق ق جطمحس٠ش ف جف جطف١ز ٠رذأ ئفذجس

. قحس٠ف ئمحف١س

Page 34: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

web reports ف جإلفذجس (Enterprise . )

( . Enterprise) دالس 349ئ (Basic) دالس 79 جألعحس ضرذأ

. Rave reports Quick Reportضفش أدجز إلعط١شجد ضك٠ ضمحس٠ش

جـ ( PascalScript,C++Script,BasicScript,Jscript ) ل كشس جغىشذص

Debuger .

. Dialog-Pageق ففكحش جكجس

. ضغ١ك ؾ١ذ

. (وح لر د جذف )د ١١ىد

. Fast Query Builder' ذح جإلعطالحش'٠أض

, pdf , xsl, rtf , html ,bmp , tiff , jpeg , gif, csv , txt , mail , odt:جطقذ٠ش ئ

ods .

سهبياح

( . Professional)جغسط طفش ؿحح ئذطذجءج جإلفذجس

FastReport VCL 5جؿذ٠ذ ف جإلفذجس جمحد

ضكغ١حش ف جكشن .

جرحسود :* وحتحش ؾذ٠ذز زوش حDataMatrix PDF417 *Zip

Code ..

+ جطقذ٠ش ئ :BIFF XLS / PPTX / XLSX / DOCX .

ججؾس ذحـRibbon ... .

Page 35: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

DevEXpress ExpressPrinting System

ييزاح

ExpressPrinting System ح طمذ طػ١ جر١ححش ح ىرحس ف خق١قح

طمذ٠ جؾس جغطخذ ئ جقفكس جيرس

٠ExpressPrinting Systemغف ' ف جطمش٠ش 'Report Linkرش ضىؾ١ح

ExpressQuantumGrid ػ vclذاخشجؼ كط جطكىحش

ExpressVerticalGrid جذ٠ذ جىحش زوش ح :

TPicture/TImage TDBImage/ TMemo

TDBMemo/TCheckListBox/TListBox TDBListBox/TListBox

TDBListBox/TRichEditTDBRichEdit

TListView/ TTreeView/ TChart TDBChart/TStringGrid ...

! ٠فش ه جمذسز ضمذ٠ ضمحس٠ش غ١ش كذدز ذغشس رشجؿه ذذ ضق١ ضمش٠ش جقذ

. Standard Advanced Ribbonجح٠س ذػالظ ىشق قغد جإلخط١حس

. XE ئ ٠7ذ جذف

. ضغ١ك ؾ١ذ

سهبياح

. ف قؿ جف جطف١ز MB 5 ص٠حدز قج

. فمو Pdfجطقذ٠ش ئ

ػال TStringGrid ح ٠ؿه ض ذحـ Report Link م لحتس جـ DBGridال ؾد ـ

. ExpressQuantumGridأ ؽشجء

. دالس ئرج لص ذؾشجت قذز 199جغش

Page 36: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

Page 37: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

Wow64DisableWow64FsRedirection

:ض١ذ

64 أشش ١س د ح Embarcadero Technologiesذح أ جؾشوس جف١س جكح١س

إلفذجسجش جغطمر١س ذف ف جكىس أ رذأ جرحدسز X64 Compilerذص ذشؿس

.جالقطىحن ذحح كحس ف آ١حض ىشق

زج فنص أ جىشـ ذل جألػس ؽى عغس محالش ضير١م١س ٠ط ؾشح ققشج ذحغس

Slug Analysisجشذ١س ف ئفذجسجش ؿس طذ دف شخ ذحغس جالؿ١ض٠س ف ذس Lab.

:م جمحس

ذص، ق١ع ذش ؽشوس 32 ذص 64 ذص ذشس ور١شز ف جطح ضير١محش ٠64طط ح

ئ ضمغ١ عؿ جح ؿذجض ئ لغ١، جمغ جألي جألعحع ٠خـ شح٠ىشعف

ذص جمغ جػح وشقس جطمح١س ٠كط ضير١محش 64ضير١محض جالفطشجم١س ذح ج ح

. ذص32

٠ط حؿس جشعحت ضف١ز جألجش ذذ جفكـ جطشف ١س جطير١ك جز ٠ط

ذص م 64 ذص جػح 32ضؾغ١، ػال رشؽ ضير١م١ طحغ١ ف جألجش، جألي

ذص، ذذ جعطذحء ذ٠ش جح عف الق أ جح ضق١ف 64ذطؾغ١ح ح

. جػح ضشو قح32طير١م١، جألي أمحف ئ١

ذص أسجد أ ٠طح ؿذ جح 32عف ؿذ فظ جطق١ف ف قحس ضير١ك

%SystemRoot%\System32 جح ٠م ذ ،Redirection ئحدز ضؾ١ ذقفس

قط أ SystemRoot%\SysWOW64% ذص 32جفطشجم١س غحس ئ غحس ضير١محش

عف C:\Windows\System32: وطرح جغحس ذذ طغ١شجش جح ذقفس فش٠كس ػ

C:\Windows\ SysWOW64 :٠ط ضؾ١ح ئ زج جغحس جزوس عحذمح

STRELiTZIAذم – ذص 64 عغس جطح ح

Page 38: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

جغرد جط١ طفحد جألخيحء جكطس وح غ١ش ره، ىرح ؽشوس ح٠ىشعفص

أيص خ١حس ضي١ ضؾغ١ ئحدز جطؾ١ رشؽ قغد ح ٠ش٠ذ جؿحص س ضكطحؼ ئ

.جطح زج جخ١حس

MSDNالعطضجدز جلطرحط ل

Wow64DisableWow64FsRedirection Function

Disables file system redirection for the calling thread. File system redirection is enabled by default.

Syntax

BOOL WINAPI Wow64DisableWow64FsRedirection(

__out PVOID *OldValue

);

Parameters

OldValue [out]

The WOW64 file system redirection value. The system uses this parameter to store information necessary to revert (re-enable) file system redirection.

Note This value is for system use only. To avoid unpredictable behavior, do not modify this value in any way.

Return Value

If the function succeeds, the return value is a nonzero value.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

Page 39: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

Remarks

This function is useful for 32-bit applications that want to gain access to the native system32 directory. By default, WOW64 file

system redirection is enabled.

The Wow64DisableWow64FsRedirection/Wow64RevertWow64FsRedirection function pairing is a replacement for the

functionality of the Wow64EnableWow64FsRedirection function.

To restore file system redirection, call the Wow64RevertWow64FsRedirection function. Every successful call to the

Wow64DisableWow64FsRedirection function must have a matching call to the Wow64RevertWow64FsRedirection function. This will ensure redirection is re-enabled and frees associated system resources.

Note The Wow64DisableWow64FsRedirection function affects all file operations performed by the current thread, which can

have unintended consequences if file system redirection is disabled for any length of time. For example, DLL loading depends on

file system redirection, so disabling file system redirection will cause DLL loading to fail. Also, many feature implementations

use delayed loading and will fail while redirection is disabled. The failure state of the initial delay-load operation is persisted, so

any subsequent use of the delay-load function will fail even after file system redirection is re-enabled. To avoid these problems,

disable file system redirection immediately before calls to specific file I/O functions (such as CreateFile) that must not be

redirected, and re-enable file system redirection immediately afterward using Wow64RevertWow64FsRedirection.

Disabling file system redirection affects only operations made by the current thread. Some functions, such as

CreateProcessAsUser, do their work on another thread, which is not affected by the state of file system redirection in the calling

thread.

Examples

The following example uses Wow64DisableWow64FsRedirection to disable file system redirection so that a 32-bit application

that is running under WOW64 can open the 64-bit version of Notepad.exe in %SystemRoot%\System32 instead of being

redirected to the 32-bit version in %SystemRoot%\SysWOW64.

Page 40: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

#define _WIN32_WINNT 0x0501

#include <Windows.h>

void main()

{

HANDLE hFile = INVALID_HANDLE_VALUE;

PVOID OldValue = NULL;

// Disable redirection immediately prior to the native API

// function call.

if( Wow64DisableWow64FsRedirection(&OldValue) )

{

// Any function calls in this block of code should be as

concise

// and as simple as possible to avoid unintended results.

hFile = CreateFile(TEXT("C:\\Windows\\System32\\Notepad.exe"),

GENERIC_READ,

FILE_SHARE_READ,

NULL,

OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL,

NULL);

// Immediately re-enable redirection. Note that any resources

// associated with OldValue are cleaned up by this call.

if ( FALSE == Wow64RevertWow64FsRedirection(OldValue) )

{

// Failure to re-enable redirection should be considered

// a criticial failure and execution aborted.

return;

}

}

// The handle, if valid, now can be used as usual, and without

// leaving redirection disabled.

if( INVALID_HANDLE_VALUE != hFile )

{

// Use the file handle

}

}

:ػحي ضير١م

Page 41: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

procedure TWinMain.CopyBtnClick(Sender: TObject);

var

Wow64DisableWow64FsRedirection: function(var OldValue: Pointer):

BOOL; stdcall;

Wow64RevertWow64FsRedirection: function(OldValue: Pointer): BOOL;

stdcall;

OldValue: Pointer;

begin

try

OldValue := nil;

CopyFile(PChar('C:\Windows\System32\Notepad.exe'),

PChar('C:\Test\Notepad32.exe'), TRUE);

Wow64DisableWow64FsRedirection :=

GetProcAddress(GetModuleHandle(kernel32),

'Wow64DisableWow64FsRedirection');

Wow64RevertWow64FsRedirection :=

GetProcAddress(GetModuleHandle(kernel32),

'Wow64RevertWow64FsRedirection');

if Wow64DisableWow64FsRedirection(OldValue) then

begin

CopyFile(PChar('C:\Windows\System32\Notepad.exe'),

PChar('C:\Test\Notepad64.exe'), TRUE);

MessageBox(Handle, PChar('Wow64 file system redirection

[Disabled sucessfully]'), PChar('INFORMATION'), MB_ICONINFORMATION);

end

else

begin

MessageBox(Handle, PChar('Unable to disable Wow64 file system

redirection'), PChar('ERROR'), MB_ICONERROR);

Exit;

end;

if Wow64RevertWow64FsRedirection(OldValue) then

MessageBox(Handle, PChar('Wow64 file system redirection [Enabled

sucessfully]'), PChar('INFORMATION'), MB_ICONINFORMATION)

else

MessageBox(Handle, PChar('Unable to Enable Wow64 file system

redirection'), PChar('ERROR'), MB_ICONERROR);

except

(* nothing *)

end;

end;

Page 42: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

:التعليق على المثال

Kernel32.dllجؿضء ج ذح جألخنش ٠خـ ضش٠ف دجط١ ضقذسح ىطرس

. ذص ىش٠مس جكقي جح جىطرس64جؾدض١ فمو ح

.جؿضء ج ذح جر ٠خـ جعطذحء دجس جطي١ ئحدز جطف١

.جؿضء ج ذح جألصسق ٠خـ ١س جغخ لر ذذ حؿس خحف١س ئحدز جطؾ١

ؿذ جح notepad.exe جطير١ك ٠م ذكحس غخ ف

C:\Windows\System32ؿذ ئ C:\Test جطؾ١، ف١م جح ئحدز ذذ ضي١

C:\Windows\ SysWOW64 ذص32 جؿذ جخحؿ ذطير١محش ئذطؾ١ جغحس

. جطؾ١ئحدز ذص، غ ٠ى جطير١ك ج١س ذطي١ 32 فكق ف

٠ط ف١ قف قحس جطؾ١ لر ه- خشؼ - جطؾ١ ضيد طغ١شئحدز دجس ضي١ أالق

. جطؾ١ئحدزف١ح ذذ ذجس ضف١ - جم١س جشؾس - جألخ١شز ضش٠ش زضي١ح، ٠ط

Page 43: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

ذص جغحس 64 ٠ط غخ جف ؾذ٠ذ فكق ف غح ى ز جشز ف

.C:\Windows\System32 ح جالفطشجم

. جطؾ١ئحدز ف جألخ١ش ٠م جطير١ك ذطف١ خحف١س

. جطؾ١ئحدزجغحذك جز ض قف ٠ط ضش٠ش ذجس ضف١ - جخشؼ - جطغ١شأالق

خيحء ضؿ جح غ١ش أ ف طغرد ز ج١س س ؾذج ى ال أ طر أ ٠ؿد

. ذص64 ذص 32غطمش غ١ش دل١ك ف ضغ١١ش ضؾغ١ ضير١محش

: حضؽ ١س جغخ، الق جقس جطح١س

Page 44: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

Page 45: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

. ذص64 ذص ال ٠خـ ضير١محش 32 جطؾ١ ٠خـ فمو ضير١محش ئحدز: القس حس

جططر ج ٠ؿد ١ه أخجفحش جقذس٠س شفمس جف جطف١ز طؿشذس، ال ضغ

ئحدز ذح ٠خـ جفحش جقذس٠س ف١ىه فطكح أح ذص، 64ضؾغ١ جف جطف١ز ف ذ١ثس

. ذص د ؾحو32ذحتح ذ١ثس

ؽحء جهلل ئ ذحطف١ك

ؾ جطير١ك ٠طشف جر١ثس ئ ؽحء جهلل ئف جمحي جمحد جغغس عف طيشق

. ذص جطحدج ح ضقذس ىطرحش جح دجي64 أ ذص 32جط ٠ؾطغ ف١ح،

Page 46: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

انحاس انزس

(ز جمحس ضؿ ذ١ جؿذ جضي، ٠ؿد أ ضمشأ فك ره: ضر١)

أوشى - ضخيش ذح فسز TButtonال أ حرج ف دف وح سأ٠ص ى جضس

.جكحس، ضطذج ف خ١ط أؾ جؾر ذ١ح- جهلل

يالحظت يت

ئ أؽذ جحط : لر أ غطشع، أد أ أؽذد ميس حس ؾذج،

ضمذ٠شج جقطشجح ئؿحذح ذزج جخق، أعف ف محط ز ذأ

. جغخش٠س أ جالعطضجء ضقش٠كح أ ض١كح، زه ى جمك١ ز جرذج٠س

. أ٠نحButtonىرح ئقطشج ضمذ٠ش ئؿحذ زج ٠غكد جي

غطأف مح

؟... جكحس Buttonأ ح أؾ جؾرر ذ١ جي .. حرج ره

فا أي ؽء Form1ذح ٠رذأ جرشؽ ؾشح ؾذ٠ذج ف دف ضش أح حفزز جرؼ

٠رحؽش ف وطحذس Double Click جؾحؽس غ ضه ضه ٠Button1م ذ م

.جط١حش

؟ أل جأللشخ ١ذ جرشؽ، ال ضؾذ ذ ضم١ذجش ئمحف١س ورحل جطكىحش، Buttonحرج

clickألقذ .. فغ١ش جكؿ ال ٠أخز ق١ضج ف جؾحؽس ، ذ جطؾغ١ ٠ىف١ خضز ف خحفشض

.١ح ف١م ذطف١ز جط١ف جز ٠ك ح ذغ قؿ

خانذ انشقشي ذم - ج ــىــحش دف

Page 47: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

جؿ١س جط١١س جط ذح ٠ى رشؽ أ Buttonأ٠نح جضج٠ح جط ٠مذح جي

٠ ض١حض جرشؿ١س، ٠مغح ئ أؾضجء شس ٠ى ئدجسضح جغ١يشز ١ح ذغس، ف

.. و ١فس أ ١ضز ؾذ٠س ٠ش٠ذ أ ٠ن١فح جرشؽ رشحؿ، ح ١ ئال أ ٠ؿذ قن١شز

double غ Buttonألقذ رؼ ؽحؽس ف١ ق١ض ذغ١و ٠ن ف١ جي .. فج شز أخش

click٠نخ ف١ ح أسجد ود .

ئرج أسجد جرشؽ أ ٠طمد يم١س ذشحؿ أ أ ٠شجؾ أ ٠قف ١فس ح ف١، ح ١ ئال

. رجش جاللس ٠رؼ ضكطButtonأ ٠زد رحؽشز ئ

...جىػ١ش جرشؿ١ ٠طذ وأفن أغد أعش شوخ طك١ جط١ف دجخ

.و أذيح ضك دجخح أوجد ٠ق ذجح ؾشجش ذ جثحش جط١حش جرشؿ١س

.و أذيح ضك دجخح أوجد فق١س ؾش٠س رشحؽ

. ي١، ع جم١حد، ٠طك ؾحق جىد غم، ال ٠ؾى ح قص Button١جي

. ح ؾحء جؾر

. ال ٠ك ح ٠غطكك حس ؾ١ذزButton زج جي

أ TButton ؾس جمحت١ ذشحؽ دف، فز جإلفذجس جألي دف، ٠ؿش

.2009ضغ١١ش أ ضي٠ش، ج ئىح١س ئمحفس فسز ح غخس دف

أرحء، ذشغ مخحس Button ؾس جرشؿ١، ق١رس، فرشغ ح ٠طك جي

جط١ف جىطخ دجخ، فا قنشز جرشؽ ال ٠طىف حء ئيحء ئع كطش ١٠ك ذح

٠طك، فؿذ ٠رم جالع جالفطشجم جز ٠أض ذ وح ، وأ أد ؽأح أ

، 1 ىزج قحس Button3 غ Button2 جػح Button1: ٠غ، فؿذ أعحء أذيح

.3 ، قحس2قحس

Page 48: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

٠ط ضؿح ضحح، ذشغ Buttonأح ؾس أدذ١حش جرشؿ١حش ضم١حضح ؿ١حضح فا جي

ك ضأغ١ش ضع ؽر١ط، وح ججؾد ئفشجد ؿ١س أ ف ذشؿ خحؿ ذ،

أ جك BOP ئخطقحسج Button Oriented Programming :٠ى أ ٠ى ئع

٠غططر زج جطك١ ذحك جري، . جضس رشؿس أ جرشؿس جضس٠س أ جرشؿس جري١س

.جطق١ جري ىزج

فأح أفن ضغ١س ز جؿ١س أ زج جف ذاع ر دالس أوػش، : ئرج عأط سأ٠

. (خؼ ٠ح رحسن ذكحسن): ٠غط ضشجغح جؾر جش٠ك، جطغ١س

أ جرشؿس ذيش٠مس سحز Cowboy Coding: ح ضؾذ ؿ١س ذطغ١س ؽر١س

. جرمش، ى وح ضالق ضغ١ط أفن أوػش دالس

http://en.wikipedia.org/wiki/Cowboy_coding

Buttonظاشة ال

Button أ ذحألدق ئؾشجت١س جكذظ جخحؿ ذحمش جي Buttonحشز جطحد جي

حشز . جرطذت جحسع جكطشف. حشز طؾشز ذ أغد جرشؿ١

مرس رذت١ح ، خحفس ف ذ١ثس ذشؿ١س شت١س عش٠س ور١ثس ضي٠ش دف، فا وطحذس جط١حش

جرشؿ١س دجخ قذظ جمش جضس ؽء ىر١ ذذ٠، فحرشؽ ٠طىف حء ئؾحء

ضغ١س ئؾشجت١س ؾذ٠ذز حء وطحذس أش جإلعطذحء ح؛ ذ فمو جمش جضدؼ جضس فطم

دف ضمحت١ح ذاؾحء جإلؾشجت١س، أش جالعطذحء ٠ط أ٠نح آ١ح ذؿشد جنغو جضس ذذ

. ضؾغ١ جرشحؽ

جرطذت ٠ؿذ جألش طح عال، ف ججل ٠فش ذ٠ لص ور١ش ٠غطغ ف جطشف

. ذحل جق جطي٠ش جرشؿس

أ٠نح جحسع ر جخرشز جكطشف، ٠ؿذ جألش عال رحؽشج، ئرج أسجد جكطشف

ضؿشذس فىشز ح، أ ئذجد رؼ أ ك ؾىس ذشؿ١س، فا أعخ جىطحذس دجخ جضس

.أ٠نح أش ىر١ مري

Page 49: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

.لذ ٠ى جألش مرال ئرج وح جرشحؽ فغ١شج خف١فح ذؾحؽس جقذز أ جغطح.. أ٠نح كذ ح

. ى غ١ش ره فا جألش ال٠ذ مرال

جرطذب ذذ أخز فىشز جإلىحس جح رشؿس ئذجد جطير١محش، ٠ؿد أ ٠طخـ ز

.جحدز، أ ٠م ض١حض جرشؿ١س ٠صح ف ئؾشجت١حش خحفس

جكطشف، ذذ أ ٠خطرش ض١حض ٠طأوذ فالق١طح، ١ أ ٠م فسج ز جط١حش

. ال٠طىحع زج جألش. ئ ئؾشجت١س خحفس

وأدجز أدجش جؾس جإلعطخذج ٠ؿد أ الضخطف ١فط غ١ش Buttonجضس أ جي

صس ئحسز جقرحـ ػال ١فط فمو ئيحء جإلؽحسز أ . جألصسجس جط ؿذح ف ك١يح جحػ

صس ذذء ضؾ١غ جطى١١ف ٠ي جألش . جألش قرحـ جز ٠م ذحح جف١س ١س جإلحسز

ؿحص جطى١١ف ١م ذ، أ أ جضس ف قذ رجض ال ٠م ذح جإلحسز وح أ ال ٠م ذح

.جطى١١ف

٠غكد أ٠نح ذحل أج حفش جؾس جالعطخذج Buttonقذ٠ػح جغحذك جي

. غ١شحMenu ListBox CheckBoxأج جألقذجظ جط ضغطمرح ػ

Page 50: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

Buttonيا را بعذ ال

( function, procedure)ج٢ ذذ أ جضفمح مشسز جطحد ئؾحء جإلؾشجت١حش

.م ض١حضح جرشؿ١س ف١ح؛ طم ئ جكذ٠ع جإلؾشجت١حش

ف ذذج٠حض جرشؿ١س قك فذ٠ك أعطحر ذأ أ٠س ئؾشجت١س ضرشؿح ٠ؿد أ ال ضطؿحص

ض١حضح جرشؿ١س عر ض١حش، ذأ جم جرؾش ألق ذد جي١حش ٠ى أ

. ٠طقس أ ٠طح ف لص جقذ عر ال أوػش

ى ١ظ )جفىشز ١ظ أ طض ذزج جذد ذحرو، ع١ى جألش فرح وػ١ش ح

، جفىشز أ ضى ىي جإلؾشجت١حش أفغش ح ٠ى، ضكط أل ح ٠ى (غطك١ال

. ي١حش

فال ، ذحير، وأ ق١كس ضى أورش غطج فا أ ذح جق١كس جغح١س،

.، أط ضشف...... مذ وص قـ: أطشف

مذ ح١ص الصص أح ط١ؿس ذ أخز ذز جق١كس، ف جىػ١ش جألق١ح ئرج شش

ؾىس ف ئقذ ذشجؿ أقحي أ أضطرح إلفالقح أ ضذ٠ح ، أؾذ أ جيمس جط ذح

جس غحرح ح ضى ف ئؾشجت١س دعس ى٠س، ذح أقحي أ أقذد ذحرو أ٠ ى جخيأ

أ جطشو١رس جيم١س جط أدش ئ١ أؾذ فغ شضرىح قحتشج أح ئؾشجت١س ى٠س ش٠نس،

ضض٠ذ جػالغ١، غ محى دعس و مي ال ٠خ variablesضطمذح فف جطغ١شجش

و جقذز ح ضإد ألخش، if then ؾ ؽشى١س nested loops قمحش طذجخس

. جط ضطىشس ضطص ذ ىي جإلؾشجت١سbreak exitح١ه ض١حش

جط١ؿس أ لطح ور١شج أعطغشل كحس ف ح ضم ذ جإلؾشجت١س، لطح أورش شفس ىح

ض ضكش٠ش، ى ىػشز objectأق١حح جس ضى ضحفس وغ١ح الس أ جعطحي وحت . جس

. جألعيش ضؾحذىح ضؿض ج١ سؤ٠س ز جس

وح أح ضؾى . ىي جإلؾشجت١حش دعحطح أورش ىح جػغشجش ج ف جرشجؽ

أوػش جمرحش أح ضذ٠ جرشحؽ أ ضي٠ش أ م ذ١ثس ئ أخش أ ضشؾط غس

.ىي جإلؾشجت١حش أورش حتك ف عر١ ئدجسز شس ىد: ذاخطقحس. ذشؿ١س ئ غس غح١س

Page 51: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

فىش ف جرشحؽ أ ؿس جكح٠حش أ جقحد٠ك، و ئؾشجت١س ضػ فذلح،

ج٠ح أفن، أ ٠ى ذ٠ه ؾش٠ فذلح فغ١شج ذطحي ق ج١ذ ججقذز، و فذق

ذ جقذ ججد، أ أ ٠ى ذ٠ه غالغس فحد٠ك ورحس و جقذ ح كؾس ف١ جد

؟ . أج خطفس، ضؿض ق ذفغه

جقحد٠ك جقغ١شز ح وح ذدح، عس جحس ٠ىه ض١ح ئدجسضح ضص٠

. كط٠حضح ذحى١ف١س جط ضش٠ذح

م أيش سم؟.. انخحكى في طل اإلجشائيت

ذح ضرذأ ذحرشؿس ضه . أطشف، ذأ جطكى ف ىي جإلؾشجت١س أش فد ف جرذج٠س

جفىشز جؿس ضغ١يش ١ه طف١زح، ضغحس ض١شز جىد، ضه جفس جشضؾس

إلمحفس خحف١س ؾذ٠ذز أ ضؿشذس غحس آخش غ ضؾغ١ جرشحؽ شفس جط١ؿس، جدز ىد

نرو ذل جألس أ ئمحفس جعطػحء، أ شفس حرج م ذىزج ذذال وزج، و زج ٠ؿ

أص . جم ذ١ذج و جرذ جالطح ذط١ جىد أ ضرغ١ي أ ضمغ١ ئ ئؾشجت١حش

عو شوس كطذس، أفحذه ضىحد ضمذـ ؽشسج ، ال لص ذ٠ه طفى١ش ف أس ض١١س

.ضغ١م١س س

ضغطشع جإلؾشجت١س ف جيي، و ض١س ؾذ٠ذز ضذ ؾشز غ١شح، خحفس ئرج وص ذقذد

؛ فا optimization أ ذحنرو سف جىفحءز Graphicsذشؿس رجش اللس ذحشع١حش

.جألعيش أحه ضطذج ضطجذ قط ضق١ف جإلؾشجت١س ذكؿ ز جمحس

ى ذذ جطحء جشوس، جىثحه طحتؽ، لر أ ضطم ئ م آخش؛ قحي أ ض١ذ

. جش ف جإلؾشجت١س ل ذطك١ح ضمغ١ح ئ ئؾشجت١حش أفغش فأفغش

جلص، ضؿذ فغه ضمحت١ح ضفىش ذيش٠مس خطفس ذ وطحذس جإلؾشجت١حش، ذذ حء ه،

.٠م مه ضمحت١ح، ذاؾرحسن ذحء ئؾشجت١حش فف١شز خف١فس ز جرذج٠س

Page 52: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

أفضم اناسساث انبشيجيت

:طم ئ ذل أفن جحسعحش جمجذ ذ وطحذس جإلؾشجت١حش

عذد أقم ي األسطش

قذد ذدج ١ح جألعيش ف جإلؾشجت١س ججقذز الضطؿحص، جرل ٠مي خغ عيشج،

ج أ ٠ى ذد جألعيش أل . جرل ٠مي ؾش، آخش ٠فن خغس ؾش عيشج

ل ذطم١ـ ذد جألعيش : ح ٠ى، ضضج٠ذ حسجضه جرشؿ١س، ضد مه زج جم١ذ

.و شز

أسطش قصيشة

.حن خو د ٠غحس جكشس قحي أ ال ضطؿحص. ال ضؿ عيش جط١حش ى٠ال

يسخيا كحذ أقصى

ضؿد جكمحش جؿ جؾشى١س . ال ضؿ جط١حش ضطك ألوػش غط١٠ وكذ ألق

:جطذجخس، جط ضرذ ػ جغح جكحدز

while do

while do

while do

while do

while do

do WhatEverYouWantToDo

end

end

end

end

end

if

if

if

if

do something

end

end

end

end

Page 53: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

انخقهيم ي انخعهيقاث

جالقحش جط١حش جرشؿ١س أش يخ ئرج وحص جط١س Commentsجط١محش

٠قد فح أ ف طح، ى جألعحط حرج ىطد ض١حش فرس جف؟ وح وحص

جإلؾشجت١س . جط١حش عس جمكس وح وح ره أفن، ذحطح غطغ جط١محش

.جط ال ضكطحؼ ئ ض١ك أفن ضه جط ضكطحؾح

ال حعيذ فس انكد يشحي

ئرج ؾذش فغه ضغخ ض١حش ئؾشجت١س أخش ض١ذح، فزج إؽش أل ض١ذ جطفى١ش ف

.جط١حش جغخس أ ضنح ف ئؾشجت١س خحفس ذح

قى بحسبت اإلجشائيت في عقهك أال

رشحؿه طأوذ عالس جىد جىطخ، قحي أ ضم Compileلر أ ضم ذحألش

سجؾ ذرقشن جط١حش جىطذس ضطرح عيشج عيشج قحي . ذز ج١س ف مه أال

جحسعس جذجتس ز جحدز . compilerأ ضىطؾف ج ذفغه لر أ ٠ىطؾفح جي

.ع١ط مه و١ف ٠طؿد ىح جألخيحء جط حدز ح ضم ذح

انخسيت اناضحت انقصيشة

ضغ١س جإلؾشجت١س ٠ؿد أ ٠ى دجال ح ضم ذ، أ ال ٠ى ى٠ال، أ ال ٠ى

أفن جطغ١حش ح وح ٠ك وس جقذز أ وط١ . خطقشج ف قشف١ أ غالظ

.وكذ ألق

٠مي جخرشجء ئرج وحص جطغ١س خطقشز ؾذج أ ى٠س ؾذج فمذ ٠ زج أ جالؾشجت١س ضم

زج ٠مدح ئ جمحذز . ذذز أس ح ٠قد ١ه ئ٠ؿحد ئع جمف ح ذىس أ جغط١

.جس جطح١س

يت احذة نكم إجشائيت

ئرج ال قص أ جط١حش . جإلؾشجت١س ٠ؿد أ ضم ذس جقذز فمو ١ظ أوػش جقذز

جعطشعص فمذ ٠ زج أ ح أخش ذذأش ذحس ، ؾد ئفشجد ئؾشجت١س فقس

. خحفس ذح

Page 54: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

ئرج قممص زج جألش، فغطؿذ أ ذحل جمحه . ز سذح أ حسعس ٠ؿد أ ضطه حسضح

.جط عشدحح ضطكمك ضمحت١ح

انشاحعت انخقيح

ذ١ و ق١ آخش ل ذشجؾس جىد، ىرك ١ حعرك لجذ، أؾ ف و شز

. أوػش ذغحىس مقح

Page 55: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

جؿضء جػحخطة خطة

.جف ح ذذأح ؾالش ف جمحس جغحذمس طشف أوػش فح١ جك ىحت

انجنت انخايست

ؾذ٠ذز، ى ز جشز عطى ؾطمس فف١س classعف م ج٢ ذاؾحء فف١س

TPerson ،جقف١س جؿذ٠ذز ش٠ذ ذح ضػ١ فثس ١س جألفشجد فثس جف١ ،

ضكص uOOP ، عم ذطش٠ف ز جقف١س ف قذز TEmployeeعغ جقف١س جؿذ٠ذز

: ره وحطحTPersonضش٠ف فف١س

TPerson = class(TObject)

-------

-------

end;

TEmployee = class(TPerson);

خانذ انشقشي ذم - دفج جرشؿس ذحك جىحت ف

Page 56: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

. TPersonوح جمف أال؛ لح فمو ذطش٠ف جقف١س جؿذ٠ذز ذ١ح أح ؾطمس

. ن ف١ح أ قش آخش

. طؿشذس ز جقف١سButton2، ألطشـ ح ئؾحء صس آخش TEmployeeؿشخ جقف١س

، جطغ١١ش جق١ذ جعطخذج Button1عطى جط١حش يحذمس ضحح طه جط دجخ

TEmployee ذذال TPerson ضغ١س جطغ١ش ذاع Empوحطح :

procedure TForm1.Button2Click(Sender: TObject);

var

Emp: TEmployee;

begin

Emp := TEmployee.Create;

try

Emp.FirstName := 'Ahmad';

Emp.LastName := 'Hamza';

Emp.BirthDate := EncodeDate(1980, 3, 15);

ShowPerson(Emp);

finally

Emp.Free;

end;

end;

عش أ جط١ؿس يحذمس ط١ؿس جضس Button2م ذطؿشذس جرشحؽ، ؾغ جضس

.جألي

ؾحء خح١ح أ٠س حفش أ TEmployeeحرج زج جطيحذك ذشغ أ ضش٠ف جقف١س

ذحطح عطشظ ؾ١ TPerson ؾطمس فف١س TEmployeeأل جقف١س . ئؾشجت١حش

Empجطغ١ش )زج ٠ى أل شف أ طغ١ش جقف١س جؿذ٠ذ . ففحضح خقحتقح

.GetAge أ FirstNamأ ٠فز خقحتـ جقف١س جألف ػ (ف ػحح

Page 57: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

، فرشغ أ ز ShowPersonجألش ج٢خش جفص ش؛ أح لح ذذجء فظ جإلؾشجت١س

ئال أح ضح ذح شسح ح TPersonجإلؾشجت١س ف ضش٠فح ضغطمر ي

٠كط مح TEmployee، حرج؟ أل ذحغرس ح TEmployeeي

.TPersonج

:ض٠ذ جالعطىؾحف ٠ىح صس جىد جطح ف ذذج٠س ضف١ز جإلؾشجت١س

procedure TForm1.ShowPerson(P: TPerson);

begin

if P is TPerson then Caption := 'Person';

if P is TEmployee then Caption := Caption + ' Employee';

Caption := Caption + ' ' + P.ClassName;

. . . .

. الق غ غططؽ جفشقButton2 غ ذجعيس Button1غطذ جالؾشجت١س ذجعيس

ئمحفس خحف١س ؾذ٠ذز

جخحف١س ئعح . ضػ جشضدTEmployee ؾذ٠ذز قف١س propertyن١ف ج٢ خحف١س

Salary

:وحطح

TEmployee = class(TPerson)

private

FSalary: integer;

procedure SetSalary(const Value: integer);

public

property Salary: integer read FSalary write SetSalary;

end;

ال اللس ح ذحقف١س TEmployeeالق أ ز جخحف١س جؿ١ذز ضخـ فمو جقف١س

ذحسجغس غ ضض٠ذ TPerson ذ٠ح ؾ١ ففحش TEmployee، أ أ TPersonجألف١س

.١Salaryح جخحف١س

Page 58: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

غطخذ Button2ف جكذظ جخحؿ ذحضس . ش ج٢ و١ف طفح ز جخحف١س جؿذ٠ذز

:خز جخحفس غذ ح ل١س

procedure TForm1.Button2Click(Sender: TObject);

. . . . . . .

. . . . . . .

Emp.LastName := 'Hamza';

Emp.BirthDate := EncodeDate(1980, 3, 15);

Emp.Salary := 1200;

ShowPerson(Emp);

. . . . . . .

. . . . . . .

end;

كحي ئحس ل١س ز جخحف١س جؾحؽس م جم١ ShowPersonغ ف جإلؾشجت١س

.جألخش

: وحطحShowPersonطزو١ش ض١حش جإلحس ف ئؾشجت١س

Canvas.TextOut(10, 10, P.FirstName);

Canvas.TextOut(10, 30, P.LastName);

Canvas.TextOut(10, 50, DateToStr(P.BirthDate));

Canvas.TextOut(10, 80, P.GetFullName);

Canvas.TextOut(10, 100, IntToStr(P.Age));

:ج٢ أمفح جط١س

Canvas.TextOut(10, 120, IntToStr(P.Salary);

. (Undeclared identifier) غ١ش شفس Salaryفا جطشؾ ع١ي١ح سعحس خيأ ذأ

ف حرج . P.Salary أ P ذح ؾحءش ذحغ١حق جطغ١ش Salaryح ٠مقذ جخحف١س

.Salary جط ف جألف ال ضك جخحف١س TPerson جقف١س Pفا

سغ أ جم١س Pئرج حرج جفمص جإلؾشجت١س جعطمرحي جم١س ف جي

TEmployeeأل ذحغرس ح فا : ؟ وح روشح عحذمحTEmployee ٠كط مح

.TPersonج

Page 59: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

ح دج زج ج ؾطك TEmployeeئرج جطشؾ جفك ئعطمرحي ل١س

TPerson ى ٠جفك حدجز جخحف١س Salary ذحغ١حق P أل P شف ف جألف

. جز ال٠شف ز جخحف١سTPerson أ

ح جك؟

ف لحد TPerson أ قد ج . Castingجك ذحعطخذج ضم١س جقد أ جمرس

TEmployeeوحطح : TEmployee(P).Salary أ أح رظ P غ١حخ

TEmployee.

TEmployee أل TEmployee أ Pح أؾرشح جطشؾ أ ٠ح

.TPerson جط P فا ال ٠ح أ ٠كطن TPersonؾطك

:زه عذي ض١س جإلحس طى وحطح

Canvas.TextOut(10, 120, IntToStr(TEmployee(P).Salary));

؛ م ذامحفس ؾس ؽشى١س TEmployee ؾدز فمو ف ج Salaryأل جخحف١س

.P TEmployeeضطأوذ أ ل١س

if P is TEmployee then

Canvas.TextOut(10, 120, IntToStr(TEmployee(P).Salary));

ذحيش٠مس (، جمرس، جطر١ظCasting)ف دف ٠ى أ٠نح أ م ذ١س جقد : القس

: جطح١س

(P as TEmployee).Salary

.جألش طشن طفن١ جرشؽ

Page 60: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

س انخشكم Polymorphismانخح

٠ى أ method جإلؾشجت١س/ أ جحؼfunctionف أشجف جك ىحت فظ جذجس

.ضفز ذحوػش ىش٠مس رش عغس جقف١حش جؾطمس ذل

. جط ضم ذؿ جإلع جألي جػحGetFullName ضؾذ جذجس TPersonف فف١س

ضم ذاحس جإلع ذقسز خطفس جكفح ٠TEmployeeىح أ ؿ جقف١س

.فظ ئع جذجس

:طف١ز ره م ذحطح

:TPerson ف فف١س GetFullName ف ضش٠ف جذجس virtualأال م ذامحفس ع

function GetFullName: string; virtual;

.زج جع ٠ط١ف قف١حش جؾطمس أ ض١ذ ضش٠ف فظ جذجس أ ضشظ ضف١زح ئرج أسجدش

: ذحيش٠مس جطح١سTEmployeeغح١ح، ١ذ ضش٠ف فظ جذجس ف فف١س

TEmployee = class(TPerson)

.. .. ..

public

function GetFullName: string; override;

.. .. ..

Page 61: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

ف ح٠س ضش٠ف جذجس، جز ٠ؾ١ش ئ أ جذس ف ز جقف١س overrideالق جع

.عطغط جطف١ز جغحذك ف جذجس جؾطمس

ف ؾغ جذجس م ذادخحي جط١حش جؿذ٠ذز جخحفس ذاحس جالع، ح ح جخ١حس ذأ مي

:جاللس جطف١ز جغحذك كذد ضف١زج ؾذ٠ذج ػ

function TEmployee.GetFullName: string;

begin

result := 'Mr.' + ' ' + LastName + ', ' + FirstName;

end;

: ذل جطك٠شTPersonأ غطخذ جطف١ز جغحذك ف فف١س

function TEmployee.GetFullName: string;

begin

result := 'Mr. ' + inherited GetFullName;

end;

. جز ٠ ضف١ز ح سظinheritedالق جألش

خطش أ٠ح جطف١ز٠ ؿشخ ط١ؿط، عالق جخطالف شك جالع جىح ذكغد ع١حق

ضشك جإلع ذق١غس TPersonج، ذك١ع ض جعطذحء زج جذجس ذحغ١حق ج

.TEmployeeضخطف ح ض جعطذحؤح ذحغ١حق

جؽطممح TPerson جقف١س ججقذز ٠ىح جؽطمحق أوػش فف١س، فىح فح فف١س

. TChild ؛ ٠ىح أ٠نح جؽطمحق فف١س أخش ػ TEmployeح فف١س

ؾطك ح TEmployeeػال فف١س . جقف١س جؾطمس ٠ى أ ؾطك فف١س أخش

. TManagerفف١س

.عغس جالؽطمحلحش غ١ش كذدز جذد و جقذز ضشظ خقحتـ عو١حش ح لرح

Page 62: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

انجنت انسادست

ك ف . ف ز جؿس كحي أ مطشخ ل١ال طف ىر١س جطغ١شجش جط وحت

جػح TPerson ، جألي Emp جطغ١ش Pأػطح جغحذمس جعطخذح جطغ١ش

TEmployee والح ضد ؾزسح ئ ج جألف TObject.

integer stringجطغ١ش وحت ٠خطف جطغ١شجش جألج جألعحع١س ػ

.و ال ٠ك ل١س ج ف قذ رجض

فا 10 غذ ل١س integer أ Aمف أوػش؛ ذح شف جطغ١ش

ضحذ . (Aلغ ف جزجوشز ٠ك ل١س )جطغ١ش ٠ى قحال ز جم١س

var

A, B, C: integer;

begin

A := 10;

B := A; // 10

A := A + 5; // 15

فا A م١س 5 ، ذ أمحفس A خقـ لغ آخش ف جزجوشز أي١ح فظ ل١س Bجطغ١ش

A ذ١ح 15 عطقرف ل١طح Bال ضضجي ل١طح غحذطس .

C := A + B; // 25

25 أ A B لغ خحؿ ذ ف جزجوشز، أفركص ل١ط ج٢ ؿ Cجطغ١ش

جطغ١شجش جػالظ و جقذ غطم ج٢خش ٠ك ل١ جخحفس ذ ف لغ خحؿ ذ

.ف جزجوشز

Page 63: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

: ىرمح فظ جغ١حس٠ جطغ١شجش وحت

var

oA, oB, oC: TPerson;

begin

oA := TPerson.Create;

oB := oA;

oC := oA;

oA.FirstName := 'Ahmad';

oB.LastName := 'Hamza';

Caption := oC.GetFullName; // 'Ahmad Hamza'

oA.Free;

oA := nil;

oB := nil;

oC := nil;

. أفرف زج جىحت ؾد ف ىح ح ف جزجوشزTPersonذح ؾغذح وحتح

ىح آخش ف جزجوشز أ٠نح ى ال ٠ك جىحت ئح ٠ك ج ل oAجطغ١ش

. ئ ل جىحت ف جزجوشزPointerجىحت ف جزجوشز أ أ إؽش

لر أ غذ أ٠س ل١س؛ ل ف جزجوشز ى ال٠ك أ٠س ل١س رجش ؛ أ oBجطغ١ش

. ذحألفف ٠ك ل١س ؾجت١س

oA أ أ ج٢ ٠ك فظ ل١س oB ئ جطغ١ش oA ، ض جعحد ل١س oB := oAذذ

، وزذه جألش ذحغرس oAج ف جزجوشز أ أ ٠ؾ١ش ئ فظ جىحت جز ٠ؾ١ش ئ١

.oCطغ١ش

. ٠ؾ١ش ج٢ ئ فظ جىحتoA oB oCأ أ جطغ١شجش

FirstName ػال ي ل١س خحف١س oAذزج ٠ىح أ فز ىحت خالي جطغ١ش

(“Ahmad”) أ٠نح فز فظ جىحت خالي جطغ١ش ،oB ي ل١س خحف١ط

LastName (“Hamza”) زه جيم ضرح زه جعطفغشح ل١س ،

GetFullName خالي oCفغ١ي١ح :“Ahmad Hamza”.

.oA.Free خالي جألش . ذذ جإلطحء ضحح جىحت ض ضكش٠ش أ ئحؤ

Page 64: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

؟oB.Free oC.Freeىرح ك ج٢ حرج طر جألش جغحذك ذأش

ذذ ضكش٠ش جىحت لح ذحطأو١ذ أ جطغ١شجش ج٢ ال ضؾ١ش ئ أ ؽء ره ذطخق١ـ

. ى حnilل١س

٠ى أ٠نح ضكش٠ش جىحت ضقف١ش جطغ١ش ف لص جقذ ىش٠ك جإلؾشجت١س

FreeAndNil().

FreeAndNil(oA);

nil غ ضم ذايحء ل١س oAز جإلؾشجت١س ضم ذطكش٠ش جىحت جز ٠ؾ١ش ئ١ جطغ١ش

.طغ١ش

صائح عذ انخعايم يع انكائاث

.٠ؿد جطح جىحتحش ذحطرح ؾذ٠س-

.مشسز ئحء جىحت ئفحؤ ذؿشد جطحء جكحؾس ئ١-

.مشسز ضقف١ش أ طغ١ش ٠ؾ١ش ئ زج جىحت-

. أ ضى ذشجؿه جط١حش ف١ح أوػش ١ىس ض١ح-

يزانق يجب اإلخبا إنيا

جمغ جطح ٠طحي ىر١س جطح جىحتحش ذطفق١ أوػش، فارج ؾذش : القس

.فذس ف ضطر ج٢؛ ٠ىه ضخي١ جالطمحي رحؽشز ئ جؿسجطح١س

د أفغح وح أؽشح؛ ٠ؿد جطح جطغ١شجش ج جىحت ذؾء جالطرح ، أ

. آ١س ح قط ال م ف يرحضح

Page 65: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

.ف١ح ٠ عططر عن جطغ١شجش فكـ ل١ح لشخ

var

oA: TPerson;

begin

. ، ز جطغ١ش ال٠ؾ١ش ئ أ وحتoA TPersonض ضش٠ف جطغ١ش

٠ىح شفس ز جم١س . ى لذ ٠ك ل١س ؾجت١س ال ح ف ع١حق ذشحؿح

.Pointer(oA) خالي جط١س

oA := TPerson.Create;

ز جم١س oA ف فظ جلص ض ضخق١ـ ل١س طغ١ش TPersonض ئؾحء وحت

. إؽش ىحت جز ض ئؾحؤ

شفس زج جشل غطخذ . ج٢؟ سل ٠ؾ١ش ئ ج ل ف جزجوشزoAح ل١س

( ػالEvaluate/Modify خالي ؽحؽس ) Pointer(oA)جط١س

oA.FirstName := 'Ahmad';

oA.LastName := 'Hamza';

: أي١حح ل١س FirstName فزح ئ خحف١س ف جىحت oA خالي جطغ١ش

"Ahmad ." أي١ح ل١س خحف١سLastName" : Hamza. " ئرج ئ زج جكذ ض جطح

. جىحت ئيحء ل١ خحف١ط١ ف١

oA.Free;

جىحت ج٢ . فحر ىحت ىرح ضذ١ش فغ ئحء ؾدoAح جعطخذح جطغ١ش

؛ فغ١طؽ oA قحح خحىرس جىحت شز أخش خالي جطغ١ش . الؾد ف جزجوشز

.أل جىحت ٠ذ ؾد. ره خيأ ف لص جطؾغ١

ضغ١شش ل١ط ذذ ضكش٠ش جىحت ذك١ع ال٠ؾ١ش ئ ؽء؟oAجغإجي جطغ١ش

Page 66: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

أ ال ضضجي ضك ل١س . عؿذح غحذطس ضطغ١ش oA( Pointer(oA)) ضفكقح ل١س جطغ١ش

!جج جمذ٠ ىحت جز ٠ذ ؾد

ز ؾىس؟

.

فطخ١ ػال أ وحتح ح لذ ض ضكش٠ش ئحؤ ف ىح ح ف جرشحؽ، غ ٠م جرشؽ ف

ىح آخش جرشحؽ ذكحس جطح زج جىحت، حدز ٠ؿأ جرشؽ ئ فكـ ل١س

جطغ١ش أال جطأوذ ؾد ل١س لر جطح جىحت ره ىش٠ك جذجس

Assigned() :

if Assigned(oA) then . . .

:nilأ ىش٠ك جالعطفغحس ئرج وح كطجح ال ٠غح

if oA <> nil then . . .

if Pointer(oA) <> nil then . . .

ف١خذ جرشؽ ؾشجء ره، ٠ أ جىحت ! جط١حش جغحذمس وح عف ضشد ذحإل٠ؿحخ

. ال٠ضجي ق١ح ف جزجوشز، ٠رذأ ف جطح زج جىحت جشق، ح ضم جؾحو

ضؾذ ىش٠مس رحؽشز طأوذ ذح أ جطغ١ش ٠ػ فال وحتح لحتح ف جزجوشز؟

! ئ قذ ال ضؾذ

جإلؾشجء جحعد رشؽ أ ٠طخز ع١حعس دفح١س ذأ ٠م ذطقف١ش جطغ١ش ذذ ضكش٠ش

. ئحء جىحت

زه ىشس ذأ ٠ؿد جإلطرح ذ جطح جىحتحش، أ ٠ى قحمشج ف رح دجتح

مشسز ئحء جىحت ذذ جطفحء جكحؾس ئ١، ذ ٠غطكغ أ م ذىطحذس ض١حش ئحء جىحت

. فس وطحذس ض١حش جإلؾحء، لر وطحذس أ٠س ض١حش ضطح

!جطص جؿس

Page 67: Delphi en Arabe

Issue 05 05جذد سل

D4A Magazine

www.delphi4arab.com

٠غف ذحؾش جإلىطش أ جاللطرحط أ جم ئ ٠ط جإلؽحسز ئ دف شخ

.ال ٠غف ذأ ؽى أؽىحي جؾش جسل د ئر خي غرك

طذ دف شخ ى ئ١ى

عح ف ضي٠ش ذؾحسوطه ف جطذ ف ؿس طذ دف شخ

د ضغ١ك غرك ئ ئدجسز Doc/Docx/ODFؾحسوطه ف محالش جؿس، أسع فمو جمحس ذأقذ جق١غ

[email protected] جطذ