الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الجديد في دلفي 2009 بالعربي و بعض الملاحظات

بدأه merouane في 7 أغسطس 2008 · 15 رد · 8,158 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله تعالى و بركاته

أحببت أن أضع بين يدي أخواني و أخواتي أول مثال، المتبع من CodeGear بالعربي ..

- - - - - - - - - - - - - - - - - -

كثر القول أن Delphi 2009 يعتبر النقلة المهمة للـ VCL منذ دلفي 7، و أنه سيكون أكثر انتشارا في العالم لدعمه UNICODE (مع أننا لم نكن يوما ضمن المعادلة)

المهم .. ما أتحدث عنه هو هذا

post-113861-1216358279.png

post-113861-1216358322.png

post-113861-1216358331.png

post-113861-1216358338.png

post-113861-1216358346.png

لكن الفرق هو أنني سأحاول التركيز على العربية (يمكن القول أنه سوى ترجمة للتطبيق) و سأرى مستوى الدعم.

حسنا سأذكر المشاكل التي واجهتني و كيف حللتها إلا واحدة أو اثنين ..

ملاحظة قبل البداية : لرؤية كامل عمل التطبيق قمت بنتفيذه تحت نظام فيستا.

التنفيذ للتطبيق العربي

في XP

post-113861-1218131415_thumb.gif

في VISTA

post-113861-1218131428_thumb.gif

أولا قبل التنفيذ لاحظت أن النسخة Pre-Release تعتمد على FrameWork 1.1

post-113861-1218283500_thumb.gif

وبعد التبيت لاحظت أنه يعمل مع IDE Delphi2007

في الصورة لم أثبت C# و C++ لسرعة التثبيت و لعدم اهتمامي بهما الآن.

post-113861-1218131667_thumb.gif

قمت أولا بإعطاء الـ Form : BiDiMode = bdRightToLeft

العمل مع TCategoryPanelGroup:

المشكلة – أو بالأحرى النقائص – تمثلت في عدم إضافة الوحدات بعد Uses تلقائيا عند العمل مع مكون يستعمل خاصية تتدرج من وحدة مغايرة

مثل: CategoryPanelGroup مذكور في الوحدة ExtCtrls، أما الخاصية GradientDirection مذكرة في GraphUtil مما جعنلي أكتبها بعد uses ،

سنعود لمشكلة الوحدات ..

الامر الأخر هو عند محاولة تلوين CategoryPanel لم تعمل معي و يتلون فقط المكون CheckBox1، الكود الموضوع عند الضغط على جدول الألوان:

CategoryPanel3.Color := ColorGrid4.ForegroundColor;

ننتقل إلى الطرف المقابل:

TpageControl لا تدعم BiDiMode أي الصفحات لا تترتب من اليمين إلى اليسار مما يقودنا للتعامل مع مكونات أخرى تدعم العملية.

المتحكمات (مكونات) الجديدة في VCL:

TbuttonedEdit:

post-113861-1218131759_thumb.gif

post-113861-1218131776_thumb.gif

جميل

TlinkLabel:

post-113861-1218131837_thumb.gif

الكتابة في Caption

post-113861-1218131852_thumb.gif

حدث الضغط على الرابط

post-113861-1218131873_thumb.gif

TballoonHint:

post-113861-1218132005_thumb.gif

الأزرار:

هنا يوجد ملاحظة، مثلا عند الضغط على مجموعة "اتجاه الصورة" وضعت الكود:

procedure TForm1.RadioGroup5Click(Sender: Tobject);
begin
  case RadioGroup5.ItemIndex of
	0 : Button2.ImageAlignment := iaLeft;
	1 : Button2.ImageAlignment := iaRight;
	2 : Button2.ImageAlignment := iaBottom;
	3 : Button2.ImageAlignment := iaTop;
	4 : Button2.ImageAlignment := iaCenter;
  end;
end;

لكنني عند التنفيذ فوجئت بخطأ مفاده أن

[DCC Error] Unit1.pas(262): E2010 Incompatible types: 'TImageAlignment' and 'TIconArrangement'

لدينا

وحدة ComCtrls

post-113861-1218132089_thumb.gif

وحدة StdCtrls

post-113861-1218132148_thumb.gif

لذلك قمت بالتالي:

post-113861-1218132178_thumb.gif

هنا شرح (قديم) بسيط لعملية مشابهة

http://www.delphi4arab.com/forum/showpost....mp;postcount=15

في XP

post-113861-1218132256_thumb.gif

في VISTA

post-113861-1218132276_thumb.gif

لاحظتم السهم الأخضر

أمر أخر عند العمل مع الزر الأخير مع الخاصية Style = bsSplitButton و ربطه مع PopupMenu لا تعمل الخاصية مما جعلني أظن أن التجميع (compilation)

