الكائن Command و مثال هام عليه
الرجاء من السادة مشرفي المنتدى تثبيت الموضوع إذا أستحق ذلك لتعم الفائدة على الجميع.
عند التحدث عن Command يذهب ذهننا إلى الأداة Command Button لكن الفرق بينه و بين الكائن Command أظنه واضح و لا يوجد حاجة إلى عرضه حتى لا ينزل من قدر هذا الموضوع المتقدم.
أخوتي الأعزاء كيف يمكننا أن نتحكم بالبرنامج في لحظة الضغط عليه
الأمر ليس سهل ولا معقد لدرجة كبيرة.
سأضرب لكم مثال و اقعي في بيئة Windows و هو الملف Notepad.exe الموجود في مجلد Windows وهو المسؤول عن عرض صفحات الـ TXT في الجهاز لكن ليست هنا النقطة النقطة هي عندما نفتح مستند نصي فنلاحظ أن Windows يفتح لنا الـ Notepad و في داخلها النص الموجود في ملف الـTXT كيف حدث ذلك ؟
الجواب هو أننا عندما نفتح الملف الـTXT على سبيل المثال فإن مسار الملف ينحفظ في الذاكرة فوراً و من هذا المنطلق نسطيع من خلال الدالة Command جلب مسار الملف المطلوب.
مثال:
نريد أن نصنع برنامج مثل الـ Notepad .
نصنع Module و نكتب ما يلي:
Option Explicit Sub Main() Dim FileNum As Integer Dim XString As String If FileLen(Command$) = 0 Then End FileNum = FreeFile XString = Space$(FileLen(Command$)) Open Command$ For Binary As #FileNum Get #FileNum, , XString Close #FileNum Form1.Text1.Text = XString End Sub
الاّن من القائمة Project أختر Project Properties ثم التبويب General و من ثم غير الـ Combo الموجود تحت الـStartup Object من Form1 إلى Sub Main ثم OK .
الاّن أصبح البرنامج المتواضع جاهز لأستقبال الملفات الخاصة به .
لكن أنتظر ما هي الملفات التي ستقوم بقراءتها, لابأس سنقوم نحن بصناعته:
أصنع ملف ذو لاحقة TST مثلاً بالطريقة التي تفضله أما على Visual Basic إو الـDOS أو الـ Notepad.
من بعد صناعة الملف المطلوب أكتب بداخله النص الذي تريد.
الاّن صنعنا البرنامج الخاص بأستعراض الملفات ذات اللاحقة TST
و صنعنا الملفات ذات اللاحقة TST ماذا بقي لدينا.
بقي لدينا أن نعرف الملفات لدى Windows أي عند قيام المستخدم بصناعة الملفات ذات اللاحقة TST يقوم الـ Windows بأعطائها الرمز المطلوب و يفعلها لكي تشتغل على برنامجنا.
الأمر بغاية السهولة بل بغاية الذكاء .
أدخل إلى محرر النظام Registry من Run مثلاً من ثم أدخل إلى المفتاح HKEY_CLASSES_ROOT و أضغط بالزر الأيمن للماوس و من ثم أختر New و بعدها Key و سمه أسم اللاحقة المراد صنعها لكن لاتنسى النقطة أي يصبح أسم المفتاح .TST وفي داخل المفتاح عدل قيمة الـ (Default) إلى Test File .
الخطوةالأولى تمت و الشكل التالي سيوضح.
ماذا بعد.. حسننا؟
أرجع إلى HKEY_CLASSES_ROOT و New مرة أخرى و أصنع مفتاح و سمه Test Files و أيضاً عدل قيمة الـ (Default) إلى Test File و من ثم أصنع في المفتاح Test Files مفتاح أخر وسمه DefaultIcon و في دا خله عدل قيمة الـ (Default) إلى مو قع الايقونة المراد و ضعها للبرنامج و لتكن C:\TST Reader\Icon.ico ,
و بعدها عد إلى المفتاح Test Files و أنشئ مفتاح أخر و سمه Shell و انشئ فيه مفتاح أخر وسمه Open و أنشئ فيه مفتاح أخر وسمه Command و في داخله عدل قيمة الـ (Default) إلى موقع البرنامج الذي صنعناه في أول الموضوع و ليكن
%Windows%\TST Reader.exe 1%\ و ضعنا كلمة Windows بين اشارتي % % عوضاً عن كتابة أسم مجلد Windows قد يكون في بعص الأجهزة WinMe أما أشارة 1% كتبت لتعود بقيمة الـ Command أي مو قع الملف الذي سنفتحه الشكل التالي سيوضح الخطوة الثانية.
أنتهينا و الحمد لله لم يبقى سوى أن تعيد أطلاق كمبيوترك أو تقوم بتسجيل الدخول كي يعيد الـ Windows قراءة ما عدلته في الـ Registry .
ملاحظة: يمكنك أن تضع عدد من الأوامر فقط أصنع مفتاح مثل Open الذي صنعناه منذ قليل و أصنع فيه مفتاح Command و أكتب مكان الأمر الثاني .
لكن إذا أردنا أن نصنع مثل أمر Print في ملفات الـ TXT كيف هل يوجد ملف مثل الـ Notepad مختص بالطباعة طبعاً لا و هنا تكمن فائدة الكائن Command لأنه ليس فقط يمكنه أن يجلب مسار الملف بل يجلب مسار الملف كاملاً أي مع الأوامر التي أسندت له
كمثال تقريبي يمكنك أن تفتح محرر النظام و تفت المفتاح TXTFile
و تلاحظ بالمفتاح Print أنه أعطى للمسار و قبل أشارة %1 الأشارة p/ :
\%Windows%\NOTEPAD.EXE /p %1
ما ذا تعني هل هي أشارة أساسية طبعاً لا فهية أشارة أختارها مبرمج الـ Notepad و سنختار واحدة لنا كما فعل و لتكن /Print و سوف نكتبها في مكان المفتاح الخاص بالطباعة و نضعها ما بين المسار و أشارة %1 و تصبح:
\%Windows%\TSTReader.exe /Print %1
لكن كيف نخبر فيجيوال بيزك بالتعديل الأمر بسيط في الكود الذي كتبناه في الـ Main سنعدله و يصبح.
Option Explicit Sub Main() Dim FileNum As Integer Dim XString As String Dim XCommand As String Select Case Left(Command$, 6) Case "/Print" XCommand = Mid$(Command$, 8, Len(Command$)) If FileLen(XCommand) = 0 Then Exit Sub: End FileNum = FreeFile XString = Space$(FileLen(XCommand)) Open XCommand For Binary As #FileNum Get #FileNum, , XString Close #FileNum Form1.Text1.Text = XString Form1.Show Printer.Print Form1.Text1.Text; Printer.EndDoc Case Else If FileLen(Command$) = 0 Then End FileNum = FreeFile XString = Space$(FileLen(Command(($ Open Command For Binary As #FileNum Get #FileNum, , XString Close #FileNum Form1.Text1.Text = XString Form1.Show End Select End Sub
و في هذه الحالة يكون برنامجنا أصبح جا هزاً لطباعة ملفاته.
قبل الأنتهاء ما رأيكم بأن نصنع ملف ليعد تلك الصفات في محرر النظام حتي لا يقوم المستخدم عند شراء البرامج بتعديل الخصائص بنفسه مما يجعل برنامجك غير أحترافي.
أفتح محرر النصوص Notepad و أكتب بداخله ما يلي:
REGEDIT4 [HKEY_CLASSES_ROOT\.TST] @="Test Files" [HKEY_CLASSES_ROOT\Test Files] @="Test Files" [HKEY_CLASSES_ROOT\Test Files\DefaultIcon] @="C:\\TST Reader\\Icon.ico" [HKEY_CLASSES_ROOT\Test Files\Shell] [HKEY_CLASSES_ROOT\Test Files\Shell\Open] [HKEY_CLASSES_ROOT\Test Files\Shell\Open\Command] @="\\%Windows%\\TST Reader %1".
و من ثم قم بحفظه بلاحقة .Reg
ملاحظة: لا تنسى أن تضع البرنامج في مجلد Windows .
أنتهينا من المثال الأول لأستخدام الكاثن Command و يو جد مئات الأمثلة على ذلك لكني أخترت هذا المثال لأنه من أهم الأمثلة سأطرح في المرة القادمة مثال عن صنع Screen Saver و تفعيل خصائصها Test و Configure و Install و Setting و Preview .
تم بأ ذن الله كتابة هذا الموضوع بقلم غسان الجزار
تم طرحه للمرة الأولى في منتدى الفريق العربي للبرمجة قسم فيجيوال بيزك /index.php?showforum=1
تقييم الموضوع : متقدم
كلمة الكاتب : قمت يكتابة هذا الموضوع لتأخره في كتاب الأسطورة المبرمج تركي العسيري (فيجيوال بيزك للجميح نحو برمجة كائنية التوجيه OPP)
لأستفساراتكم بريدي : Virussnake_code@yahoo.com
الموقع : www.geocities.com/virussnake_code
أكرر الرجاء من السادة مشرفي المنتدى تثبيت الموضوع إذا أستحق ذلك لتعم الفائدة على الجميع.
ألملفات المرفقة الصور التوضيحية مع مثال تطبيقي مع المقالة الأصلية


