المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : تعلم معي كيف تتعامل مع البرامج الخارجيّة


AL-MOB4RM3G
19-03-2009, 02:15 PM
بسم الله الرحمان الرحيم...
اخواني الكرام سلام الله عليكم اجمعين...

اليوم معنا درس عن كيفيّة التعامل مع البرامج الخارجيّة...

وهذا موضوع سيتم تطويره ان شاء الله شئ فشيئا بئذن الله....

يعني على نهج الأخ العزيز الحبيب nabilkeb بارك الله له وجزاه الله كل خير...\
يعني سامحني اخي نبيل على اخذ طريقتك في القآء الدروس :p لكن منك نستفيد اخي الحبيب

نعم....
الدرس اقوم به لأستفيد انا بإذن الله ويستفيد الإخوة معي...
وأود ان ابحر في هذا المجال بإذن الله ولذلك قد يكون هذا الموضع كبداية جيّدة بإذن الله...
ويجب ان انبّه الإخوة ان هذا الموضوع سيكون فقت اساسيّات في هذا المجال وانا لست خبيرا في هذا المجال...
لذلك من لديه اي شئ ممكن ان يفيدنا ويفيد الإخوة من حولي فبارك الله فيك وجزاه الله كل خير على نشر العلم وتعليمه...

وقبل ان ابدئ بلدرس يجب ان ادل على صاحب الموضوع الأصلي وهو الأخ الفاضل SUM من منتدى الفريق العربي للبرمجة... والرابط من هنا بارك الله لكم (http://www.arabteam2000-forum.com/index.php?showtopic=4316)

طيب ماذا نستفيد من هذا الموضوع ان كان الأخ قد شرحه مسبقا ؟
نعم اولا...

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

ومن لديه اي سؤال فلا يتردد في سؤآله...
ان كنت اعلم الإجابة اجيب... وان لم اكن اعلم فنبحث سويا بإذن الله...

تابعوا معي

اولا حمّل البرنمجين
من المرفقات...

الأول اسمه Win X_1.3 وهو يعمل بدون تثبيت... (وأظن انه مبرمج بلدلفي ان لم اكن مخطئ والله اعلم)
والثاني وهو برنامج اسمه WinDowse ويحتاج الى تنصيب ... حمله ونصبه... بارك الله لك
لأني الدرس سيعتمد على هاذين البرنامجين....

.../...يتبع..../....

AL-MOB4RM3G
19-03-2009, 02:49 PM
نبدئ بإذن الله....

اولا... سنقوم بعمل برنامج يأخذ الكتابة من المفكرة... يعني ال
Notepad
وبنفس الوقت سنرسل من خلال البرنامج الذي نصممه نصوص الى الفكرة...

مستعدّون ؟

نعم...
اولا اعطيكم فكرة عن سير الموضوع والبرنامج...

سنتعام مع الهاندل لبرنامج المفكرة...
Handel
نأخذ الهاندل للمفكرة... ونرسل عن طريقه نص او نصوص الى المفكرة...
وكذلك العكس... نأخذ الهاندل ونجلب النصوص من المفكرة
والعملية سهلة جدا ويسيرة بإذن الله...

سنتعرف ونتعامل مع الامر
SendMessage
ولهذا السبب نحتاج الى معرفة الهاندل لأن هذا الأمر يعتمد اعتمادا كليّا على الهاندل...

طيب ما هو الهاندل ؟
نعم هو ممكن ببساطة ان اقول لكم انه رقم يتعرف الوندوز على البرنامج من خلاله... (هل الهاندل خاص فقد للوندوز ؟ ام لكل انظمة التشغيل؟)
وفي البرنامج هناك عدة مكونات ... وكل هذه المكونات لديها هاندل خاص بها...
يعني حتى نستطيع ان نصل الى المكون المطلوب... يجب معرفة الهاندل...

لكن المحيّر مع هذا الهاندل هو انه يتغير في كل مرة نقوم بفتح البرنامج...
وهنا كانت مشكلتي الكبرى... وهي..
ان كان الرقم يتغير في كل مرة... فكيف نقوم ببرمجة برنامج يتعامل معه؟
هل يجب ان نصمم برنامج يستخدم مرة واحدة فقت؟ وبعدها نبرمج برنامج آخر؟
ليس معقولا ان يكون الأمر بهذا الشكل
ووقفت عند هذه النقطة حائرا لا ادري كيف السبيل الى الحل...
لكن بفضل الله تمكنت من تجاوز هذا السؤال سريعا بعد قرائة موضوع الأخ SUM عدة مرات...

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

سأرتاح قليلا وأكمل بعدها ان شاء الله..

.../...يتبع..../....

AL-MOB4RM3G
20-03-2009, 12:22 PM
بسم الله الرحمان الرحيم...
نعم اخواني لنكمل ان شاء الله...

الأن نبدئ بلمشروع الذي ذكرته وهو التعامل مع الفكرة...

نفتح المفكرة اولا لنستطلعها...
ماذا موجود بها؟
نعم موجود قائمة في الأعلى...
وموجود مساحة حتى نكتب بها اي انها
Memo
او ما شابه ذلك...
المهم عندنا الآن هو الميمو لأنه هو المكون الذي سنتعامل معه..
لكن يجب انبه الآن الإخوة الكرام على شئ مهم...
وهو ان هذا الميمو موجود داخل البرنامج المفكرة اليس كذلك؟
يعني انه لديه رقم هاندل خاص به, اليس كذلك؟
جميل..
لكن حتى نستطيع الوصول الى هاندل الميمو يجب اولا الوصول الى هاندل الأب...
Parent
وو الى آخره...
يعني انتم تعرفون كيف تتعاملون مع ال الأب و الأبناء في دلفي
Parent and Childrens
و التنبيه هو اخواني الكرام...
ان اردتم ان تصلوا الى مكون في اي برنامج يجب ان تعرفوا الآب...
وبعدها الإبن وبعدها ابن الإبن وو الى آخره حتى تصلوا الى المكون المراد التعامل معه...

واضح؟
ان كان واضحا فلحمد لله...
وان لم يكن... فلا تترددوا في السؤال بارك الله لكم...
...

نعم...
الآن امامنا المفكرة...
نفتح البرنامج الذي اسمه
Win X_1.3

ونجد في احدى الزواية مربع كما في الصورة...
(البرنامج والله اعلم بلفرنسيّة لم اجد نسخة بلإنجليزية.. سامحونى)

http://img9.uploadhouse.com/fileuploads/3635/36355795aaa8246bc62fb969a0b6669f96e2f4d.png



نضغط على ذلك المربع...
ونسحبه الى زاوية المفكرة...

حتى يصبح بلشكل الذي في الصورة...
http://img7.uploadhouse.com/fileuploads/3635/3635577be7d2d8e17b176d9b6f9f0bb18cdfde6.png


الآن هذا اهو الأب الكبير للبرنامج...
تلاحظون العلامة الزرقاء حول البرنامج؟

نعم...
الآن افلت المربع وسيأتي معلومات عن البرناج المفكرة داخل البرنامج
Win X_1.3
تلاحظونها؟

نعم...
جرب الآن نفس الشئ ولكن اسحب حتى تصل الى الميموا
ويصبح الون بلأحمر... كما في الصورة اسفل...
http://img8.uploadhouse.com/fileuploads/3635/3635578b8549c99fe305e4c4a965c64e2b9517f.png


هذا هو ابن الأب الكبير
ههههههه
......
رقم الهاندل تجدوه في البرنامج بجانب اسم
Handle
وفي حالتي انا الآن فهو... 132884
ولكن المهم بنسبة لنا هو ما مكتوب بجانب ال
Classe:

طيب اخواني الكرام...
انا الآن اكتب من المدرسة وأثناء الدرس ايضى... هههههههه
اكمل لاحقا ان شاء الله...
ان كان هناك اي سؤال او تريدون اي توضيح فهذا ممنوع :eek: ههههه
امزح...
والسلام عليكم ورحمة الله

.../...يتبع..../....

AL-MOB4RM3G
22-03-2009, 12:40 PM
بسم الله الرحمان الرحيم
نكمل بعض الشئ بإذن الله تعلى...

نصمم شكل البرنامج اولا... سيكون بشكل التالي…
نضع المكونات التالية
Button1
Button2
Edit1
Label1
ونغيّر العنواين الى شئ مناسب

الصورة توضح...
http://img21.imageshack.us/img21/1945/84097619.png


الأن اخواني حان وقت العمل مع الكود
نبدئ على بركة الله...

اولا يجب ان نعرّف بعض المتغيّرات التي هي ستكون المسؤلة عن الهاندل للمفكرة...
لكن كم واحدة هي؟
نعم,, اولا نحتاج الى متغيّر يأتي بهندل تبع الأب الكبير لبرنامج المفكرة...
وبعدها نحتاج الى متغير يقوم بجلب الهاندل للميمو التي هي الإبن للأب الكبير...
هل نحتاج شئ آخر؟
لا... ليس الآن... ولكن لو افترضنا انه لدينا 5 من الأبناء...
اذا سنحتاج 1 متغيّر للأب و 5 للأبناء... واضح؟

طيب...
اذا نعرف2 من المتغيرات .,, انا استخدمت هذين ...
والمتغيّرات بلتأكيد سيكونون من النوع تي هاندل...
مثال...
var
forr, edi : THandle;

هذا اولا...
ثانيا...
نحتاج الى متغير يكون المسؤل عن النص الذي سيتم جلبه او ارساله...
وهو يكون من النوع سترينج طبعا...
هكذا
Tex: string;

والنتيجة هي التالي لحد الآن...
procedure TForm1.Button1Click(Sender: TObject);
var
forr, edi : THandle;
Tex: string;

نعم.. بين ال
Begin
و
End
نكتب التالي ولكن قبل ان تكتب دعني اشرح بعض الشئ...
نستخدم كلمة او الأمر
FindWindow
لنحدد الأب الكبير للبرنامج... وبعدها نضع النتيجة في المتغير الأول
forr
نعم كما ذكرت سابقا... نستخدم البرنامج الذي تم ذكره في الأعلى...
ونضغط على المربع ونسحبه على المفكرة والنتيجة في ال
Classe
ستكون التالي...
Notepad

هذه مهمة الآن... نكتب التالي في الدلفي...
forr := FindWindow('Notepad',nil);
وهذا هو اول سطر بعد ال
Begin
ماذا يعني هذا الكود؟...
نعم ال
FindWindow
هو فونكشن يأتي بلهاندل...
ولكن هاندل لماذا؟
نعم هاندل للأب الكبير الذي اسمه
Notepad
وبعد ان يأتي بهذا الهاندل يضعه في المتغير...
بعدها يجب ان نستخدم الأمر...
FindWindowEx
ولذي يقوم بجلب الهاندل ولكن للأبناء...
يعني هو خصصيصا للأبناء..
تكتب التالي...
edi := FindWindowEx(forr,0,'Edit',nil);
وهنا كما ترون.. نحدد الأب الكبير اولا... ثم نحدد بعدها الأبن
والذي هو يعنوان
Edit
يعني الميمو في المفكرة.. الكلاس لها اسمه ايديت...
واضح لحد الآن؟ نعم... وكما تم شرح في السابق .. يجلب الهاندل ويضع في المتغير الثاني والذي هو
Edi
بعدها نضع السطر التالي..
SetLength(Tex,Max_Path);
ونلاحظ اخواني الكرام ان التيكس... هو نفسه المتغير الذي عرفناه... وهو من نوع سترينج...
بعدها نضع التالي...
SendMessage(edi,WM_GETTEXT,Max_Path,LongInt(@Tex[1]));
وهنا نرسل أمر بلسيند ماسج... ونقول له... في الهاند لل
Edi
نجلب الكتابة منه... يعني نجلب التيكست من هذا المكون الذي لديه الهاندل مخزّن في المتغير
Edi
وبعدها... يعني بعد ما نجلب الكتابة نضعه في المتغير النصّي الذي عرّفناه بلأسم
Tex
واضح ؟
نعم هذا ما اعرفه لحد الآن والله المستعان
ان كان احد الخبراء يعلم المزيد عن هذا السطر فلا بيخل علينا بارك الله فيه...
نعم وفي الآخير... نضع السطر التالي...
edit1.Text:=Tex;
وهو معروف لماذا...
يعني نحدد اليديت بوكس تيكست ليظهر التيكست المجلوب...

يعني في الآخر...
يكون شكل الكود بلكامل على هذا الحال..

procedure TForm1.Button1Click(Sender: TObject);
var
forr, edi : THandle;
Tex: string;
begin
forr := FindWindow('Notepad',nil);
edi := FindWindowEx(forr,0,'Edit',nil);
SetLength(Tex,Max_Path);
SendMessage(edi,WM_GETTEXT,Max_Path,LongInt(@Tex[1]));
edit1.Text:=Tex;

end;

هذا كل شئ لحد الآن...
بارك الله لكم
آخيرا اود ان اقول لكم ان اردتم ان ترسلو كتابة الى المفكرة...
بإمكاننا ان نستخدم نفس الكود ولكن نغير حرف واحد...
وهو الحرف ؟؟؟؟؟؟؟؟؟؟

نعم هذا عليكم...
حاولوا ان تعرفوا ما هو الحرف وبعدها ان لم تستطيعوا...
اقول لكم ما هو...

نعم هو حرف واحد

بارك الله لكم وجزاكم خيرا...
وان شاء الله سأعطيكم مهمة تنجزونها حتى اتأكت انكم استفدتم من الدرس... :cool:

بارك الله لكم وجزاكم خيرا
ولا نسوني من صالح دعائكم...
والسلام عليكم ورحمة الله وبكاته

.../...انتها الدرس... ولكن بقي ان تجيبوا على السؤآل + مهمة تأتيكم لاحقا ..../....

AL-MOB4RM3G
23-03-2009, 07:47 PM
نعم اخواني الكرام...
الحرف هو؟
نعم مازلت انتظر الجواب...
هو سهل ويسير... يعني مع شوية تركيز فقد... :eek:
امهلكم لحد الأحد المقدم... وبعدها ان لم يضع احد الجواب اضعه انا ان شاء الله حتى يستفيد الإخوة جميعا بإذن الله...

ونسيت ان اذكركم بعنوان مهم وهو من الأخ الحبيب العزيز kachwahed
الرابط يتحدث عن نفس الشئ تقريبا ولكن مع قليل من التفصيل وهو مفيد جدا... بارك الله فيك اخي kachwahed على الرابط :rolleyes:

نجدون الرابط هنا... وهو بلإنجليزية والله المستعان (http://www.swissdelphicenter.ch/en/showcode.php?id=327)

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

galag8
24-03-2009, 10:45 AM
السلام عليكم
ان شاء الله يكون الحل;)

procedure TForm1.Button2Click(Sender: TObject);
var
forr, edi : THandle;
Tex: string;
i:integer;
begin
forr := FindWindow('Notepad',nil);
edi := FindWindowEx(forr,0,'Edit',nil);
if Edit1.Text='' then
ShowMessage('please enter the message u want to send')
else
text:=Edit1.Text;
for i:= 1 to Length(Text) do
begin SendMessage(edi, WM_CHAR,ord(text[i]), 0);
end;
end;

AL-MOB4RM3G
24-03-2009, 03:14 PM
نعم اخي galag8 حيّاك الله...
اجابة مقبولة ما شاء الله عليك مع انه تم تغيّر الكثير من الكود :eek:..
على كل حال تم ارسال النص الى المفكرة وهذا هو المهم...
شكرا على مشاركتك اخي الحبيب :)