ضمن XP و Vista يختلف، و أوليا أشعر كأني أريد البرمجة بين Windows و Linux بسورس واحد و مجمعين مختلفين

Tedit:

XP

post-113861-1218132363_thumb.gif

post-113861-1218132377_thumb.gif

Vista

post-113861-1218132402_thumb.gif

post-113861-1218132420_thumb.gif

الفرق في النص الباهت واضح

:TprogessBar

XP

post-113861-1218132499_thumb.gif

Vista

عادي

post-113861-1218132540_thumb.gif

توقيت مؤقت

post-113861-1218132576_thumb.gif

خطأ

post-113861-1218132593_thumb.gif

Marquee

post-113861-1218132616_thumb.gif

TlistView:

الحقيقة أنني لا أتعامل مع مثل هذه المكونات (TreeView) من بين الأسباب الصعوبة و تضييع الوقت في حال أردت ترجمتها (تحويلها) إلى العربية.

حتى إجراء المرآة أحيانا لا ينفع (أن هنا أتحدث عن العمل تحت نظام windows غير عربي)

التنفيذ ضمن XP و استعمال إجراء المرآة

post-113861-1218132743_thumb.gif

التنفيذ ضمن Vista و استعمال إجراء المرآة

post-113861-1218132767_thumb.gif

هناك مكونات أخرى مثل Ribon و الذي لا يمكن إضافة الزر Menu و Quick Acess ToolBar إلا بعد استعمال ActionManager

post-113861-1218132991_thumb.gif

سأتوقف هنا و خلاصتي سنقوم بالاحتياطات اللازمة عند البرمجة مع دلفي 2009، سنعمل دائما مع If WinXP then .. else if WinVista then أو استدعاء اجراءات خاصة بالـ Vista (ربما نراها لاحقا)

في الأخير هذه ملاحظاتي .. قد تكون ساذجة و معروفة للكثير لكن رأيت ان أشرح بلسان عربي مع تضمين رأيي كمستعمل عربي لمنتجات CodeGear.

هاهو البرنامج مع السورس، لن يعمل مع النسخ السابقة لـدلفي 2009 لكن من الأحسن النظر فيها (البرنامج التنفيذي لرؤية النتائج دون الحاجة للتجميع)

Tuburon_Test.zip

و السلام عليكم والرحمة

:)

تم تعديل هذه المشاركة بواسطة merouane في 9 أغسطس 2008 في 15:05

#2

بصراحة مميزات جميلة وروعة ... أنا بحاجة الى الأنتقال الى 2009 حين الصدور بشكل رسمى

Comming Soon

#3

مشكور اخي الكريم

كل انتقال يجب ان تواجه به المشاكل

شكرا لك

خيركم من تعلم القرآن وعلمه

#4
اقتباس
كل انتقال يجب ان تواجه به المشاكل

هذا ما يثير اعصابى .. أخاف من الانتقال لهذا السبب

Comming Soon

#5

الإنتقال دائما صعب ولكنه الأفضل من البقاء خلف الركب

أشكرك على الشرح ... ولكن واضح أنك تستخدم ثيم للفيستا على الويندوز XP لان الصور الخاصة ب XP لاتظهر كما أرفقتها

تحياتي

#6

بارك الله فيك أخي الكريم هل يوجد في دلفي 2008 QuickRep

قال الحسن البصري : يا إبن آدم إنما أنت أيام إذا ذهب يومك ذهب بعضك

#7

TopSec

نعم أستعمل ثيم الفيستا على XP لأنني لا أحب الأصلي و لا أظن أن الكثير يستعمله

ها هو كيف يظهر على XP بالمظهر الأصلي

post-113861-1218282976_thumb.gif

saiddsa3980

في هذه النسخة Pre-Release لم أجد مكون QuickRep ، قد يكون في النسخة الكاملة

في كل الأحوال يوجد المكون Pro في المنتدى

:)

#8

بارك الله فيك اخي مروان

ولكن هل نسخة دلفي الاخير تتضمن تقنية LINQ ام لا

تحياتي

اللهم علمنا ما ينفعنا وانفعنا بما علمتنا وانفع الناس بنا واغفر لنا وارحمنا

#9
علي .ع كتب:
ولكن هل نسخة دلفي الاخير تتضمن تقنية LINQ ام لا

و فيك بركة

لم أفهم ما تقصده بالـ LINQ ؟

#10

مشكور أخي مروان عن التوضيح وعن الجديد دوماً

- أين أجد المكون pro لقد بحثت في المنتدى ولم أجده

- هل المكون pro يعمل مثل المكون QuickRep

- وهل يعمل على نسخة دلفي 2008

