![]() | ![]() | ![]() |
![]() |
| |||||||
![]() |
| | LinkBack | خيارات الموضوع | طريقة العرض |
|
#21
| ||||
| | ||||
| رد: مسابقة الشهر (هناك جوائز) :d رائع اخي لكن إسمح لي ارفع الصور الى الموقع لأنها لاتظهر إلا بعد اخذ الرابط وفتحها بمتصفح |
|
#22
| |||
| | |||
| رد: مسابقة الشهر (هناك جوائز) :d السلام عليكم ها قد عدت من جديد. الآن سنأخذ القسم الثاني من أوامر البرنامج وهو "استدعاء صندوق الفتح والحفظ" أولا: سأبدأ بتعريف صندوق الفتح والحفظ، والغاية منه ولم يكون هو أفضل من غيره. ثانيا: سأشرح كيف يتم استدعاؤه وكيف يتم التعامل مع معطياته. فلنبدأ على بركة الله. 1 : أ - ما هو صندوق الفتح والحفظ أو ما يُعرف بالإنجليزية باسم "CommonDialog"؟ - في أي برنامج يُوجد على حاسوبك اذهب إلى قائمة "File" ثم اضغط على "Save As..." سيظهر لك صندوق يطلب منك تحديد مكان لحفظ ما ترغب بحفظه. - في أي برنامج يُوجد على حاسوبك اذهب إلى قائمة "File" ثم اضغط على "Open" سيظهر لك صندوق يطلب منك تحديد الشيء الذي تريد فتحه. ذلك الصندوق الذي يظهر هو ما يُعرف ب "Common Dialog" أو "صندوق الفتح والحفظ". تنبيه (صندوق الفتح والحفظ ليس ترجمة ل "CommonDialog") ب - الغاية من هذا الصندوق واضحة جدا فهو يُساعدك على تحديد المكان الذي تريد أن تحفظ به شيئا ما وكذلك يُساعدك على تحديد مكان ملف ما لفتحه. ج - بالنسبة لنا نحن كمبرمجين، لم هو أفضل من طرق أخرى؟ هناك طرق أخرى لكي نجعل مستخدِم برنامجنا يُحدد الملف الذي يُريد فتح أو المجلد الذي يُريد الحفظ فيه، لكنها كلها تقتضي منا المزيد من العمل وطبعا من يرغب في أن يُكثر العمل على نفسه إذا كانت هناك طريقة أسرع للحصول على نفس الغاية؟!! من ناحية هناك من يُريد أن يُتعب نفسه والسبب هو أن يكون البرنامج متناسقا ويُظهر براعة المصمم... ومن ناحية أخرى هناك من يرغب فقط في أن يتم العمل والسلام. ولهذا الأخير وُجد ال "CommonDialog". ال "CommonDialog" هو صندوق يُوجد مع نظام الحاسوب وهو عبارة عن "مكتبة ربط ديناميكية" "DLL" وهو يُوجد تحت المسار التالي: "C:\Windows\System32" باسم "comdlg32.dll". وكل برامج النظام أو أي برامج خارجية يُمكنها استدعاؤه في نفس الوقت، وكذلك برنامجي هذا الذي بين أيديكم، وطبعا أي برنامج ستصممونه وتحتاجون فيه لهذا الصندوق، ستقومون باستدعائه للعمل به، بعد أن تعرفوا بعد قليل كيف يتم ذلك. ملحوظة: ادخلوا موقع "http://www.google.com" واكتبوا "مكتبات الربط الديناميكية"، وستجدون عدة مواقع ستشرح لكم معناها والذي لا يُمكن أن أقوم به أنا هنا وإلا سأبتعد عن غاية كتابتي هنا وهي شرح أوامر برنامجي فقط. وطبعا هذا لمن يُريد الاستزادة من المعرفة لا غير، أو من يُريد أن يُصبح محترفا. 2 : كيف يتم استدعاء ال "CommonDialog"؟ وكيف يتم التعامل معه؟ أ - يتم التصريح في أعلى صفحة الأوامر بالتصريحين التاليين على أننا سنستخدم مكتبة الربط الديناميكية "comdlg32". Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long كما تلاحظون فإني وضعت تصريحين فحسب الأول هو "GetOpenFileName" الخاص بالفتح، والثاني هو"GetSaveFileName" الخاص بالحفظ. ثلاث ملحوظات: - لفهم الهيكلية التي يتم بها استدعاء "API" معينة مثل "GetOpenFileName" من داخل "comdlg32.dll" حاولوا قراءة عدة مواضيع عن "DLL" وقد تجدون شيئا يتحدث عن ذلك. لكن بشكل عام فإن ذلك غير مفيد للمبرمج العادي بغنى عن مستواه، وذلك لأنه لكي تستدعي "API" معينة بنفسك عليك أن تكون على معرفة تامة بأوامر ال"DLL" المراد استدعاء "API" منه. ولا أظن أي مبرمج عادي سيرغب في ذلك بما في ذلك أنا أيضا. (رغم أن الرغبة تُداعبني أحيانا). ![]() - استدعاء ال"API" من "DLL" معين يتم بالنسبة للأغلبية الساحقة من المبرمجين على اختلاف مستوياتهم عن طريق الإنترنت أو عن طريق قاعدة بيانات تحتوي على كل ال "API" والغاية منها وحتى طريقة استخدامها أحيانا. هذا يعني: استخدموا الطريقة السحرية الرائعة التي تُحقق كل الأمنيات وهي البحث في "Google". على فكرة (هذا ليس إعلان ل "Google" فعملاق مثله لا يحتاج لدعاية).- هناك "API" ثالث على الأقل في المكتبة "comdlg32" وهو ال"API" الخاص بتحديد مجلد. وقد يكون هناك "API" غير ذلك. (لكن هذا هو كل ما أعلمه من الموجود فيها). ب - بعد التصريح نقوم بتحديد "نوع" "Type" Private Type OPENFILENAME lStructSize As Long hwndOwner As Long hInstance As Long lpstrFilter As String lpstrCustomFilter As String nMaxCustFilter As Long nFilterIndex As Long lpstrFile As String nMaxFile As Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String flags As Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustData As Long lpfnHook As Long lpTemplateName As String End Type ما هو ال"Type"؟ الحقيقة لا أدري بالضبط :crying: فأنا لم أتعلم ال"VB" عن طريق مدرسة، وإنما لوحدي بأسلوب التجربة والخطأ، وتحليل الأوامر الجاهزة. لكن يُمكن أن نقول إنه أشبه بتكوين أداة ما. حيث يكون اسم الأداة هو "OPENFILENAME" في السطر التالي: Private Type OPENFILENAME وتكون خواص الأداة هي المتغيرات المعرفة بين: Private Type OPENFILENAME و End Type وكما نقوم باستخدام خواص الأداة (مثلا) بالشكل التالي: label1.Property = Value فإننا نستخدم ال"نوع" "Type" بنفس الشكل: OPENFILENAME.Property = Value لكن في استخدام ال "Type" هناك شيء إضافي حيث أننا لا نقوم باستخدامه مباشرة كما فعلت في هذا السطر أعلاه وإنما نقوم باسناده إلى متغير قبل ذلك ويكون هذا عبر الشكل التالي: Dim ofn As OPENFILENAME حيث "ofn" هو المتغير الذي سيكون بمثابة اسم الأداة، وبهذا يكون استخدام ال "Type" هكذا ofn.Property = Value ج - اسناد النوع "OPENFILENAME" إلى متغير، وذلك يكون بهذا الشكل: Dim ofn As OPENFILENAME ملحوظة: ofn و OPENFILENAME هي مجرد متغيرات ما يعني أنه يُمكنك استخدام أي اسم مكانها، فقط استخدم الأسماء التي ستختارها حسب نفس الهيكلية. د - استدعاء صندوق الفتح أو الحفظ. يتم ذلك بهذا الشكل: On Error Resume Next ofn.lStructSize = Len(ofn) ofn.hwndOwner = Me.hWnd ofn.hInstance = 1 ofn.lpstrFilter = "Icon Files (*.ico)" + Chr$(0) + "*.ico" + Chr$(0) ofn.lpstrFile = Space$(254) ofn.nMaxFile = 255 ofn.lpstrFileTitle = Space$(254) ofn.nMaxFileTitle = 255 ofn.lpstrInitialDir = "c:\" ofn.lpstrTitle = "ÇÎÊÑ ÇáÃíÞæäÉ ÇáÊí ÊÑíÏ" ofn.flags = 0 Dim a a = GetOpenFileName(ofn) If (a) Then MsgBox Trim$(ofn.lpstrFile) End If - On Error Resume Next هذه العبارة يضعها المبرمجون بعد الانتهاء من تصميم برنامجهم هي مهمة للغاية كي لا ينهار البرنامج في حال حدوث خطئ ما، لم يظهر عند عملية البرمجة. ومعناها هو: في حال حدوث خطأ تجاوزه وتابع باقي الأوامر. - باقي الأسطر سأتجاوز بعضها لأنه لن يُفيدكم معرفته بشيء (على الأقل حاليا). وما يهمنا على أي حال هو الثلاثة أسطر التالية: ofn.lpstrFilter = "Icon Files (*.ico)" + Chr$(0) + "*.ico" + Chr$(0) ofn.lpstrInitialDir = "c:\" ofn.lpstrTitle = "اختر الملف الذي تريد الحفظ فيه" الأول نقوم في بتحديد نوع الملفات التي نريدها أن تظهر. الثاني نحدد فيه المسار الافتراضي الذي نريد لصندوق الفتح أو الحفظ أن يعرض لنا محتوياته. الثالث هو عنوان الصندوق وهو يظهر في شريط العنوان للصندوق. - أخيرا هذا الجزء: Dim a As String a = GetSaveFileName(ofn) If (a) Then MsgBox Trim$(ofn.lpstrFile) End If ما تقدم أوامر يتم استخدامه بشكل مشترك سواء لاستدعاء الصندوق للفتح أو للحفظ، وهذا الجزء الأخير هو الذي نحدد فيه ما إذا كنا نريد صندوق الفتح أو صندوق الحفظ وكذلك نحصل فيه على المسار الذي سنتعامل معه حسبما نشاء. السطر الأول واضح إنه تعريف لمتغير من نوع نصي وهو المتغير الذي سيحمل رد صندوق النص (سأتجاوز شرح نقطة الردود هنا لأنها درس في حد ذاتها) السطر الثاني نقوم باستدعاء الصندوق إما بهيئة الحفظ وذلك باستخدام "GetSaveFileName" كما هو موجود في السطر أعلاه أو بهيئة الفتح وذلك باستبدال "GetSaveFileName" ب "GetOpenFileName" أخيرا نقوم بوضع شرط مفاده: إذا أعاد صندوق الحفظ أو الفتح شيئا (بمعنى أنه تم اختيار ملف ما) فاعرض لنا مسار واسم الملف الذي تم اختياره. هذا كل شيء. :sweatingb بقليل من النباهة يُمكنك عزيزي القارئ أن تستغل هذا الصندوق بشكل مدهش للغاية فقط فكر. وأي سؤال أنا في الخدمة. هذا مثال جاهز لمن لا يُريد أن يًصدع رأسه بالكلام، ويريد الفعل. :cool: المثال في المرفقات صلاح الدين بن شبيبة The MP |
|
#23
| ||||
| | ||||
| رد: مسابقة الشهر (هناك جوائز) :d بارك الله فيك ولو انك لم تظع المثال افضل لماذا ؟ عشان الي بدو يطبق والتطبيق افظل من الأخذ فالبتطبيق تستطيع الأظضاة وبتفهم شو بتعمل مشكور اخي وانا مثلك لم اتعلم عن طريق المدرسة بل بالممارسة حزاك الله كل خير ولو انك تضعها في موضوع منفرد افضل :d |
|
#24
| |||
| | |||
| رد: مسابقة الشهر (هناك جوائز) :d لم يتملكني إحساس بأني وقت في فخ الكتابة في هذا المنتدى على الدوام؟ :schmoll: :schmoll: على أي حال هي ثلاث شروحات أخرى والسلام عليكم حتى أبقى متفرغا لموقعي. |
|
#25
| ||||
| | ||||
| رد: مسابقة الشهر (هناك جوائز) :d اخي انا لا اجبرك لكن كنت اريدك ان تكتبه للفائدة انا اسمح لي احطه انا بموضوع منفرد اذا لم تشاء وسأظع طبعا إقباس اعذني اخي لم اكن اتوقع انك سوف تفهمني بهذه الطريقة وانا ايضا لدي منتدى لكن الفائدة التي افادني اياها هذا المنتدى جعلتني بالحقيقة اجبرتني على وضع مواضيعي هنا |
|
#26
| |||
| | |||
| رد: مسابقة الشهر (هناك جوائز) :d يا أخي أنا أمازحك فقط :giggle: فلو لم أكن راضيا بالكتابة لما كتبت ولكنت انسحبت دون أن أقول شيئا. أنا ليس لدي منتدى بل فقط موقع بسيط وموضوعه بعيد جدا عن البرمجة، ولهذا فهو يحتاج مني أن أعمل فيه وليس كالمنتدى والذي في الأساس يسير لوحده (يحتاج إشرافا فحسب). ومسألة الكتابة في موضوع منفرد كنت أود القيام بها منذ البداية ولكني لم أجد في هذا المنتدى قسما عن ال "VB". فبدا لي أن شرح حول برنامج ما سيكون غريبا وسط منتدى للكتب. |
|
#27
| ||||
| | ||||
| رد: مسابقة الشهر (هناك جوائز) :d يبدوا انه انا الي فهمتك خلط :d اخي كما تريد اذا كنت تريد وظعة بموضوع منفرد فهذا يعود لك اما اذا كنت تريد وظعه هنا هذا ايظا يعود لك اسف اخي لأني فهمتك خلط :d |
|
#28
| |||
| | |||
| السلام عليكم تحيه معطره بالحب الى اعذاء ومشرفين منتدى كتاب العرب وبعد اليوم اقدم م برنامج يحسب لك عمرك يتبع |
|
#29
| ||||
| | ||||
| رد: مسابقة الشهر (هناك جوائز) :d اهلا بيك اخي الرجاء الإلتزام بالشروط إما شرح للطريقة او 50 مشاركة |
|
#30
| |||
| | |||
| رد: مسابقة الشهر (هناك جوائز) :d اكيد اخوي شرح الطريقت بس انا بنظمها الشرح |
![]() |
| مواقع النشر (المفضلة) |
| يتصفح الموضوع حالياً : 1 (0 عضو و 1 ضيف) | |
| خيارات الموضوع | |
| طريقة العرض | |
|
|
مواضيع مشابهة للموضوع: مسابقة الشهر (هناك جوائز) :d | ||||
| الموضوع | الكاتب | القسم | الردود | آخر مشاركة |
| اصنع شاشه التوقف الخاصه بك بهذا البرنامج Aone | الهاشمي | قسم البرامج | 18 | 2005-12-11 12:44 PM |
| إعلان ادوبي لشرائها شبكة مايكروميديا | IsmSal | قسم الكمبيوتر العام | 1 | 2005-08-31 08:03 PM |
| ثغره مهمة جدا أرجوا الإنتباه | maks | تطوير المواقع والمنتديات | 1 | 2005-06-28 02:44 PM |