ننتظر مشاركات الإخوة والجواب على السؤآل... :)
والسلام عليكم

abualmonther
24-03-2009, 08:46 PM
آخيرا اود ان اقول لكم ان اردتم ان ترسلو كتابة الى المفكرة...
بإمكاننا ان نستخدم نفس الكود ولكن نغير حرف واحد...
وهو الحرف ؟؟؟؟؟؟؟؟؟؟

..../....

السلام عليكم انا مبتدئ (تحضيرى) وهذا المنتدى هو مدرستىواحاول يوميا معكم حسب ما توصلت اليه الحرف استبدال sمكان g فى كلمتى get and set الا اننى لم افهم كثيرا حيث فهمت انه يستعمل للكتابة فى المفكرة (notpade) وعندما طبقته وجدته يغيير عنوان الفورم حسب edit ويجلب عنوان الفورم الى edit ****ا ان تبشط مع توضيح فيما يمكن ان نستعمله وشكرا لك ولكل الاساتذة الكرامprocedure TForm1.Button5Click(Sender: TObject);
var
forr, edi : THandle;
Tex: string;
begin
forr := FindWindow('Notepad',nil);
edi := FindWindowEx(forr,0,'Edit',nil);
SetLength(Tex,Max_Path);
SendMessage(edi,WM_SETTEXT,Max_Path,LongInt(@Tex[1]));//
edit3.Text:=Tex;