لأني عندي مشروع عملته بالدلفي 7 وفتحته بدلفي 2008 حينها صادفتني مشاكل في فتح المشروع لأن المشروع يحتوي على QuickRep والنسخة 2008 من دلفي لم أجد بها المكون QuickRep

مشكور اخي مروان مرة أخرى جزاك الله كل الخير دمت كنزاً لنا .

تم تعديل هذه المشاركة بواسطة saiddsa3980 في 9 أغسطس 2008 في 18:50

قال الحسن البصري : يا إبن آدم إنما أنت أيام إذا ذهب يومك ذهب بعضك

#11

بالنسبة للمكون QuickReport

هنا : /index.php?showtopic=136700

و قد قمت بإعادة رفعهما على المنتدى

المرفق الخاص بدلفي 2007 يعمل ، و لا أعرف ما هو دلفي 2008 ؟؟؟

#12
merouane كتب:
بالنسبة للمكون QuickReport

هنا : /index.php?showtopic=136700

و قد قمت بإعادة رفعهما على المنتدى

المرفق الخاص بدلفي 2007 يعمل ، و لا أعرف ما هو دلفي 2008 ؟؟؟

نعم أخي مروان كنت أقصد دلفي 2007 وليس 2008

لقد قمت بتنزيل المكون Pro وسأقوم بتجريبه

الله يجازيك ما لا نهاية من الأجر - شكراً -

قال الحسن البصري : يا إبن آدم إنما أنت أيام إذا ذهب يومك ذهب بعضك

#13

اخي مروان LINQ تستطيع ان تقول عنها انها طريقة استعلام جديدة وبديلة عن طريقة الاستعلام SQL تضمنتها الاصدارة الاخيرة من الفيجول ستديو 2008

وهذه مقالة للاخ عروة يتحدث فيها عن LINQ بشكل اوضح

/index.php?showtopic=76490

اتمنى ان تضاف تقنية مثل هذه لدلفي

تحياتي

اللهم علمنا ما ينفعنا وانفعنا بما علمتنا وانفع الناس بنا واغفر لنا وارحمنا

#14

السلام عليكم

منقول من

كما اخبرنا اساتذتتنا سابقا ان الدلفي 2009 اصبحت مكتبة VCL جديدة ومعززه المكونات ، هناك ايضا تجديد datasnap تماما.

هنا سنلفي نظرة سريعه على اثنتين من السمات الجديدة لغة دلفي

1- generics

2 Delphi Anonymous Methods

Delphi Generics: Great for containers and collections

