• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

najy_zl

المشرفين القدامى
  • عدد المشاركات

    692
  • تاريخ الانضمام

  • تاريخ اخر زياره

كل شيء نشر بواسطة najy_zl

  1. السلام عليكم...   بالإضافة إلى ما تقدم به الأخ محمد، هذه بعض النقاط التي ربما تساعدك، و أنا شخصياً أعمل بها:   1. لا تعمل على تحميل جداول بأكملها في الذاكرة. دائماً استعمل Query مع جملة SELECT للوصول فقط إلى السجلات التي تلزم المستخدم. الأمر ينطبق أيضاً على الحقول (Fields). 2. رأيت عند معظم المبتدئين أنهم يقوقمون بفتح الجدول بأكمله (ما يعني تحميل كامل الجدول في الذاكرة) لمجرد إضافة أو تعديل أو حذف سجل واحد أو سجلات قليلة (باستعمال AddNew مثلاً). و هذا بالطبع خطأ. استعمال الـ Commands لعمليات الإضافة و التعديل و الحذف دون الحاجة إلى فتح الجدول أصلاً. 3. أغلق أية مجموعة سجلات (RecordSet) لم تعد محتاجاً إليها، و خاصةً إذا كانت كبيرة الحجم. 4. واحد من الأخطاء الكبيرة هو استعمال الحلقات لأداء عملية معينة على مجموعة من السجلات!!! الحلقات سيئة جداً في هذه الناحية. بدلاً من ذلك استعمل Command مع تمرير شروط معينة للتعديل أو الحذف... إلخ.   نرجو الاستفادة و السلام.
  2. بخصوص تحديث قاعدة معطيات

    السلام عليكم...   بالطبع سيكون استعمال حلقة بهذا الشكل غير عملي و مرهق و بطيء جداً - تصور لو كانت السجلات بمئات الألوف أو الملايين!!!   كما قال أخونا محمد: استخدم استعلاماً (Query) لتنفيذ جملة SQL التالية: UPDATE table_name SET cle = (N_COMPT / 10000000) * 11حيث table_name هو اسم الجدول في قاعدة البيانات.   نرجو الاستفادة و السلام.
  3. سؤال فى الINPUTBOX

    السلام عليكم...   الدالة InputBox دائماً تعيد String. إذا ضغط المستخدم على الزر OK فإنها تعيد ما هو مكتوب في مربع النص الخاص بها، و إذا ضغط على الزر Cancel فإنها تعيد نصاً فارغاً (Empty string): S = InputBox("أدخل العدد اللثاني")If S = "" Then ' تم الإلغاءElse ' كود الجمعEnd Ifنرجو الاستفادة و السلام.
  4. السلام عليكم...   الرسالة واضحة: المكون لا يدعم اللون الشفاف كلون خلفية. و هذا من أصل تصميم المكون (TextBox في هذه الحالة). لأنه في الواقع اللون الشفاف ليس لوناً فعلاً و إنما هو طريقة لرسم المكون بحيث يظهر ما خلفه عبره.   إذا أردته أن يبدو كأنه شفاف فاستعمل اقتراح الأخ c#_programmer أي بجعل لون خلفية المكون كلون النافذة.   سلام.
  5. السلام عليكم...   أعرف ما تقصد، و هذا ما وجهتك إليه. للتوضيح أكثر اكتب لنا الكود المستعمل للاتصال بجدول الأصناف  و كيفية عرض أرقام الأصناف في مربع التحريرو السرد، و سأقوم - أنا أو أحد الإخوة -  إن شاء الله بالتعديل عليه.   سلام.
  6. السلام عليكم...   استعمل جملة SELECT مع تحديد رقم المخزن. مثلاً إذا افترضنا أن أرقام المخازن موجودة في ComboBox اسمه Combo1:   Dim SQL As StringSQL = "SELECT * FROM table_name WHERE (store_id = " & Combo1.Text & ")"حيث table_name اسم جدول الأصناف، و store_id اسم الحقل المميز للمخزن في جدول الأصناف.   * استعمل مثل هذه الجملة للخاصية RecordSource للمكون Data Control أو ADO Data Control أو عند فتح Recordset بالكود.   * نرجو كتابة عنوان يدل على موضوع المشاركة.     نرجو الاستفادة و السلام.
  7. السلام عليكم...   هذه إحدى الطرق:   أولاً: اضبط الخاصية Tag لكل مربعات النص التي ستحسبها (التي تحتوي على رموز الحضور و الغياب) على نص مشترك. الكود التالي يفترض أن الخاصية Tag لتلك المربعات مضبوطة على كلمة STATUS .   الكود لا يعتمد على عدد و لا ترتيب مربعات النص، أي يمكنك وضع أي عدد منها و بأي ترتيب. المهم أن تضبط الخاصية Tag لها على نفس النص و تختبر وجود ذلك النص نفسه في الكود: Private Sub Command1_Click() Dim Ctrl As Control Dim Presence As Long ' الحضور - ح Dim Leaves As Long ' الإجازة - ج Dim Absence As Long ' الغياب - غ Dim Permission As Long ' الغياب بإذن - ذ Presence = 0 Leaves = 0 Absence = 0 Permission = 0 For Each Ctrl In Me.Controls If TypeOf Ctrl Is TextBox Then If Ctrl.Tag = "STATUS" Then Select Case Ctrl.Text Case "ح" Presence = Presence + 1 Case "ج" Leaves = Leaves + 1 Case "غ" Absence = Absence + 1 Case "ذ" Permission = Permission + 1 End Select End If End If Next Text10.Text = CStr(Presence) Text11.Text = CStr(Leaves) Text12.Text = CStr(Absence) Text13.Text = CStr(Permission)End Subنرجو الاستفادة و السلام.  
  8. السلام عليكم...   اسم الملف المطلوب هو vbame.dll   هل المشكلة على الجهاز الذي تبرمج عليه و فيه VB6 أم عند نقل البرنامج إلى جهاز آخر ليس عليه VB6 ؟   سلام.
  9. السلام عليكم...   السؤال قد يحتاج إلى توضيح أكثر من ناحية تركيب الجدول و بيان الحقول. و لكن على أية حال ستكون جملة SQL قريبة من التالي: UPDATE table_name SET reserve_field_name = True WHERE (id_field_name = selected_row_id)حيث:   table_name: اسم الجدول. reserve_field_name: اسم الحقل الذي يدل على أن القاعة محجوزة (True) أو لا (False). الحقل من النوع "نعم/لا" (Yes/No). id_field_name: اسم حقل رقم تعريف القاعة. غالباً يكون هذا مفتاحاً أساسياً، و القيم فيه لا تتكرر (لكل قاعة رقم تعريف فريد). selected_row_id: القيمة المأخوذة من الحقل id_field_name في السجل الحالي (الذي يمثل القاعة الحالية الجاري حجزها).   * بالطبع ستضعين بدل هذه الأسماء الأسماء الفعلية التي لديك.   نرجو الاستفادة و السلام.
  10. السلام عليكم...   يمكنك أيضاً إلغاء المفتاح ضمن الحدث OnKeyPress نفسه دون استعمال دوال API: if Key = #13 then begin Key := #0; Edit2.SetFocus; end;نرجو الاستفادة و السلام.
  11. السلام عليكم...   تم تقديم الحل هنا.   نرجو الاستفادة و السلام.
  12. السلام عليكم...   لم أجد بمشروعك ما ذكرته لك. لكنني استطعت إرفاق المثال من عندي.   Scrolling Window.rar   أرجو أن يكون فيه فائدة. و السلام.  
  13. السلام عليكم...   ربما لم تقم بضبط الخصائص المطلوبة أو أخطأت في الكود. (كنت أحاول إرفاق مشروع بسيط بنفس ما ذكرته لك لكن التحميل لم يعمل). أرجو أن تتأكد من الكود.   لاحظ وجود إشارة السالب في هذا السطر: pbxContainerPage.Top = Me.ScaleY(-vsbPageScroller.Value, vbPixels, Me.ScaleMode)أرجو الاستفادة و السلام.
  14. السلام عليكم...   أعتقد أنه يمكن ذلك باستعمال دوال API لإضافة أشرطة التدرج (ScrollBars) للـ Form مباشرة. لكنني شخصياً أفضل طريقة أسهل:   1. ضع على الـ Form مكون VScrollBar. لا يهم مكانه و لا حجمه لأنه سيضبط بالكود. 2. اضبط الخصائص التالية للـ ScrollBar: أ. الخاصية Name على vsbPageScroller (هذا الاسم اختياري، المهم أن تستعمل نفس الاسم في الكود فيما بعد). ب. الخاصية SmallChange على 8. ج. الخاصية LargeChange على 24. د. الخاصية TabStop على False.   3. ضع على الـ Form مكون PictureBox اضبط عرضه و ارتفاعه على ما يناسب عدد م حجم المكونات الأخرى التي تريد إظهارها في النافذة (ستضع كافة المكونات الأخرى بداخله). 4. اضبط الخصائص التالية للـ PictureBox: أ. الخاصية Name على pbxContainerPage (اختياري كما في الملاحظة السابقة). ب. الخاصية BorderStyle على 0-None. ج. الخاصية BackColor على نفس قيمة الخاصية BackColor للـ Form (هي كذلك بشكل افتراضي).   * لا يهم مكانه، و لكن المهم أن يكون حجمه كافياً لاحتواء كل المكونات.   5. ضع جميع المكونات الأخرى داخل الـ PictureBox، ما عدا الـ ScrollBar الذي وضعناه في البداية (يكون خارج الـ PictureBox).   6. اكتب الكود التالي في إجراء الحدث Resize للـ Form: Private Sub Form_Resize() On Error Resume Next vsbPageScroller.Move 0, 0, vsbPageScroller.Width, Me.ScaleHeight pbxContainerPage.Move vsbPageScroller.Width, 0, Me.ScaleWidth - vsbPageScroller.Width vsbPageScroller.Value = 0 If pbxContainerPage.Height > Me.ScaleHeight Then vsbPageScroller.Enabled = True vsbPageScroller.Max = Me.ScaleY(pbxContainerPage.Height - Me.ScaleHeight, Me.ScaleMode, vbPixels) Else vsbPageScroller.Enabled = False End IfEnd Sub7. اكتب الكود التالي في إجرائي الحدثين Change و Scroll للـ ScrollBar: Private Sub vsbPageScroller_Change() pbxContainerPage.Top = Me.ScaleY(-vsbPageScroller.Value, vbPixels, Me.ScaleMode)End SubPrivate Sub vsbPageScroller_Scroll() pbxContainerPage.Top = Me.ScaleY(-vsbPageScroller.Value, vbPixels, Me.ScaleMode)End Sub8. نرجو الاستفادة و السلام.
  15. السلام عليكم...   الأمر يبدو غامضاً ! فالبرنامج كأنه يعمل بمزاجية. ربما يتوقف و ربما لا.   حسب ما أظن ربما  هناك احتمالان:   الأول أن للأمر علاقة بـ Windows - خاصة بعد التحديث - و يكون الحل - على الأقل مؤقتاً - منع Windows من التحديث إلى حين معرفة المشكلة، أو ربما تقومين بتحديث Windows على جهازك ثم إعادة إنشاء الملف التنفيذي (EXE) على النسخة المحدثة من Windows.   الثاني أن هناك سطر أو أكثر في الكود فيه مشكلة و لا يتم تنفيذه دائماً - ربما حسب شرط ما - و قد حدث ذلك عند أحد العملاء و لم يحدث عند غيره.   * على أية حال من الصعب تشخيص المشكلة غيابياً... و حسب ما ذكرتِ فإن المشكلة تحدث سريعاً أي عند بدء تشغيل البرنامج بعد نافذة تسجيل الدخول، فإذا كان بالإمكان إرفاق الجزء المبدئي من البرنامج (النافذة الرئيسية و نافذة الدخول، و أي كود آخر يلزم لبدء تشغيل البرنامج - في Module مثلاً) فربما يكون الأمر أوضح و تسهل المساعدة.   و السلام عليكم.
  16. السلام عليكم...   هل تقصد أنه بعد تحويله إلى ملف تنفيذي (EXE) لا يعمل على نفس الجهاز الذي به VB أم لا يعمل عند نقله إلى جهاز آخر؟   نرجو التوضيح. و السلام.
  17. السلام عليكم...   في المرفقات مثال لاستخدام الـ PictureClip لتقسيم صورة و بعثرتها إلى أجزاء. يمكنك تكرار بعثرة الصورة بإعادة النقر على الزر "بعثر الصورة".   في المثال يمكنك أيضاً تحريك الأجزاء المبعثرة بالفأرة.   Use PictureClip.rar   نرجو الاستفادة و السلام.  
  18. السلام عليكم...   يمكنك استعمال المكون PictureClip لهذا الغرض (أضف المكون Microsoft PictureClip Control إلى صندوق الأدوات).   * يمكنك تقسيم الصورة إلى خلايا باستعمال الخاصيتين Cols (عدد الأعمدة) و Rows (عدد الصفوف) ثم أخذ أي خلية كصورة باستعمال الخاصية GraphicCell. * يمكنك تحديد أية منطقة (بصرف النظر عن الأعمدة و الصفوف) باستعمال الخصائص ClipX و ClipY لتحديد إحداثيات الزاوية العلوية اليسرى للمنطقة التي تريدها، و الخاصيتين ClipWidth و ClipHeight لتحديد عرض و ارتفاع المنطقة. ثم استعمال الخاصية Clip للحصول على تلك المنطقة كصورة.   * الجزء المأخوذ كصورة يمكن إسناده إلى مكون Image أو PictureBox: Set Picture1.Picture = PictureClip1.GraphicCell(3)' أوPictureClip1.ClipX = 50PictureClip1.ClipY = 70PictureClip1.ClipWidth = 100PictureClip1.ClipHeight = 100Set Image1.Picture = PictureClip1.Clipنرجو الاستفادة و السلام.
  19. السلام عليكم....   تم تعديل الكود و وضعه في هذا الموضوع في قسم VB.NET.   سلام.
  20. السلام عليكم...   أداة الـ Timer تعتمد على تردد دقات ساعة النظام (TickCount) بوحدة الملي ثانية (milliseconds) و بالتالي فأقل قيمة لها هي 1 (أي 1 ملي ثانية) بالإضافة إلى أنها تصبح غير دقيقة عند استعمال قيم صغيرة.   البديل هو استعمال ما يسمى بـ "المؤقت ذي الدقة العالية" (High Resolution Timer) و ذلك باستخدام دوال API كالتالي:   1. ضع التصريحات و الإجراء التالي في بداية كود الـ Class: Private Declare Function QueryPerformanceCounter Lib "kernel32" (ByRef lpPerformanceCount As Long) As Integer Private Declare Function QueryPerformanceFrequency Lib "kernel32" (ByRef lpFrequency As Long) As Integer Private ContinueTimer As Boolean = False ' لتشغيل أو إيقاف المؤقت Private Sub TimerProcedure() Dim Frequency As Long Dim StartCount As Long Dim EndCount As Long ' QueryPerformanceFrequency gives the frequency as Counts per Second: If QueryPerformanceFrequency(Frequency) = 0 Then MsgBox("النظام لا يدعم المؤقتات ذات الدقة العالية") Exit Sub End If Do While ContinueTimer ' QueryPerformanceCounter gives the current Counter value: QueryPerformanceCounter(StartCount) Do QueryPerformanceCounter(EndCount) Loop While ((EndCount - StartCount) / Frequency) < 0.0001 ' القيمة بالثواني و يمكن أن تكون كسرية - أي أجزاء من الثانية ' ======== أدناه ضع الكود الذي تريد تنفيذه كلما انقضت المدة المحددة DoEvents بين هذا السطر و جملة ========= '.... '.... '.... ' ====================================================================== Application.DoEvents() ' مهمة جداً جداً Loop End Sub2. في إجراء الحدث FormClosing اكتب السطر التالي (مهم): ContinueTimer = False3. عندما تريد تشغيل المؤقت استعمل السطرين التاليين: ContinueTimer = TrueTimerProcedure()4. عندما تريد إيقاف المؤقت استعمل السطر التالي: ContinueTimer = Falseنرجو الاستفادة و السلام.    
  21. السلام عليكم...   أولاً هناك خطأ ولكنك تتجاهله بوجود عبارة Catch فارغة. إذا أردت أن نعرف الخطأ فاجعل عبارة Catch و ما بعدها هكذا مثلاً: Catch ex As Exception MsgBox("ERROR: " & ex.Message)End Tryأو نفذ الكود دون Try (أوقف سطور Try و Catch و End Try).   ثانيا الخطأ كتابي في صياغة جملة SELECT: ' الكود المرفقVarSql = "select" + Col_Name + "," + Col_Value + " from" + TableName + "" + WHR' الصحيحVarSql = "select " + Col_Name + "," + Col_Value + " from " + TableName + " " + WHR* لاحظ الفراغ بعد كلمة SELECT حتى لا تلتصق باسم الحقل المشار إليه بـ Col_Name و بعد FROM حتى لا تلتصق باسم الجدول المشار إليه بـ TableName.   *** ملاحظة: الكود يخص VB.NET بينما هنا منتدى VB 6. ربما يقوم أحد الإخوة المشرفين بنقله إلى القسم الصحيح.   نرجو الاستفادة و السلام.
  22. السلام عليكم...   يجب توضيح ما معنى "نص متكون من كلمتين فصاعدا" ؟   نفرض أن لدينا الكلمتين "محمد" و "جلس":   * هل المقصود الصفحات التي وردت فيها الكلمتان معاً - متجاورتين أو منفصلتين - في نفس الصفحة؟ * أم المقصود الصفحات التي وردت فيها الكلمة الأولى و الصفحات التي وردت فيها الكلمة الثانية (بصرف النظر عن وجود الكلمة الأخرى في نفس الصفحة) ؟   سلام.
  23. السلام عليكم...   باعتباري مبتدئ في لغة ++C فهذه لعبة تخمين بسيطة، و يمكن لعبها حتى على ورقة:   1      2        4      8 3      3        5      9 5      6        6      10 7      7        7      11 9      10     12     12 11    11      13    13 13    14     14     14 15    15     15     15   * استعملت قائمة صغيرة (4 أعمدة) لتسهيل الشرح.   تطلب من الشخص أن يختار في سره عدداً بين 1 و أكبر عدد في القائمة (15 في هذا المثال) ثم تسأله إن كان العدد موجوداً في العمود الأول (يجيب بنعم أو لا) ثم في العمود الثاني ثم في العمود الثالث ثم في العمود الرابع (حسب ما لديك من أعمدة). ثم تخبره بالعدد الذي اختاره!   اللعبة مبنية على النظام الثنائي (أس العدد 2) كما هو واضح في قيم الصف الأول (2^0 = 1 و 2^1 = 2 و 2^2 = 4 و 2^3 = 8).   بناء جدول اللعبة يتم كالتالي:   العمود الأول يبدأ بـ 2^0 أي 1 فنكتب عدداً و نترك عدداً، أي نكتب 1 و نترك 2، ثم نكتب 3 و نترك 4، ثم نكتب 5 و نترك 6، ... إلخ. العمود الثاني يبدأ بـ 2^1 أي 2 فنكتب عددين و نترك عددين، أي نكتب 2 و 3 و نترك 4 و 5، ثم نكتب 6 و 7 و نترك 8 و 9، ... إلخ. العمود الثالث يبدأ بـ 2^2 أي 4 فنكتب 4 أعداد و نترك 4 أعداد، أي نكتب 4 و 5 و 6 و 7 و نترك 8 و 9 و 10 و 11، ثم نكتب 12 و 13 و 14 و 15. العمود الرابع يبدأ بـ 2^3 أي 8 فنكتب 8 أعداد و نترك 8 أعداد، أي نكتب الأعداد من 8 إلى 15 (إذا كانت القائمة أكبر نترك الأعداد الثمانية التالية من 16 إلى 23 و نكتب الثمانية التي بعدها من 24 إلى 31) و هكذا على حسب حجم القائمة.   كيف نعرف العدد الذي اختاره الشخص؟   لا نقوم بعملية بحث! فقط نجمع الأعداد الموجودة في رؤوس الأعمدة (1 و 2 و 4 و 8) التي يجيب عنها بنعم. مثلاً إذا قال أن العدد الذي اختاره موجود في العمود الثاني و الرابع فالعدد هو 10 (أي 2 (رأس العمود الثاني) + 8 (رأس العمود الرابع)).   البرنامج التالي يستعمل جدولاً بـ 5 أعمدة (1 إلى 31).   *** ملاحظة: البرنامج يستعمل الصفوف بدل الأعمدة لسهولة الطباعة. #include <iostream>#include <iomanip> // for setw manipulator#include <cmath> // for pow() functionusing namespace std;int rowCount; void printList(){ int rowIdx, valIdx, nextVal, maxBase, headNum; maxBase = int(pow(2.0, rowCount)); cout << endl << "Choose a number between 1 and " << maxBase - 1 << " (in your mind):\n\n"; for (rowIdx = 0; rowIdx < rowCount; rowIdx++) { headNum = int(pow(2.0, rowIdx)); valIdx = headNum; while (valIdx < maxBase) { for (nextVal = 0; nextVal < headNum; nextVal++) { //cout << valIdx << "\t"; cout << setw(4) << valIdx; valIdx++; } valIdx += headNum; } cout << endl << endl; }}int guess(){ char answer; int sum = 0, ridx; cout << "Now, answer next questions (Y for Yes, N for No):" << endl << endl; for (ridx = 0; ridx < rowCount; ridx++) { do { cout << "\tIs your number in row " << ridx + 1 << " ? "; cin >> answer; } while (! ((answer == 'y') || (answer == 'Y') || (answer == 'n') || (answer == 'N'))); if ((answer == 'y') || (answer == 'Y')) sum += int(pow(2.0, ridx)); }; return sum;}int main(){ int result; rowCount = 5; printList(); result = guess(); if (result == 0) cout << endl << "Huh! You did not choose a number from the list." << endl; else cout << endl << "Your number is " << result << endl; return 0;}نرجو الاستفادة و السلام.  
  24. السلام عليكم...   قيمتُ المشاركة لأنكَ عدتَ و قدمتَ الحل الذي توصلتَ إليه. شكراً.   و فقط يعض التعليقات:   1. لا تعتمد على استعمال الأعداد المجردة (الأعداد السحرية - Magic Numbers) مثل 2175 لأن معناها غير مفهوم. أعتقد أن ذلك العدد يمثل الفرق بين عرض الزر و عرض الـ PictureBox. من هذه الناحية أيضاً ستضطر إلى تعديل الكود إذا عدلت عرض الزر أو الـ PictureBox. في مثل هذه الحالات اسنعمل عمليات ذات صيغة عامة بحيث دائماً تعطي المطلوب.   2. يمكن - اختيارياً - دمج تغيير الـ Left و الـ Top معاً باستعمال الوظيفة Move للـ PicturBox:   أ. لمححاذاة الجانب الأيسر للـ PictureBox مع الجانب الأيسر للزر: Picture3.Move KewlButtons20.Left, KewlButtons20.Top + KewlButtons20.Heightب. لمحاذاة الجانب الأيمن للـ PictureBox مع الجانب الأيمن للزر: Picture3.Move KewlButtons20.Left + KewlButtons20.Width - Picture3.Width, KewlButtons20.Top + KewlButtons20.Height* أيٌ من الكودين السابقين لا يتأثر بتغيير حجم الزر أو الـ PictureBox   نرجو الاستفادة و السلام.  
  25. لعبة رياضيات بسيطة

    السلام عليكم...   و منكم نستفيد. نصائح قيمة، أشكرك عليها.   سلام.