AL-MOB4RM3G
25-03-2009, 05:57 PM
حيّاكم الله جميعا اخواني...

حسب ما توصلت اليه الحرف استبدال sمكان g فى كلمتى get and set

نعم هذا صحيح اخي الحبيب..
بارك الله لك :) وما شاء الله عليك

الا اننى لم افهم كثيرا حيث فهمت انه يستعمل للكتابة فى المفكرة

نعم اخي الكريم...
هذا هو الدرس..

لتطبيقق لدرس ستتمكن من ارسال + جلب معلومات نصّيا من المفكرة...

عندما طبقته وجدته يغيير عنوان الفورم حسب edit ويجلب عنوان الفورم الى edit

نعم اخي, حقيقة حصل معي هذا الشئ عندما جربت انا كود الأخ galag8 ولكن كان الهدف هو أخذ المعلومات من الفكرة... يعني لم انبه الأخ على هذا ... وعدلت على الكود انا قليلا حتى تمكنت من التخلص من هذا الشئ

لكن اخي ان كتبت انت الكود التالي

procedure TForm1.Button1Click(Sender: TObject);
var
forr, edi : THandle;
Tex: string;
begin
forr := FindWindow('Notepad',nil);
edi := FindWindowEx(forr,0,'Edit',nil);
SetLength(Tex,Max_Path);
SendMessage(edi,WM_GETTEXT,Max_Path,LongInt(@Tex[1]));
edit1.Text:=Tex;
end;