TList[color= #339933;]<T[color= #339933;]> [color= #339933;]= [color= #000000; font-weight: bold;]class


  [color= #000000; font-weight: bold;]private

    FItems[color= #339933;]: [color= #990000;]array of T[color= #339933;];

    FCount[color= #339933;]: Integer[color= #339933;];

    procedure Grow[color= #009900;](ACapacity[color= #339933;]: Integer[color= #009900;])[color= #339933;];

    [color= #000000; font-weight: bold;]function GetItem[color= #009900;](AIndex[color= #339933;]: Integer[color= #009900;])[color= #339933;]: T[color= #339933;];

    procedure SetItem[color= #009900;](AIndex[color= #339933;]: Integer[color= #339933;]; AValue[color= #339933;]: T[color= #009900;])[color= #339933;];

  [color= #000000; font-weight: bold;]public

    procedure Add[color= #009900;](const AItem[color= #339933;]: T[color= #009900;])[color= #339933;];

    procedure AddRange[color= #009900;](const AItems[color= #339933;]: [color= #990000;]array of T[color= #009900;])[color= #339933;];

    procedure RemoveAt[color= #009900;](AIndex[color= #339933;]: Integer[color= #009900;])[color= #339933;];

    procedure Clear[color= #339933;];

    property Item[color= #009900;][AIndex[color= #339933;]: Integer[color= #009900;]][color= #339933;]: T

      read GetItem write SetItem[color= #339933;]; [color= #000000; font-weight: bold;]default[color= #339933;];

    property [color= #990000;]Count[color= #339933;]: Integer read FCount[color= #339933;];

  [color= #990000;]end[color= #339933;];

Use[color= #339933;]:

[color= #000000; font-weight: bold;]var

  ilist[color= #339933;]: TList[color= #339933;]<Integer[color= #339933;]>;

  slist[color= #339933;]: TList[color= #339933;]<String[color= #339933;]>;     

 

procedure PrintListInteger[color= #339933;];

[color= #000000; font-weight: bold;]var

  i[color= #339933;]: Integer[color= #339933;];

begin

  [color= #b1b100;]for i [color= #339933;]:= [color= #cc66cc;]0 to ilist[color= #339933;].[color= #990000;]Count [color= #339933;]- [color= #cc66cc;]1 [color= #b1b100;]do

    Write[color= #009900;](ilist[color= #009900;][i[color= #009900;]][color= #339933;], [color= #0000ff;]' '[color= #009900;])[color= #339933;];

  Writeln[color= #339933;];

[color= #990000;]end[color= #339933;];         

 

procedure PrintListString[color= #339933;];

[color= #000000; font-weight: bold;]var

  i[color= #339933;]: Integer[color= #339933;];

begin

  [color= #b1b100;]for i [color= #339933;]:= [color= #cc66cc;]0 to slist[color= #339933;].[color= #990000;]Count [color= #339933;]- [color= #cc66cc;]1 [color= #b1b100;]do

    Write[color= #009900;](slist[color= #009900;][i[color= #009900;]][color= #339933;], [color= #0000ff;]' '[color= #009900;])[color= #339933;];

  Writeln[color= #339933;];

[color= #990000;]end[color= #339933;];         

 

begin

  ilist [color= #339933;]:= TList[color= #339933;].Create[color= #339933;];

  try

    ilist[color= #339933;].AddRange[color= #009900;]([color= #009900;][[color= #cc66cc;]1[color= #339933;], [color= #cc66cc;]2[color= #339933;], [color= #cc66cc;]3[color= #009900;]][color= #009900;])[color= #339933;]; [color= #666666; font-style: italic;]// ['1', 'second', 'third']);

    PrintListInteger[color= #339933;];

    ilist[color= #339933;].RemoveAt[color= #009900;]([color= #cc66cc;]1[color= #009900;])[color= #339933;];

    PrintListInteger[color= #339933;];

    ilist[color= #339933;].Clear[color= #339933;];

    PrintListInteger[color= #339933;];

  finally

    ilist[color= #339933;].Free[color= #339933;];

  [color= #990000;]end[color= #339933;];

  slist [color= #339933;]:= TList[color= #339933;].Create[color= #339933;];

  try

    slist[color= #339933;].AddRange[color= #009900;]([color= #009900;][[color= #0000ff;]'one'[color= #339933;], [color= #0000ff;]'two'[color= #339933;], [color= #0000ff;]'three'[color= #009900;]][color= #009900;])[color= #339933;]; [color= #666666; font-style: italic;]// ['first', 'second', 'third']);

    PrintListString[color= #339933;];

    slist[color= #339933;].RemoveAt[color= #009900;]([color= #cc66cc;]1[color= #009900;])[color= #339933;];

    PrintListString[color= #339933;];

    slist[color= #339933;].Clear[color= #339933;];

    PrintListString[color= #339933;];

  finally

    slist[color= #339933;].Free[color= #339933;];

  [color= #990000;]end[color= #339933;];

  Readln[color= #339933;];

[color= #990000;]end[color= #339933;].

Generics.Collections هي وحدة موجودة داخل كل من :

TList, TQueue, TStack, TDictionary, TObjectList, TObjectQueue, TObjectStack, وTObjectDictionary.

Delphi Anonymous Methods

Declaration[color= #339933;]:

type

  [color= #666666; font-style: italic;]// method reference

  TProc [color= #339933;]= reference to procedure[color= #009900;](x[color= #339933;]: Integer[color= #009900;])[color= #339933;];               

 

procedure Call[color= #009900;](const proc[color= #339933;]: TProc[color= #009900;])[color= #339933;];

begin

  proc[color= #009900;]([color= #cc66cc;]42[color= #009900;])[color= #339933;];

[color= #990000;]end[color= #339933;];

Use[color= #339933;]:

[color= #000000; font-weight: bold;]var

  proc[color= #339933;]: TProc[color= #339933;];

begin

  [color= #666666; font-style: italic;]// anonymous method

  proc [color= #339933;]:= procedure[color= #009900;](a[color= #339933;]: Integer[color= #009900;])

  begin

    Writeln[color= #009900;](a[color= #009900;])[color= #339933;];

  [color= #990000;]end[color= #339933;];               

 

  Call[color= #009900;](proc[color= #009900;])[color= #339933;];

  readln

[color= #990000;]end[color= #339933;].

- méthodes anonymes يمكن التقاط المتغيرات المحلية وتخزينها ؛ اذن هم متاحين للméthode ولوقت كبير ك . référence مثلا

وهذا امر مهم اذا كنت تريد مثلا تنفيذ كود من برنامج او من thread على thread اخر ك ثراد واجه مستعمل مثلا او d'arrière-plan .

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 15 أغسطس 2008 في 20:46

#16

مشكور أخ مروان

للأمانة موضوع أكثر من رائع عن ديلفي 2009

و ننتظر منك المزيد عن ميزات 2009

مواضيع مشابهة