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

الربط بdde تطبيق مع اخر

مغلق
بدأه زكيري عبد العالي في 15 مارس 2003 · 6 رد · 1,397 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الفصل الأول : الربـــط بـ DDE

ترجمـة وتفصيل زكيري عبد العالي

[ALIGN=RIGHT]الفهرس :

1. الربط بـ DDE

أ-تعريف DDE

ب-المكونات المستعملة للربط

ج-استعمالات

2. جزء الخــادم

3. جزء الزبــون

4. حالة استثنائية

أ- خـادم Non-Delphi

ب- زبـون Non-Delphi

5. الخلاصة

1-الربط بـ DDE:

تعني DEE (Dynamic Data Exchange soit en Français échange de donnée dynamique)

أي تغيير المعطيات آليا حيث تسمح هذه الطريقة بالتخاطب بين تطبيقين لا نتحدث الآن عن OLE بل هي طريقة أخرى مختلفة تماما . الهدف من هدا الفصل ليس أين يمكن استعمال هذه الطريقة ومتي بل الهدف هو سهولة التخاطب والربط الديناميكي بالدلفي .

أ-تعريف DDE:

هو التخاطب بين تطبيقين مع بعضهم البعض , على شرط أن يكونا منفذين . إذن نقول أن إحدى التطبيقين هو الخــادم والآخر هو الزبـون , كما يمكن للخـادم أن يكون زبون لتطبيق أخر .

اما عن الاتصال فهو يتم حسب طريقتين إما أن يطلب الزبون بعض المعلومات من حين إلى أخر آو أن يرسل الخادم تنبيه ثم معطية حين وجودها .

الربط بطريقة DEE

يمثل من الخادم الى الزبون

ب-المكونات المستعملة للربط :

في شريط المكونات systeme نجد أربعة مكونات وهي المكونات الخاصة بالربط ب DDE.

DdeServerConv, DdeServerItem, DdeClientConv et DdeClientItem.

ج-استعمالات :

يتمثل دور كل من DdeServerConv DdeClientConv بفتح مجال الحوار بين الخادم و الزبون , كما يجب إضافة المكونين DdeServerItem DdeClientItem وهما المسؤولان عن تبادل المعطيات والتحكم في كمية المعطيات المتبادلة .

المكونين DdeServerItem DdeClientItem بإعطاء الخاصيتين على التوالي :

Lines من نوع TStrings

Text من نوع Tstring

وهما الخاصيتين المحددتين الى حجم المعطيات المتبادلة فالخاصية text محددة ب 255 رمز

6. جزء الخــادم

بدانا بالخادم لسببين هما :

1- اولا : بمجرد ان يتم الربط و يتحقق الخادم نتعرف على نوع المعطيات التي سيتم مبادلتها

2- ثانيا : حين يتم تنفيذ تطبيق الزبون يتم تنفيذ تطبق وشحن الخادم اليا .

افتح مشروع جديد ضع على الفورم DdeServerConv و DdeServerItem

ملاحظة لست ملزم عزيزي الطالب بإضافة المكون DdeServerConv , حيينها تصبح النافذة التي تملك DdeServerItem الخادم لكن المشكلة عند تغيير عنوان النافذة والذي يعتبر المستعمل للتعرف على الخادم يتم قطع الاتصال .إذن أنصحك بوضع المكون DdeServerConv لتحديد الخادم .

ملاحظة لست ملزم عزيزي الطالب بإضافة المكون DdeServerConv , حيينها تصبح النافذة التي تملك DdeServerItem الخادم لكن المشكلة عند تغيير عنوان النافذة والذي يعتبر المستعمل للتعرف على الخادم يتم قطع الاتصال .إذن أنصحك بوضع المكون DdeServerConv لتحديد الخادم .

لوضع المعطيات في DdeServerItem هي مجرد عملية إسناد عادية نكتب :

procedure TForm1.Edit1OnChange(Sender : Tobject);begin DdeServerItem1.Text := Edit1.Text; End;

ولان لم يبقى الى شحن خصائص DdeServerItem وينتهي جزء الخادم اذن نقوم بتغيير الخاصية ServerConv بوضع اسم المكون DdeServerConv او بوضع اسم المشروع ولاحقته .

