بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته .....أما بعد:
اهنئكم بالمنتدى الجديد وهذا ما كنت أتمناه منكم في إنشاءه لإنه هو المنهج التطبيقي للمنتدى ولذلك أقدم لكم هذه النصائص والإرشادات البرمجية وهي منقولة من أحد المواقع :
[gl]نصائح و إرشادات في البرمجة [/gl]
قد يواجه بعض المبرمجين العديد من المشاكل وخاصة عند إعداد مشاريع برمجية متقدمة , أيضا هناك بعض الوظائف والمهام التي يريد البعض منا أضافتها إلي برنامجه ليضيف إليه بعدا جديدا وشكلا جذابا يزيد من قيمة المشروع البرمجي الذي يريد إنتاجه .. وفي هذا الباب الجديد سوف نساعدك عزيزي المبرمج علي تعلم بعض الخصائص الجديدة والمهام التي نعتقد أنها ستكون مفيدة .
كثيرا , تأتينا أسئلة حول لغة البرمجة التي يجب أن نتعلمها لإنتاج برنامج جيد .. بالطبع هناك الكثير من لغات البرمجة المتوفرة لدينا اليوم, وأفضل من يجيبك على هذا السؤال هو أنت ! لأنك تعرف ما تحتاجه, وقبل أن تفكر في الإجابة على هذا التساؤل إسأل نفسك لماذا تريد أن تتعلم لغة برمجة ? هل مجاراة لمن تعرف من الأصدقاء , أم بسبب المكسب, أم .. عموما كل هذا الأسباب تعتبر كافية لتتعلم البرمجة. ولكن لتنظر إلى قدراتك, هل تملك الكثير من الصبر واللغة الإنجليزية, و إحدى لغات السيC ولتكن لغةVisual C++ لشركة مايكروسوفMicrosoft . إما إذا لم يكن لديك الكثير من الصبر فعليك باختيار لغة فيجوال بيسك Visual Basic أو Delphi .وهذا يعتمد على معرفتك بالبيسك العادة أو بالباسكال Pascal . إذا كنت جادا في تعلم البرمجة ابدأ من الآن, وإذا واجهتك أية مشكلة أو استفسار فعاود الكرة ولا تيأس أبدا, اللغة سهلة, مع بعض الوقت والجهد ستمتلك أدواتها سريعا ونحن ننصحك بتعلم أكثر من لغة فذلك يزيد من قدراتك ومواهبك في مجال البرمجة وكل لغة لها أدواتها التي تمنحك امكانيات قد تتناسب مع البرنامج الذي تريد عمله أو لاتتناسب .. إذن فتعلم أكثر من لغة يمنحك خيارات أكثر .
تحويل التاريخ الميلادى لهجرى
كثيرا ما نقوم نحن العرب بتصميم برنامج ونحتاج لعرض التاريخ الهجري به بدلا من الميلادي , وخاصة إذا كان البرنامج يوزع بدول الخليج العربي المستخدمة لهذا النوع من التقويم..
هل تريد أن تختبر مستواك في الفيجوال بيسك . إذا كنت تريد تقوية مستواك فسأعطيك المعادلة الخاصة بالتحويل , ثم قم بعمل الإجراء الخاص بتحويل التاريخ من الميلادي للهجري.
معادلة التحويل هي : التاريخ الميلادي = التاريخ الهجري * 0.970227 + 621.5774 مع ملاحظة أن الاختبار ليس في تطبيق هذه المعادلة ولكن عن طريق تحويل التاريخ بالأشهر والأيام والسنة الميلادية إلى اليوم والشهر والسنة الهجرية.
إذا كنت قليل الهمة, وتفضل السهل فها هو إجراء بسيط يمكنك تطبيقه على فيجوال بيسك 6 يقوم بتحويل التاريخ الميلادي إلى هجري باليوم والشهر والسنة :
Function ConvertDateString (ByRef StringIn As String) As String Dim SavedCal As Integer Dim d As Date Dim s As String SavedCal = Calendar VBA.Calendar = 0 d = Cdate (StringIn) VBA.Calendar = 1 s = CStr(d) ConvertDateString = Format(s, Long Date) VBA.Calendar = SavedCal End Function
إذا أردت تحويل التاريخ 25/5/2000 إلى مقابله الهجري فقم باستدعاء الإجراء كما يلي, حيث ستكون قيمة المتغيرHijriDate هي الممثلة للتاريخ الهجري الناتج من التحويل.
HijriDate = ConvertDateString (25/5/2000)
تغيير لغة الكتابة برمجيا من خلال الفيجوال بيسك
هل قمت من قبل بتصميم برنامج عربي, وبه إمكانية البحث عن مجموعة من العناصر العربية, وكثيرا ما فوجئت بأن مؤشر الكتابة يكون مستعدا للكتابة بالإنجليزية وتحاول الكتابة بالعربي عن طريق الضغط على Alt + Rt Shift , هل تعلم أن بعض المبتدئين لا يعرف كيفية تحويل لوحة المفاتيح للكتابة بالعربي, أو بمعني أدق يفضل أن يقوم البرنامج بتحويل لغة المفاتيح تلقائيا تبعا لما يتم البحث عنه.
الآن ومن خلال هذا الركن ستتعلم المزيد من الأفكار الاحترافية , قم بكتابة الدوال التالية في الوحدة البرمجية : Module
Declare Function ActivateKeyboardLayout Lib user32 (ByVal HKL As Long, ByVal flags As Long) As Long Declare Function GetKeyboardLayout Lib user32(ByVal dwLayout As Long) As Long Sub ArabicKeyboard(language As String) Select Case LCase(language) Case a dd = GetKeyboardLayout (0) If dd = 67699721 Then d = ActivateKeyboardLayout(1, 0) Case e dd = GetKeyboardLayout (0) If dd <> 67699721 Then d = ActivateKeyboardLayout(0, 0) End Select End Sub
إذا أردت تحويل الكتابة إلى عربي فقم باستدعاء الإجراء كما يلي:
call ArabicKeyboard (a)
وإذا أردت الكتابة بالإنجليزية فقم باستدعاء الإجراء كما يلي:
call ArabicKeyboard (e)
كيف يمكنني تغيير شكل النموذج Form فى الفيجوال بيسك
كم مرة حلمت بتغيير شكل النموذج Form, كثيرا ما تري برنامجا بشكل دائري أو بيضاوي أو على أي شكل, وكم مرة حلمت بأن تقوم بتصميم برنامج يحمل هذه الميزة. الآن يمكنك تحقيق هذا الحلم, فالفكرة سهلة التنفيذ, وستعطيك نتائج مبهرة هناك طريقتان لتنفيذ هذا الشكل :
1- عن طريق استخدام أدواتOCX جاهزة, ويوجد العديد منهاأهمها:
ActiveSkin 3.0 من شركةShepeSoft : والتى تتيح لك تغيير مظهر النموذج وشكله, بطريقة لم نر مثلها, فحاول الحصول على هذه الأداة الآن لتري كم هي سهلة البرمجة بالفيجوال بيسك.Xshaper 2.0 هذه الأداة أيضا يمكنها تغييرشكل النموذج بسهولة ويسر.
XfxformShaper OCX هذه الأداة متاحة بالمجان, ولكنها لا تسمح إلا بالأشكال البيضاوية, وبمعنى أدق لرسم شكل النموذج بأداةShape المتاحة في الفيجوال بيسك وستقوم الأداة بالباقي.
2- الطريق الثانية عن طريق كتابة الكود, وإن كانت هذه الطريقة أصعب بكثير من كتابة الكود ولكنها ستزيد من خبرتك كثيرا , والأهم أنها ستوفر عليك الكثير من المال .
يمكن تغيير شكل النموذج عن طريق ال-API وبالتحديد عن طريق الدالة SetWindowRgn.. فمثلا المثال التالي سيقوم بتغيير شكل النموذج لشكل بيضاوي:
Module (Bas file decleration): أكتب الكود الدالي في الموديول
Public Declare Function CreateEllipticRgn Lib gdi32 (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Public Declare Function SetWindowRgn Lib user32 (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
لتغيير شكل النموذج قم بكتابة الكود التالي في مكان كتابة الكود في النموذج:
Private Sub Form_Load() Show SetWindowRgn hWnd, CreateEllipticRgn(0, 0, 300, 200), True End Sub.
اختبار: حاول أن تقوم بتصميم النموذج
بالطبع يجب أن تلاحظ أن ما هو معروض أمامك ليس إلا صورة سيتم وضعها على النموذج مع جعل الجزء الأبيض الخارجي شفافا .
عرض ملفات الفيديو في الفيجوال بيسك
أسهل طريقة لتشغيل ملفات الفيديوAVI أوالصوتWav من خلال الفيجوال بيسك هو استخدام اداة MciWndX control والتي تشحن مع نسخة الفيجوال بيسك .
كل ما ستفعله هو أنك ستقوم بوضع الأداة على النموذج وتحديد مكانها بالضبط وتغيير بعض خصائصها السهلة الفهم , وتحديد اسم ملف الفيديو أو الصوت المراد تشغيله ويمكن عن طريق الكود عمل ذلك بالأمر التالي:
MCIWnd1.filename = c:zohry.avi MCIWnd1.Command play
يجب أن تلاحظ أنه يجب تغيير اسم ومسار ملف الفيديو أو الصوت ليناسب ما هو لديك..
بالطبع يفضل بالنسبة للصوت أن تقوم بإخفاء الأداة وقت التنفيذ حتى لا تظهر للمستخدم وذلك عن طريق تغيير الخاصيةvisible إلى القيمة .False
مشاكل قواعد البيانات المنشأة ببرنامج Visual Data Manager المصاحب لفيجول بيسك من ناحية البحث والفرز
منذ عدة سنوات عندما كنا نقوم بتصميم برامج قواعد بيانات كنا ببرنامجVisual Data Manager الملحق مع الفيجوال بيسك, ولكننا كنا نواجه مشكلة فعند ترتيب العناصر العربية كان البرنامج يرتبها بطريقة غريبة لا تمت للترتيب الأبجدي بأية صلة, وكانت تواجهنا مشكلة أخرى في البحث فعندما نريد البحث عن الحقول التي تحتوي على كلمة معينة نفاجأ بأن البرنامج يعرض علينا حقولا لا تحتوى على الكلمة المرادة وفي نفس الوقت يتجاهل بعض الحقول التي يفترض أنها تحتوى على المطلوب البحث عنه.فمثلا عندما نريد البحث خلال قاعدة البيانات عن الأسماء التي تحتوي على كلمة حمد يعرض البرنامج مجموعة من الأسماء لا تحتوي على هذه الكلمة,
في البداية كنا نتوقع أن يكون الخطأ في قاعدةSQL التي نكتبها ولكن بعد البحث في الكود ووجدنا أن ال-SQL صحيحة. ولكن تذكرنا تلك المشكلة القديمة التي يسببها برنامجVisData وبالطبع بمجرد معرفة سبب المشكلة تمكنا من حلها.
لحل هذه المشكلة قم بإنشاء قواعد بياناتك ببرنامج MS Access 97 وإذا كنت قد قمت بتصميم قاعدة البيانات ببرنامج VisDataفيجب أن تعيد تصميم قاعدة البيانات مرة أخرى بأكسس 97 أو يمكنك فتح هذه القاعدة بأكسس 2000 لتحويلها إلى تلك الصيغة الأخيرة ثم إعادتها لصيغة أكسس 97 ,ثم بعد ذلك قم بنقلها للفيجوال بيسك وجرب موضوع البحث ستجده إن شاء الله يعمل بكفاءة عالية.
تبادل وفتح المشاريع بين إصدارات الفيجوال المختلفة
من المفترض أن النسخ الأحدث من البرامج يجب أن تكون متوافقة مع الإصدارات التي تسبقها ولكن العكس هل لابد منه ? بالطبع لا, ولكن لهذه القاعدة شواذ, فمثلا برنامج MS Word 2000 يمكن فتح ملفاته من خلال Word 97 , ولكن ماذا عن الفيجوال بيسك 5 و 6 .
عندما قمنا بإنشاء مشروع بالإصدارة السادسة من الفيجوال بيسك ثم حاولت فتحه بالإصدارة الخامسة أعطانا البرنامج رسالة خطأ ولم يقم بفتح المشروع , بعد مراجعتنا لملف المشروع والذي يحمل الامتدادvbp تمكنا من معرفة الخطأ وحل المشكلة.
كل ما عليك هو أن تحذف السطرRetained=0 من نهاية ملف المشروع, ولا تقلق فلن يؤثر هذا الحذف على المشروع سواء كنت ستعمل على الإصدارة السادسة أو الخامسة من الفيجوال بيسك..
خاصية الهايبرتكست HyperText
من منا لم يحلم بعمل برنامج به خاصية الهايبرتكست HyperText أو ما نعربه للنص المتشعب, هناك الكثير من الطرق لعمل ذلك ولكننا هنا سنذكر أبسط طريقة, هذه الطريقة لا تصلح إلا للقليل من الأشياء.
لنفترض أنه يوجد لدينا Labelباسم Label1 موضوع على النموذج عند الضغط عليه يتم تغيير شكل مؤشر الماوس ليد ووضع خط تحت الكلمة المكتوبة وعند النقر عليها يقوم البرنامج بعرض أية معلومات.
قم بتغيير خاصية MouseIcon الخاصة ب- l abel1لصورة يد, يمكنك الحصول عليها من مجموعة الصور الملحقة بالفيجول بيسك أو يمكنك تصويرها من أي برنامج وحفظها بصيغة Icoبأي برنامج أيقونات ومن أفضلها برنامج .Ax-Icons 4.5
قم بتغيير الخاصية MousePointer الخاصة ب- Label1 للقيمة 99 أو .Custom وفي الحدث Mousemoveالخاص ب- Label1قم بكتابة الكود التالي :
Label1..ForeColor=qbcolor(9) Label1.FontUnderline=True
قم بكتابة الكود المراد تنفيذه في الحدث Label1_Click :
قم بكتابة الكود التالي في الحدثForm_Mousemove الخاص بالنموذج :
Label1..ForeColor=qbcolor(0) Label1.FontUnderline=False
إلغاء إعادة التحميل عند الضغط على Ctrl + Alt + Del
في بعض الأوقات قد نحتاج لإلغاء إمكانية غلق البرنامج أو إعادة تحميل الويندوز باستخدامCtrl + Alt + Del وخاصة في برامج الحفاظ على الشاشة ScreenSaver , الكود التالي يقوم بهذه العملية وكذلك يقوم بإلغاء الذهاب لقائمة ابدأ عن طريق الضغط على مفتاحي .Ctrl + Esc
ثم انسخ الكود التالي للوحدة البرمجية :Module
Private Declare Function SystemParametersInfo Lib _ user32 Alias SystemParametersInfoA (ByVal uAction _ As Long, ByVal uParam As Long, ByVal lpvParam As Any, _ ByVal fuWinIni As Long) As Long Sub DisableCtrlAltDelete(bDisabled As Boolean) Dim X As Long X = SystemParametersInfo(97, bDisabled, CStr(1), 0) End Sub
وهكذا إذا أردت إلغاء مفعول Ctrl + Alt + Del قم باستدعاء الدالة التالية :
Call DisableCtrlAltDelete(True)
وإذا أردت تمكينها فقم بكتابة الكود التالي :
Call DisableCtrlAltDelete(False)
إعادة تحميل الويندوز برمجيا
في بعض الأحيان يقوم برنامج الإعداد الخاص بالبرنامج بتغيير بعض ملفات النظام والتي لن تعمل إلا بعد إعادة تحميل النظام, الآن يمكنك إعادة تحميل الويندوز أو حتى إغلاق الويندوز برمجيا.
قم بنسخ الكود التالي للوحدة البرمجية Module :
Public Const EWX_LOGOFF = 0 Public Const EWX_SHUTDOWN = 1 Public Const EWX_REBOOT = 2 Public Const EWX_FORCE = 4 Declare Function ExitWindowsEx Lib user32 Alias _ ExitWindowsEx (ByVal uFlags As Long, ByVal dwReserved _ As Long) As Long
إذا أردت أن تعيد تحميل النظام, فاكتب الأمر التالي:
t& = ExitWindowsEx(EWX_REBOOT, 0)
إذا أردت إغلاق الويندوز, قم بكتابة الأمر التالي:
t& = ExitWindowsEx(EWX_SHUTDOWN , 0)
فتح وغلق مسوق أقراص الليزر Cd Rom.
قم بنسخ الكود التالي للوحدة البرمجية Module :
DeclareFunction mciSendString Lib winmm.dll Alias mciSendStringA (ByVal lpstrCommand as string,ByVal lpstrReturnString as string,ByVal uReturnLength as long,ByVal hwndCallback as long) as long
لغلق مسوق الاسطوانات, قم بكتابة الكود التالي:
retvalue = mciSendString(set CDAudio door closed , returnstring, 127, 0)
لفتح مسوق الاسطوانات, قم بكتابة الكود التالي:
retvalue = mciSendString(set CDAudio door open, returnstring,127, 0)
تحريك النموذج Form عن طريق الماوس Mouse
كثيرا ما نقوم بتغيير شكل النموذج, ليكون كهيئة رسمة معينة ونقوم بإلغاء شريط العنوانCaption bar أوTitle Bar ثم نقع في مشكلة عدم إمكانية تحريك النموذج ولكن عن طريق الكود التالي يمكنك تحريك النموذج بالماوس عن طريق النقر والسحب من أي مكان على النموذج.
قم بنسخ الكود التالي للموديول : Module
Declare Function ReleaseCapture Lib user32() As Long Declare Function SendMessage Lib user32 Alias SendMessageA (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Const HTCAPTION = 2 Public Const WM_NCLBUTTONDOWN = &HA1
قم بكتابة الكود التالي وليكن عند الحدث MouseDown_Event والخاص مثلا بأداة .PictureBox
ReleaseCapture SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
تشغيل ملفات الصوت Wav
قم بنسخ الكود التالي للموديول Module :
Public Declare Function playa Lib winmm.dll Alias sndPlaySoundA (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long Public Sub PlayWav(path As String) Dim SafeFile As String file$ = Dir(path$) If file$ <> Then Call playa(WavFile$, SND_FLAG) End Sub
لتشغيل أي ملف صوت قم بكتابة الأمر التالي, مع تغيير اسم ومسار ملف الصوت المراد تشغيله :
Call PlayWavFile(c:ElzohryProjectQuranFateh.wav)
وبذلك نكون قد انتهينا من عرض بعض الخصائص والوظائف البرمجية الشائعة ..
وسوف يكون هناك المزيد منها في الأيام القادمة
;)