ماذا يحدث معك ؟ جربه ورد علي خبر... هل يتغير العنوان للفورم؟
هل تستطيع جلب المعلومات من المفكرة؟

بارك الله لك وشكرا على استفسارك :rolleyes:

abualmonther
25-03-2009, 07:57 PM
السلام عليكم
نعم البرنامج يقوم بجلب المعلومات ،وارسالها الى المفكرة مع تغيير بسيط كما قلت هو تغيير حرف مع تحديد النص المراد ارساله قبل الامر
sendMessage

procedure TForm1.Button1Click(Sender: TObject);
var
forr, edi : THandle;
Tex: string;
begin
forr := FindWindow('Notepad',nil);
edi := FindWindowEx(forr,0,'Edit',nil);
SetLength(Tex,Max_Path);
SendMessage(edi,WM_GETTEXT,Max_Path,LongInt(@Tex[1])); //***204;***225;***200; ***199;***225;***228;***213; ***227;***228; ***199;***225;***227;***221;***223;***209;***201;
memo1.Text:=tex;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
forr, edi : THandle;
Tex: string;
begin
forr := FindWindow('Notepad',nil);
edi := FindWindowEx(forr,0,'Edit',nil);
SetLength(Tex,Max_Path);
Tex:= memo1.Text;// ***202;***219;***237;***237;***228; ***199;***225;***228;***213; ***199;***225;***227;***209;***199;***207; ***199;***209;***211;***199;***225;***229;
SendMessage(edi,WM_SETTEXT,Max_Path,LongInt(@Tex[1]));// ***199;***209;***211;***199;***225; ***199;***225;***228;***213; ***199;***225;***236; ***199;***225;***227;***221;***223;***209;***201;