7. جزء الزبــون:

و الآن ننتقل إلى الزبون فنضيف إجباريا هذه المرة المكون DdeClientConv و DdeClientItem

1- DdeClientConv

*- نقوم بتغيير الخاصية DdeService الخاصة طبعا ب DdeClientConv

*-نقم بتغيير الخاصية ConnectMode الى DdeManual

*-بالنقر مرتين على DdeService نتحصل على

-في الخاصية SERVICE نكتب اسم مشروع الخادم ولاحقته .

-في الخاصية RUBIRIQUE نكتب اسم المكون DdeServerConv.

*-نغير في الخاصية Service application : ونكتب فيها اسم المشروع الجديد للخادم

2- DdeClientItem

*- نقوم بتغيير الخاصية DdeConv ونكتب DdeServerConv

*-نقم بتغيير الخاصية DdeItem ونكتب اسم المكون DdeServerItem

نقوم الان بتغيير الخاصية ConnectMode الى DdeAutomatic والخاصة بالمكون DdeClientConv

في الحد Onchange للمكون DdeClientItem نكتب :

procedureTForm1.DdeClientItem1Change(Sender: Tobject(;begin  // Récupère les informations du serveur et les placent dans Edit1  Edit1.Text := DdeClientItem1.text; End;

واخيرا تستطيع تنفيذ المشروع وملاحظة النتيجة حين تغيير النص الموجود في الخادم يتغيير في الزبون .

procedureTForm1.DdeClientItem1Change(Sender: Tobject(;begin  // Récupère les informations du serveur et les placent dans Edit1  Edit1.Text := DdeClientItem1.text; End;

8. حالة استثنائية

لو قلت لي نعم جيد لكن لو كان الخادم ليس تطبيق دلفي فما العمل ؟

حسننا.يوجد حل وحيد لكن يجب ان تكون على معرفة بتطبيقات زبون/خادم لااطيل

للتخاطب مع الخادم يجب :

1- معرفة اسم الخادم وهو سهل لانه ممثل باسم التطبيق .

2- معرفة اسم service

3- معرفة الموضوع topic اي تحديد نوع المعطيات المسترجعة .

أ-خـادم Non-Delphi

ناخذ مثالا عن تطبيق دلفي زبون يتخاطب مع تطبق وينداوز مسيير البرامجDdeClientConv, DdeClientItem,

-نفتح مشروع جديد ونضع المكونات التالية : DdeClientConv , DdeClientItem وlistBox

-نغيير في خاصيات المكون DdeClientConv :

*-لاعلام الدلفي بالنتظار حتي تتم عملية الشحن ddeManuel

*-نقرتين على DdeService لتحديد الموضوعProgman في service

*- في service application ادخل Progman

نغيير ايضا في DdeClientItem

*- في الخاصيةDdeConv نكتب اسم DdeClientConv

*- في الخاصية DdeItem نحدد Groups

اخيرا نرج الخاصيةConnectMode الى DdeAutomatic للمكون الاول وبهذا يتم الشحن

في الخاصية OnChange للمكون DdeClientItem نضيف حلقة ليتم نسخ عناصر DdeCLientItem.Lines

في ListBox

procedureTForm1.DdeClientItem1Change(Sender: Tobject);
var
  i : integer;
begin
  // Récupère les informations du serveur et les placent dans ListBox1
  for i := 0 to DdeClientItem1.Lines.Count - 1 do
  begin
	ListBox1.Lines.Add(DdeClientItem1.Lines);
  end;
end;

ب- زبـون Non-Delphi

في المثال التالي نستعمل HTBasic اعلم ان الكثير يعرفه لكن كن على علم عزيزي الطالب انه يمكن الاتصال باي تطبيق مهما كانة اللغة المستعملة فلا يوجد في الحيات سوى الدلفي والسي.

INTEGER Result,Ch1,Ch2
DIM Ret$[256],Htbvers$[80]
Htbvers$=SYSTEM$("VERSION:HTB")
IF POS(Htbvers$,"9") THEN
  Htbvers$="9"
ELSE
  Htbvers$="5"
END IF
CLEAR SCREEN
! Charge la librairie DDE correspondant à la version du HTB, seulement si elle n'est pas déjà chargée.
IF NOT INMEM("Ddeinit") THEN
  SELECT Htbvers$
	CASE "5"
	  LOADSUB ALL FROM "htbdde.csb"
	CASE "9"
	  LOADSUB ALL FROM "htb8dde.csb"
  END SELECT
  PRINT
  PRINT " BASIC DDE Client CSUB (R"&Htbvers$&") est chargé.."
END IF
CALL Ddeinit(Result)
IF Result=0 THEN
  DISP "Doing some DDE conversation.."
  !WAIT 2
  ! Connexion à l'application, retourne un numéro de canal dans Ch
  CALL Ddeconnect(Ch1,"ServeurPrj","DdeServerConv1")
  IF Ch1<>0 THEN
	! Se reconnecte avec un autre canal
	CALL Ddeconnect(Ch2,"ServeurPrj","DDeServerConv1")
	CALL Dderequest(Ch2,"DDeServerItem1",Ret$,Result) ! récupère la valeur
	CALL Ddeterminate(Ch2,Result) ! Termine la connexion sur le second canal
	CALL Ddeterminate(Ch1,Result) ! Sur le premier
  ELSE
	BEEP
	Buf$="ServeurPrj DDE connexion échouée"
  END IF
  CALL Ddeclean(Result) ! Libère les ressources DDE
ELSE
  BEEP
  Buf$="DDE initialisation échouée"
END IF
CLEAR SCREEN
PRINT Ddeinfo$
PRINT "Valeur du serveur: ";Ret$;
PRINT
PRINT Buf$
PRINT "DDE Test terminé"
DELSUB Ddeinit TO END
END

9. الخلاصة :

لتحقيق اتصال او ربط يدوي يكفي ان نغيير ConnectMode الى DdeManual للمكون DdeClientConv

وعند ما نريد استرجاع المعطيات نستخدم RequestDataاعلم انه لا نحتاج الى DdeClientItems في هذه الحالة .

تم تعديل هذه المشاركة بواسطة احمد غريب في 21 سبتمبر 2006 في 22:00

#2

موضوع قديم ولكنه جيد عن DDE ...

وددت رفعه لأني أقرأ عن DDE في هذه الأيام ..

أتمنى من المشرفين التعديل في الشفرات لتظهر بشكل سليم ...

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#3

كنت في ما سبق اعد مقالة كاملة حول DDE وكتبت فيها الكثير و لكن اليوم بحثت عنها و لم اجدها اختفت :( مع الامثلة

هذه التقنية اصبحت قديما نوعا ما حسب ما قرأت و تم استبدلها بامور مثل com...لا اذكر ماذا

لماذا تقرأ عن DDE؟ ماذا تريد ان تفعل اذا اردت اعطينا فكرة

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#4

اخواني الافاضل

هل بالامكان ربط برنامج معمول بالجافا مع برنامج بالفيجوال بيسيك

بحيث ترسل البيانات من برنامج الجافا الى برنامج الفيجوال

#5
اقتباس
لماذا تقرأ عن DDE؟ ماذا تريد ان تفعل اذا اردت اعطينا فكرة

بعد عملي لـ Adobe plugin كنت أريد معرفة كيفية التواصل معه من برنامج خارجي ولاحظت في الأمثلة المرفقة مع Adobe Acrobat SDK وجود شرح عن DDE ..

ابوطلال:

أعتقد أن هناك عدة طرق لكنها ستكون خاصة بنظام الويندوز ...

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#6

بارك الله فيك

اريد مثال او شرح بسيط اقدر ابدا منه

وجد ربط فيجوال واكسل لكن لم اجد ربط الجافا مع الاكسل

وشكرا

#7

1-وجد ربط فيجوال واكسل لكن لم اجد ربط الجافا مع الاكسل

انظر الى الملف المرفق

2-هل بالامكان ربط برنامج معمول بالجافا مع برنامج بالفيجوال بيسيك بحيث ترسل البيانات من برنامج الجافا الى برنامج الفيجوال

نعم استعمل البروتكول XMLRCP

excel_java.zip

هذا الموضوع مغلق.

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