end;

AL-MOB4RM3G
26-03-2009, 12:28 PM
نعم البرنامج يقوم بجلب المعلومات ،وارسالها الى المفكرة مع تغيير بسيط كما قلت

الحمد الله... يعني مشي الحال معك :) جميل اخي الكريم...

طيب اخواني
لمن اراد ان يكمل... اعطيكم الآن المهمة او الوظيفة البيتية :eek:
والمطلوب هو عمل برنامج يجلب المعلومات من الآلة الحاسبة
وهذا لمن احب ان يكمل ...

وأن لم يفعل هذا احد.. اضع انا الحلّ بعد كم يوم ان شاء الله

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

Dr.MOT
26-03-2009, 01:42 PM
السلام عليكم ,,

أعتذر عن التأخر الشديد في الرد !!
لكن لعلي ألحق بالأخوه الذين أحاوبوا وأضع إجابتي ,,
بالنسبة للكود الذي وضعت ( للحصول على النص في المفكره ) :
procedure TForm1.Button1Click(Sender: TObject);
var
forr, edi : THandle;
Tex: string;
begin
forr := FindWindow('Notepad',nil);
edi := FindWindowEx(forr,0,'Edit',nil);
SetLength(Tex,Max_Path);
SendMessage(edi,WM_GETTEXT,Max_Path,LongInt(@Tex[1]));
edit1.Text:=Tex;
end;

الإجابة بتغيير حرف الـ G إلى S
( GETTEXT >>> SETTEXT )
ولكن أعتقد هذا ليس حلا كاملا !! حيث لا يتم ارسال النص الموجود في الإيدت ,,
وبذلك يعدل الكود إلى الكود التالي :
procedure TForm1.Button1Click(Sender: TObject);
var
forr, edi : THandle;
Tex: string;
begin
Tex := Edit1.Text ;
forr := FindWindow('Notepad',nil);
edi := FindWindowEx(forr,0,'Edit',nil);
SetLength(Tex,Max_Path);
SendMessage(edi,WM_SETTEXT,Max_Path,LongInt(@Tex[1]));
end;
بارك الله لكم وبارك فيكم

Dr.MOT
26-03-2009, 02:09 PM
السلام عليكم أخ _Moh أتيتك بالحل :D ,,

للحصول على التكست من الحاسبة ( Get ) :
procedure TForm1.Button3Click(Sender: TObject);
var
Fr,Ed : THandle ; Edt: String ;
begin
Fr := FindWindow('SciCalc',nil);
Ed := FindWindowEx(Fr,0,'Edit',nil);
SetLength(Edt,MAX_Path);
SendMessage(Ed,WM_GETTEXT,Max_Path,LongInt(@Edt[1]));
Edit1.Text:= Edt ;
end;

لوضع النص للحاسبه ( Set ) :
procedure TForm1.Button4Click(Sender: TObject);
var
Fr,Ed : THandle ; Edt: String ;
begin
Edit1.Text := Edt ;
Fr := FindWindow('SciCalc',nil);
Ed := FindWindowEx(Fr,0,'Edit',nil);
SetLength(Edt,MAX_Path);
SendMessage(Ed,WM_SETTEXT,Max_Path,LongInt(@Edt[1]));
end;
بارك الله فيك أخي الكريم ,, وأتـمنى منك التعمق أكثر بالدرس فقد أستمتعنا واستفدنا ,,
أكرر شكري لك أخي الكريم ,,

Dr.MOT
26-03-2009, 03:05 PM
السلام عليكم
أمر رائع جدا :D ,, حيث تستطيع تغير الـ Caption الخاص بالـ Buttons !
http://www.ii1i.com/uploads4/d8da4de3a0.png
لكن اواجه مشكله غريبه جدا!
وهي أنه عندما أجعل الفورم على StayOnTop فإن البرنامج لا يعمل على الوجه الصحيح !؟
يا ترىا لمـاذا ؟
وبارك الله فيكم

abualmonther
26-03-2009, 04:53 PM
السلام عليكم هذا هو الحل ،ارسال المعلومة الى editالالة الحاسبة ...وشكرا
procedure TForm1.Button6Click(Sender: TObject);
var
cal,edi : THandle;
Tex: string;
begin
cal:= FindWindow('SciCalc',nil);
edi:= FindWindowEx(cal,0,'edit',nil);
SetLength(Tex,Max_Path);
Tex:= edit4.Text;
SendMessage(edi,WM_SETTEXT,Max_Path,LongInt(@Tex[1]));


end;

AL-MOB4RM3G
26-03-2009, 07:14 PM
سلام الله عليكم اجمعين

لكن لعلي ألحق بالأخوه الذين أجاوبوا وأضع إجابتي ,,
لا بئس اخي الحبيب... اهلا وسهلا بك :)
بالنسبة للكود الذي وضعت ( للحصول على النص في المفكره ) :
حربته وهو صحيح..
الإجابة بتغيير حرف الـ G إلى S
صحيح... ما شاء الله عليك اخي..
ولكن أعتقد هذا ليس حلا كاملا !! حيث لا يتم ارسال النص الموجود في الإيدت ,,
نعم اخي الحبيب.. هذا صحيح... يحتاج الى شئ من التعديل..
لكن الهدف الذي كنت اود ان ادل عليه كان حرف ال s ... وكان قصدي انه بذلك يمكن ارسال النصوص مع شئ من التعديل... لكن العبارة وصلت غير مفهوم والله المستعان... يعني الخطأ مني انا... سآمحوني :eek:
وبذلك يعدل الكود إلى الكود التالي :
بارك الله لك... جميل ...
للحصول على التكست من الحاسبة ( Get ) :
اجابة صحيحة... ما شاء الله طالب مجتهد :p
لوضع النص للحاسبه ( Set ) :
لا اخي الحبيب... هذه غير صحيحة... حاول مرة اخرى...
في حالتي يظهر في الألة الحاسبة كلمة left مهما وضعت من كلمة في الإديت بوكس...
يعني في خلل ما ... والخلل سهل ويسير... جرب وحاول مرة اخرى..
وأتـمنى منك التعمق أكثر بالدرس فقد أستمتعنا واستفدنا
والله يا اخي الحبيب... ان شاء الله سأحاول التعمق ولكن هذا الذي اعلمه الآن... ان وصلت انا الى شئ جديد فسأضعه هنا ان شاء الله... وان كان هناك من الإخوة من يعلم شئ عن هذا الموضوع فليتحفنا به جزاه الله عنا كل خير...
عندما أجعل الفورم على StayOnTop فإن البرنامج لا يعمل على الوجه الصحيح !!؟
يا ترىا لمـاذا ؟
ما الخلل اخي الكريم ؟ وما هو البرنامج الذي تضعه StayOnTop ؟ بارك الله فيك وجزاك خيرا
ماذا عن الضغط علي زر فى برنامج اخر ؟
اخي الكريم اجبتك عن هذا ... ربما لم تنتبه لذلك...
قلت لك اني لا اعلم... وانا ايضى احاول عمل لذلك لكن لا ادري كيف...
ربما احد الإخوة يعلم كيف ؟
اخي abualmonther
صحيحة الإجابة جزاك الله خيرا...
بارك الله لكم جميعا..
ومعاً الى الأمام ;)

Dr.MOT
26-03-2009, 07:55 PM
السلام عليكم

لا اخي الحبيب... هذه غير صحيحة... حاول مرة اخرى...
في حالتي يظهر في الألة الحاسبة كلمة left مهما وضعت من كلمة في الإديت بوكس...
يعني في خلل ما ... والخلل سهل ويسير... جرب وحاول مرة اخرى..

أهلا أخي العزيز ,, :D
في الحقيقة جربت الكود وهو يعمل معي 100% !
تأكد من أن الحاسبة تعمل أولا :eek: ,
( السورس في المرفقات )

ما الخلل اخي الكريم ؟ وما هو البرنامج الذي تضعه StayOnTop ؟ بارك الله فيك وجزاك خيرا

الله اعلم أخي !
فعلا غريبه جدا !
السورس + البرنامج موجود في المرفقات للإطلاع عليه والتأكد من ذلك !
( ملاحظه : أستخدم دلفي 7 )

AL-MOB4RM3G
26-03-2009, 08:43 PM
هممم اخي الكريم... غريب انا عندي لم ينفع السورس الذي وضعته..
على كل حال... حملته وجربته...

طيب اخي... ما رأيك بهذا ؟
Edit1.Text := Edt ;
في ال Set للآلة الحاسبة ؟

هههه اعتقد لم تنتبه عليه ؟
بجب ان يكون العكس... اليس كذلك اخي؟
بارك الله فيك

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

TF6M
26-03-2009, 11:53 PM
السلام عليكم

في مايخص StayOnTop بسيط !!! إدا كان البحث بإسم الصنف مثلا و كان هناك واجهتين تحمل نفس إسم الصنف

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

بالتوفيق ,,

Dr.MOT
27-03-2009, 10:34 AM
هممم اخي الكريم... غريب انا عندي لم ينفع السورس الذي وضعته..
على كل حال... حملته وجربته...

طيب اخي... ما رأيك بهذا ؟
Edit1.Text := Edt ;
في ال Set للآلة الحاسبة ؟

هههه اعتقد لم تنتبه عليه ؟
بجب ان يكون العكس... اليس كذلك اخي؟
بارك الله فيك

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

نعم صحيح كيف لم أنتبه لهذا !! :eek:

بارك الله فيك ,,


السلام عليكم

في مايخص StayOnTop بسيط !!! إدا كان البحث بإسم الصنف مثلا و كان هناك واجهتين تحمل نفس إسم الصنف

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

بالتوفيق ,,


وعليكم السلام ,,

نعم بالفعل أخي الكريم كلامك صحيح ( كنت أجرب مع Win X ويحدث معي الخطأ )

بارك الله فيكم جميعا

AL-MOB4RM3G
27-03-2009, 06:10 PM
بارك الله فيك ,,

وفيكم بارك الله اهي الكريم,,

في مايخص StayOnTop بسيط !!! إدا كان البحث بإسم الصنف مثلا و كان هناك واجهتين تحمل نفس إسم الصنف

فإذا أرسلنا رسالة لهده الواجهة فإنها تصل الواجهة الأولى (StayOnTop) وعليه حاول اول ترتيب الواجهات المفتوحة

اخي الكريم,, هل لك ان توضح قليلا بارك الله لك ,, لم افهم ماذا تقصد :o ؟ وحب ذا لو بمثال او بسورس بارك الله لك ,, ممكن يكون عن البرنامج Win X فهو فيه خاصّية ال StayOnTop ؟

جزاك الله خيرا ومنكم نستفيد اخي الحبيب

TF6M
28-03-2009, 12:06 AM
أولا أخي أشكرك على الدرس الجميل .. بارك الله فيك ,,

1- نفرض أن لدينا واجهتين (1) و (2) لهما نفس إسم الصنف (إسم الأرضية) مثلا :

فاتح 2 من الـ NotePad كيف تحدد المستقبل ؟؟ :

- عن طريق GroundHand أو بالتدرج التنازلي يعني NotePad1 فوق NotePad2 فإن الرسالة
تصل NotePad1 لأنه Top بالنسبة NotePad2 .

هدا برنامج بسيط يعطيك قيم الهندل و الصنف وفق وضعية المؤشر على الشاشة .

2- ****ا أن تتطرق أيضا PostMessage/SendMessage مع الفروق بينهما :

SendMessage/PostMessage (http://www.piotrkaluski.com/files/winguitest/docs/ch09s74.html)


http://img16.imageshack.us/img16/7117/14234h.jpg

Dr.MOT
28-03-2009, 01:25 PM
السلام عليكم ,,

في سياق الموضوع ,,

كيف أستطيع أن أحدد أحد العناصر في البرنامج إذا كان هناك عنصرين يحملان نفس اسم الصنف ,, ؟

فـ مثلا في برنامج Win X يوجد أكثر من TButton ,, إذا كتبنا TButton هكذا فإنه سيذهب للموجود في الأعلي من اليسار !!!

ماذا لو أردت الزر الآخر ؟ كيف ذلك ؟

وشكرا

Dr.MOT
28-03-2009, 01:41 PM
الأعلي من اليسار !!!

كنت أقصد : الأعلى من اليمين ,,

TF6M
29-03-2009, 12:22 AM
1- أخي الكريم بما أنا طبيعة المعطيات المرسلة عبارة عن متغيرات من نمط String

فقط يجب الإشارة الى : إذا كان s متغير من نمط String و z من نمط ShortString

فإن S[0]1 ستحمل عدد محارف السلسلة مثلا 'S:= 'Isaam فإن S[0]1 تساوي 5 (بالهيكس)

لكن هذا غير منطقي لأن s سيشغل 4 byte من الداكرة (أصغر قيمة 0000 h و أكبر h ffff) إذا

S[0]1 لا يمكن أن يمثلها لدا إستعنا بالدالة SetLength في مثال الأخ ... بارك الله فيه ,, التي ستقوم
بإلزام طول محدد (غير ديناميكي للسلسلة) .

لكن لو إستعملنا بالمتغير z فلن نحتاج للتعليمة SetLength لأن z يأخد 1 byte ا(0 255) و بالتالي

z[0]1 يمثل السلسلة تمثيل دقيق (لأنه مستحيل أن يفوق طول السلسلة 256 محرف و هي قيمة
قابلة للعرض في 1 بايت 'FF') .

TF6M
29-03-2009, 12:31 AM
2- طبيعة السلال الحرفية أنها تخزن بصفة تسلسلية وفق :

1 - عنوان البايت الاول من السلسلة .
2 - عدد الحروف الممثلة بالهيكس في هدا البايت .

3- في ما يخص وجود أكثر من عنصر له نفس إسم الصنف فقط تدكر أن الدالة FindWindow

لها بارامتران : (1,2)FindWindow

(1) إسم العنصر بدلالة صنفه .
(2) إسم العنصر بدلالة إسمه الفعلي .

وعليه قمة بوضع هدا المثال البسيط الدي يوضح الفكرة :

http://img256.imageshack.us/img256/3056/121w.jpg

http://img256.imageshack.us/img256/8898/122q.jpg

4- كيف الأن لنا أن نستغني على SetLength ؟؟؟؟ ... بالتوفيق ,,

Dr.MOT
29-03-2009, 12:46 PM
السلام عليكم ,,

نعم بارك الله فيك أخي الحبيب ,, كان علي أن أتعب وأبحث قليلا ,, فعذرا على الإزعاج !!

4- كيف الأن لنا أن نستغني على SetLength ؟؟؟؟

مممم ,,

عن طريق تعريف متغير النص بــ ShortString بدلا من String ! ( كما فهمت :D )


والله اعلم

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

TF6M
29-03-2009, 02:25 PM
ههههههههههه

صحيح لكن هناك تغيير بسيط على الكود Text[0]
لأننا سنبدأ منه لأن به حاجتنا (عدد حروف السلسلة) لأنه لو كان من String لألزمنا بكتابة طول السلسة بانفسنا (setlenght) و نبدأ من Text[1]

بالتوفيق ,,

AL-MOB4RM3G
30-03-2009, 10:15 AM
بارك الله فيك اخي الحبيب tf6mehboul
الأمر واضح الآن وضوح الشمس :cool:

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


بارك الله لكم وأشكرك كثيرا...

mohamed DZ
20-06-2009, 11:45 PM
شــــــــــــــــــــــــــــــــــرح ممتــــــــــــــــــــــاز اخي الكريم

Delphawi
08-07-2009, 11:07 PM
جزاكم الله خيراً على هذا الدرس , وعلى هذا النقاش الرائع
واستفدت كثيراً منه لأنني كنت أبحث عن موضوع يشرح عمليات إرسال الرسائل بين البرامج المختلفة

لدي سؤال في الكود التالي :

SendMessage(edi ,WM_GETTEXT ,Max_Path ,LongInt(@Tex[1])) ;
ما وظيفة البارمتر الأخير LongInt(@Tex[1]) ؟

فهمت انه يحول عنوان المحرف الأول من المتغير إلى LongInt , لكن لماذا ؟

أنا جربت الكود على نص مكون من 300 حرف x , وعمل بشكل جيد (طبعا لم يتم نقل جميع حروف x وذلك بسبب Max_Path)
لكن , عند جعل رقم 1 في البارمتر الأخير = 13 , تظهر عبارة VERSION_INFO يليها بقية حروف x
أما عند جعل رقم 1 في البارمتر الأخير = 14 أو أكثر , تظهر عبارة VERSION_INFO فقط

جزاكم الله خيرا

TF6M
09-07-2009, 01:07 AM
السلام عليكم ,,

لدي سؤال في الكود التالي :

Function SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;

hWnd : مقبض النافذة او البروسيس او المنفذ .... الخ (المطلوب إرسال أو إستقبال المعلومات منه).

Msg ز: WindowsMessage نجدها في Messages.pas

lParam& wParam: برامترات خاصة بنوع الـ Message .

ما وظيفة البارمتر الأخير :

بما أن الرسالة WM_GETTEXT

wParam : تحديد طول السلسلة النصية هنا وفرنا MAX_PATH = 260 محرف .

lParam : بما اننا نتعامل مع سلسلة نصية نحتاج فقط لعنوان المحرف رقم 1 .

===========================================
عنوان المحرف الاول في الذاكرة :

@Text[1]

طول السلسلة (عدد المحارف) :

@Text[0]

أعطيناه قيمة إفتراضية 260 Byte (كل Char = 1 Byte) .

يعني يجب أن لا يكون طول السلسلة أكثر من 259 محرف + 1 لتسجيل طول السلسلة .

@ تحديد عنوان .... (مؤشر) .

بالتوفيق ,,

TF6M
09-07-2009, 01:18 AM
راجع المشاركة 36/37 لمزيد من الفهم .

قديم الشوق
26-12-2010, 09:20 AM
درس دسم
البرنامج مبرمج Borland Delphi 6.0 - 7.0
جاري قراءة الدرس
وأن كان هناك أستفسار سنعود :)