اذهب الي المحتوي
أوفيسنا

jjafferr

أوفيسنا
  • Posts

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

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

  • Days Won

    415

كل منشورات العضو jjafferr

  1. انت تأكد كلامي ولكن بعدد سجلات مختلف (قد يعتمد على العدد الذي تم عرضه) ، فلو ان الاكسس "كان يعالج باقي السجلات تدريجيا فقط في الخلفية" ، لحصلت على العدد 100 ، وهو عدد سجلات الكامل في الجدول.
  2. السلام عليكم انا فخور أن مشاركاتي الطويلة يتم قراءتها ويُستفاد منها 🙂 انا دائما انظر لعملي ، انه بعد 3 اشهر او اكثر ، يرجع لي المستخدم بطلب تعديل ، وانا اكون نسيت تفاصيل برنامجي. لهذا السبب ، فلا آخذ بطريق اخوي موسى ولا ابو جودي (معلش ، محدش يزعل ) ، وانما اعمل دالة خارجية واعمل بها عدد الاسطر اللي احب من الكود ، واكتب تعليق واضح على كل سطر ، لأني لما اريد اعمل تعديل ، بكل بساطة اعرف المكان اللي اريد اعدل عليه ، ولحظات واكمل التعديل ، اما لتعديل اي شيء في معادلات اخوي ابو جودي وموسى ، فأنا مضطر احك راسي الى ان افهم شو اللي كنت عامله سابقا ، ثم افكر في مكان التعديل. ولما تستخدم دالة خارجية ، استخدم ElseIf او Case قدر الامكان ، ومع انه قد يكون عندك 100 سطر كود (مثلا) ، إلا انك في الواقع تستعمل بضع اسطر فقط ، وتكون الدالة سريعة. الدليل خير برهان 🙂 اخوي موسى فهم كلامي بالطريقة الصحيحة 🙂 ارفق مثال بسيط لأثبت قولي: عندنا جدولين . واستعلام فيه الامر Dlookup ، وانادي الدالة Add_One . الدالة Add_One Function Add_One(ID As Long, N As Long) As Double Add_One = N + 1.5 If ID = 55 Then Add_One = 55 End If End Function . الان نريد ان نثبت ان الاستعلام . سأقوم بتوقيف الاستعلام عندما يعرض على الشاشة السجل Auto_ID=55 ، وهذا معناه انه اذا ظهر السجل على الشاشة ، فسيقوم الاستعلام في الاكسس بحساب قيمته ، اما السجل الذي لم يظهر على الشاشة ، فالاكسس لا يقوم بحساب قيمته . وهنا قمت بتشغيل الاستعلام ، واظهرت 27 سجل فقط ، ثم 27 سجل آخر 27+27=54 ، ثم طلبت عرض السجل Auto_ID=55 ، فلم يعطني الاكسس الجواب ، لأنه كان بحاجة الى تمرير البيانات الى الدالة للحصول على نتيجة الدالة ، وهنا توقف الكود. . 1637.Query_Records.accdb
  3. اما اذا اردنا استعمال Dlookup في الاستعلام ، بجميع الطرق اعلاه ، تحويل التاريخ الى رقم تعامل التاريخ هنا كرقم D1_Double: DLookUp("[date2]","[tbl2]","Cdbl([date2]) =" & CDbl([date1]) & " And [usr_id] ='" & [user_id] & "'") تنسيق التاريخ: \#mm/dd/yyyy\# تعامل التاريخ هنا كنص D1_Format_#D: DLookUp("[date2]","[tbl2]","Format([date2],'\#mm/dd/yyyy\#') ='" & Format([date1],'\#mm/dd/yyyy\#') & "' And [usr_id] ='" & [user_id] & "'") تنسيق التاريخ: yyyy-mm-dd hh:nn:ss تعامل التاريخ هنا كنص D1_Format_yyyy-mm-dd: DLookUp("[date2]","[tbl2]","Format([date2],'yyyy-mm-dd hh:nn:ss') ='" & Format([date1],'yyyy-mm-dd hh:nn:ss') & "' And [usr_id] ='" & [user_id] & "'") مناداة الدالة: DateFormat تعامل التاريخ هنا كرقم D1_Module: DLookUp("[date2]","[tbl2]","[date2]=" & DateFormat([date1]) & " And [usr_id] ='" & [user_id] & "'") . وهذه هي الدالة DateFormat : Function DateFormat(varDate As Variant) As String 'Purpose: Return a delimited string in the date format used natively by JET SQL. 'Argument: A date/time value. 'Note: Returns just the date format if the argument has no time component, ' or a date/time format if it does. 'Author: Allen Browne. allen@allenbrowne.com, June 2006. ' 'calling the Function: DateFormat(The_Date_Field) 'a = dlookup("[some field]","some table","[id]=" & me.id & " And [Date_Field]=" & DateFormat([The_Date_Field])) ' If IsDate(varDate) Then If DateValue(varDate) = varDate Then DateFormat = Format$(varDate, "\#mm\/dd\/yyyy\#") Else DateFormat = Format$(varDate, "\#mm\/dd\/yyyy hh\:nn\:ss\#") End If End If End Function . وبغض النظر عن كيفية تعاملنا مع جلب التاريخ ، سواء كان رقم او نص ، إلا ان نتيجة الامر Dlookup يكون نص . ملاحظة هامة: اذا كان حجم الشاشة يعرض 30 سجل (مثلا) ، واذا كان عندنا استعلام به 100 او 10000 سجل (اي رقم اكبر من حجم العرض 30) ، وبغض النظر عن المحتويات والقيم والاوامر والمعادلات في الاستعلام ، فالاكسس يقوم بحساب السجلات المعروضة على الشاشة فقط ، وفي حالتنا فالاكسس يحسب نتائج 30 سجل فقط ، وعليه ، اذا كان هذا الاستعلام هو مصدر بيانات لنموذج او تقرير ، فلن يكون هناك تأخير وبطئ في العرض (طبعا سيكون هناك بطئ بسيط ، ولكن ليس كما هو الاعتقاد السائد بأن البطئ سيلاحظه المستخدم) ، فالمصطلح المتداول في البطئ ، هو اذا اردت جلب بيانات الاستعلام كاملا دفعة واحدة ، مثل اذا اردت ان تبحث عن قيمة معينة فيه ، او تصدير جميع البيانات دفعة واحدة الى ملف اكسل او pdf ، بينما لا يوجد بطئ عند الطباعة لان الطباعة تتطلب بيانات صفحة واحدة فقط وهي الصفحة التي يتم طباعتها حاليا (بمعنى آخر ، حتى لو اردت طباعة 1000 صفحة ، فانت تطبعها صفحة صفحة) . مع ملاحظة تفادي استعمال فرز/تصفية للحقول التي بها معادلات والحقول التي تستعمل الامر Dlookup والحقول التي تنادي دوال خارجية ، لأنه هنا الاستعلام يجب ان يقوم بحساب قيم جميع السجلات ، ثم يقوم بعملية الفرز/التصفية. لهذا السبب ، فمناداة دالة خارجية (فيها معادلات فقط) لا تعمل بطئ عند استعمالها ، حسب ملاحظاتي اعلاه 🙂 1636.1.d8.accdb
  4. السلام عليكم اما الناس الكسالى مثلي ، فما ادوخ راسي بتنسيق الاكسل برمجيا ، وارسل التقرير شبه جاهز من الاكسس مباشرة : في التقرير: نخبره بأن يخفي الحقول المتكررة . والنتيجة: . فيصبح حدث التصدير الى اكسل: Private Sub أمر0_Click() Dim myFile As String myFile = CurrentProject.Path & "\myExcel.xls" DoCmd.OutputTo acOutputReport, "Report1", acFormatXLS, myFile, True End Sub . وهذه النتيجة في الاكسل: . من تجربتي ، لازم المستخدم يعدل في حقول معينة في الاكسل لطباعته ، فيقوم بتعديل تنسيق هذه الحقول كذلك تذكر اني قلت هذه طريقة الكسالى
  5. السلام عليكم مشاركتي لتوضيح الكثير من المعلومات الهامة في مشاركات الاساتذة اعلاه ، والتي تحتاج الى توضيح. رجاء النظر في حقول الجدول التالي: الاكسس يتعامل مع انواع الحقول بطريقته ، و يخبرنا بمجرد النظر الى تنسيق الحقل ، فيما اذا كان الحقل رقم او نص. النص تنسيقه الى اليسار ، بينما الرقم تنسيقه الى اليمين ، وعندما ننظر الى التاريخ ، فنلاحظ تنسيقه الى اليمين ، مما يعني انه رقم. . وبما ان استخدام Dlookup واخواتها من الاوامر التي نتفاداها في الاستعلام لأنها تبطئ الاستعلام ، فسوف نتخلص منها بإستعمال استعلام ، يدمج ملاحظات جميع الاساتذه في المشاركات اعلاه. . نجهز استعلام لكل جدول ، وهذه نتائج حقول استعلام الجدول الاول ، ورجاء ملاحظة ايهم نص وايهم رقم . D1_Double : تم تحويل التاريخ الى رقم ، D1_#D : استعملنا التنسيق \#mm/dd/yyyy\# في اعدادات الحقل ، وتعامل معه الاكسس كرقم ، D1_Format : استعملنا التنسيق yyyy-mm-dd hh:nn:ss في اعدادات الحقل ، وتعامل معه الاكسس كرقم ، D1_Format2 : استعملنا نفس التنسيق اعلاه ، ولكن في الحقل مباشرة ، فتعامل الاكسس معه كنص (الاكسس يحول اي قيمة في الدال Format الى نص) . الامر Dlookup اعلاه فيه ربط بين جدولين ، وبالحقولين date و user_id الان نستبدل الامر Dlookup بالاستعلامين الذين عملناهم اعلاه ، ونربطهم بالحقلين (انا عملت استعلام منفصل لكل نوع ، وقمت بربط الحقول على اساس تنسيقها اعلاه) . . والنتيجة . اما اذا اردنا الحصول على جميع بيانات الجدول 1 ، ونرى تواريخ الجدول 2 بمحاذاته . والنتيجة . وهنا ومع اننا حصلنا على النتائج ، إلا اننا لا نستطيع تعديل بيانات الحقول ، وعن طريق تغيير اعدادات الاستعلام ، يمكننا تعديل بيانات الحقول. (ملاحظة: اذا استعملت هذا الاستعلام كمصدر لبيانات نموذج ، فيجب ان تعدل في اعدادات النموذج كما عملنا في الاستعلام) . 1636.d8.accdb
  6. السلام عليكم اما انا فما احب استعمال Timer في نماذجي ، لأنها تؤذيني لما اشتغل في الكود !! واعتقدت ان كود اخوي ابو جودي سيحل المشكلة ، ولكن للأسف ، حصلت على نفس المشكلة في الكود !!
  7. هو برنامج قديم كان يشتغل على الوندوز 10 ، ولا يشتغل على الوندوز 11. ولا تظهر هذه المشكلة للجميع ، وحتى حاولت تغيير الريجستري ، وبدون فائدة مافي فائدة ارفق لك نسخة ، لأنه اذا عمل على حاسبتك ، فما معروف اذا يعمل عندي !! الحاسبة عندي فيها وندوز 11 جديد ، مو تحديث من من الوندوز 10
  8. وعليكم السلام عملت رد لموضوع آخر مشابه لهذا الموضوع : . اما تجربتي مع الوندوز 11 ، فبوجه عام لا مشاكل في برامجي ، ما عدا برنامج واحد يعتمد على IE internet explorer لقراءة ملفات pdf ، ولازلت ابحث عن حل 🙂
  9. وعليكم السلام 1. بوجه عام ، اي وقت تحصل على خطأ OLE Server ، قم باعادة تضبيطات لغة دعم حروف Unicode (اي لغة غير الانجليزية) للحاسبة ، حسب اللغة التي تستعملها في برنامج الاكسس (في حالتي هي اللغة العربية) . 2. سابقا في الاكسس 2003 وما قبل ، كانت هناك بعض الاوامر التي تعمل بطريقة صحيحة ، ولكنها لا تعمل في الاكسس 2007 وما بعد ، ومنها مكتبات نواة 32بت على الاكسس نواة 64بت. 3. الطريقة الصحيحة للتعامل مع جميع اخطاء الاكسس في الكود ، في اعلا كل صفحة دائما استعمل : Option Compare Database Option Explicit . والسطر الثاني جدا مهم للمبرمج ، بحيث يخبرك الاكسس اماكن الخطأ في الكود ، تلقائيا عند كتابة السطر ، او عن طريق امر Compile : واجعل الاكسس يكتب هذا السطر تلقائيا في كل صفحة كود ، هكذا : و . اما امر Compile : . وانا استعمل الامر بعد كل تحديث لأسطر الكود وقبل تجربة تشغيل البرنامج/النموذج (مو اقل من 5-20 مرة في اليوم لكل تحديث) ، ومن كثرة استعمالي له ، وضعت الزر خارج القائمة ، هكذا: . اعمل Compile ، وسيخبرك الاكسس مكان الخطأ ، هكذا : . وهنا نستطيع مساعدتك ، فتخبرنا اسم الخطأ ، ومكانه. 4. الاكسس مرتبط ارتباط وثيق بالوندوز ، وهناك الكثير من تحديثات الوندوز اللي تعمل مشكلة في الاكسس ، لذا : أ. النصيحة الذهبية ، لا تشترك في Preview Updates ، ولا تنزل التحديثات حين اصدارها من مايكروسوفت ، ب. اما اذا سبق السيف العدل ، وتم عمل تحديثات الوندوز ، وظهرت لك اخطاء في برنامجك ، فهناك حلين : البحث في الانترنت لحل ، ولا تنسى ان هناك مجتمع كبير جدا للاكسس ، وكما حصلت لك المشكلة ، فستكون حصلت لآخرين ، وتم التحدث عنها ، وغالبا يتم تقديم طريقة معالجة المشكلة ، آخر الدواء الكي ، ولما تستصعب عليك الامور ، وخصوصا اذا كان لديك برنامج يتم استعماله في امكان عديدة (ولا يمكنك الوصول اليها) ، فيمكنك التراجع عن تحديث الوندوز ، واما اذا قدرت تصبر شوي (والله اعلم طول هذه الفترة) ، فدائما يتم ايصال خبر هذه المشاكل الى شركة مايكروسوفت ، وتقوم : 1. إما بعمل تحديث وندوز جديد لحل هذه المشكلة ، 2. او ترسل تحديث/تعديل الى الاكسس الموجود على حاسبتك مباشرة وبدون علمك
  10. السلام عليكم متابع الموضوع منذ البداية ، ولكن ليس في التفاصيل الدقيقة 🙂 هنا كتبت تجربتي في التعامل مع اجهزة البصمة ، وكان لك أخوي ابوخليل مشاركة كذلك: . خلاصة الفكرة: لا تُحمّل اكسس عبئ العمل كاملا ، فإجعل جهاز البصمة يقوم ببعض الاعمال الافتراضية التي تخصه ، واخذ الصافي ، ومنها استخدم قوة الاكسس. وهذه مشاركة اخرى ، لسحب البيانات من جهاز البصمة ، والتي يحفظ البيانات بطريقة عمودية
  11. السلام عليكم اخوي وليد شكرا جزيلا على برنامجك العملي ، وعندي بعض الاصحاب اللي ممكن يستفيدوا منه 🙂 جعفر
  12. اخي فادي اهلا وسهلا بك ضمن فريق العمل ، وما ذلك عليك بغريب ، فقد كنت تمارس هذا الدور بدون اللقب 🙂 جعفر
  13. السلام عليكم واستمرارا بتتبع والتنقيب عن الخبراء بين المشاركات ، اهدي لانفسنا الخبير @Ahmos. شكرا لك على عطاءك 🙂 جعفر
  14. وعليكم السلام اعمل حقل جديد في الاستعلام : myColour: len([Colour]) وفي المعيار اكتب <>0
  15. شكرا اخوي Ahmos على المرفق، ولكني لازلت افكر في المكان المناسب لاستعماله!! اذا ممكن تعطيني بعض الامثلة لوسمحت
  16. هي كذلك الهوامش ابقيها ثابتة .. اجعلها صفرا من خصائص التقرير نفسه ، ولكني اذكر واجعتني مشكلة فاضطررت الى كتابتها في الكود كذلك ، وفي تقرير آخر ، مع ان اسم الخط تم اختياره من خصائص واعدادات التقرير ، إلا انه في الطباعة كان يظهر الخط الافتراضي ، فكتبت اسمه في الكود ، وتم حل المشكلة 🙂
  17. وعليكم السلام اهم شيء في موضوع هذه الطابعات هو ان يكون عندك برنامج تنصيب الطابعة من الشركة ، ولا تعتمد على تعريف الوندوز ، لأنه بعد التنصيب ، يجب عليك عمل بعض التعديلات على اعدادات الطابعة. 1. من صفحة الطابعات ، اختار خصائص الطابعة: . 2. وهنا سأعرض التخصيصات لطابعات مختلفة ، رجاء ملاحظة اسماء الطابعات: . هنا يجب ملاحظة ان بعض الطابعات تقطع الورقة حسب الاعدادات: بعد المستند او بعد كل ورقة . . وبما ان الطابعات الحرارية لا تحتاج الى مسافات/هامش لسحب الورقة ، فالافضل عمل هذا برمجيا : Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer) On Error GoTo err_Detail_Format 'set the default printer margins With Application.Printers(0) .TopMargin = 0 .BottomMargin = 0 .LeftMargin = 0 .RightMargin = 0 End With . في التقرير ، وفي وضع التصميم ، اختار الطابعة (سواء بعرض 80مم او 58 مم) ، عليه تستطيع تصميم التقرير/الحقول بالطريقة العادية ، مع مراعاة عرض التقرير (ولا يهم الطول) ، وبالتجربة تستطيع تضبيط التقرير. التقارير بالبوصة (لاحظ العرض) ولا تنسى ان الطابعة تطبع باللون الاسود فقط (او اطياف اللون الرمادي) ، فتأكد من اختيار لون النص وحجمه ، وان الشعار يكون ابيض واسود (واما اذا كان ملون ، فسيتم طباعته باطياف اللون الرمادي).
  18. هناك ملاحظتين : 1. الاكسس لا يستطيع تكوين حقل نص او اي حقل آخر اثناء العرض ، فتكوين الحقول تتم فقط في وضع التصميم ، لذا ومن التجربة ، ترى اني وضعت في النموذج 38 حقل نص جاهزين للعمل. 2. وفي التقرير ، الاكسس لا يستطيع ان يجعل التقرير عمودي او افقي برمجيا (ونصيحة ، لا تهدر وقتك بمحاولاتك) ، لذا اعمل تقريرين ، افقي وعمودي ، واجعل في النموذج زرين: واحد لطباعة التقرير افقيا ، والاخر لطباعة التقرير عموديا.
  19. شكرا جزيلا اخوي ابوخليل 🙂 نعم ، نستعمل نفس الكود عند فتح التقرير ، فيتم توزيع حقول النص كما هي في النموذج ، وبنفس مقاساتها ، وهذه هي الفكرة من البرنامج
  20. حياك الله اخوي موسى 🙂 هذا برنامج للتصوير ، فالاولوية لحجم الصورة الملتقطة من الكاميرا. نعم بدأت العمل بعمل كائن خاص للصورة يملئ النموذج ، ولكن بدأ المربع يعمل وميض ، واوقات اخرى لا تستطيع رؤية الصورة من خلاله (مثل المثال اللي عرضته لما غيرت اتجاه النموذج من اليمين الى اليسار).
  21. على راسي اخوي ابوخليل 🙂 بس بما انها دروس ، فسأقوم بعرضها في الموضع الاخر ، ثم اقوم بمناقشتها هنا ان شاء الله ، الدرس اليوم كان تحريك الكائنات ، وعرضت الافكار والاكواد واجزاء البرامج الخاصة بها.
  22. 2. تحريك الكائنات في النموذج هناك عدة طرق لتحريك الكائن ، ولكنها جميعا تعتمد على الحدث/الاحداث التالية: للكائن: . او حدث القسم اللي فيه الكائن ، والكائن هنا في قسم التفصيل Detail . ولكن من الخطأ استعمال الحدث للنموذج ، فالكائن موجود في قسم : . اول عمل قمت به (اعتقد في سنة 2005) كان على مثل هذا النموذج ، وفيه ملصق (مع اضافة المربع الان) . لاحظ انك تستطيع تحريك الملصق بمسكه من اي مكان في الكائن ، ولكن المربع الاجوف تستطيع تحريكه عند مسك حوافه/اطرافه فقط . ولما غيرنا خلفية المربع من شفاف (اجوف) الى خلفية عادية ، استطعنا تحريك المربع بمسكه من اي مكان . الكود الذي يمكننا من التحريك الملصق هو التالي ، واحد اهم الاسطر في الكود هو اول سطر (Dim lblDrag_X As Long, lblDrag_y As Long) ، بحيث هذه القيم تكون مخزنه لكل مرة يتحرك فيها الملصق Option Compare Database Option Explicit Dim lblDrag_X As Long, lblDrag_y As Long ' Private Sub lblDrag_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) On Error GoTo err_lblDrag_MouseMove Static InitX As Single Static InitY As Single If Button = acLeftButton Then If InitY <> 0 And InitX <> 0 Then lblDrag.Top = (Y - InitY) + lblDrag.Top lblDrag.Left = (X - InitX) + lblDrag.Left Else InitX = X InitY = Y End If Else InitX = 0 InitY = 0 End If lblDrag_X = lblDrag.Top lblDrag_y = lblDrag.Left lblMouseMove_Resume: Exit Sub err_lblDrag_MouseMove: If Err.Number = 2100 Then Resume lblMouseMove_Resume Else MsgBox Err.Number End If End Sub . 2.Basic_Move.mdb . ولما زاد عدد حقول النص (كانت تجينا مناقصات ولازم نعبئ المناقصات على اوراق الشركة ، يعني سعر كل مادة يجب تضبيطها حسب مكانها في ورقة المناقصة ، مع كتابة ملاحظاتنا حسب نوع المنتج) . وكان لابد من توسيع الحقل ، فاستعملت مفتاح الشفت (او Ctrl) مع الاسهم (يمين - يسار - اعلى - اسفل) . اصبح الكود اعلاه هو الاساس في تحريك حقول النص بجعله في دالة (في وحدة نمطية في مشروعي الاخير) ، ودالة اخرى لتوسيع الحقول ، اما مناداة هذه الدوال فكانت من حدث كل كائن على حدة: Private Sub Form_Current() ' Load the position and the size of the 38 TextBoxes Me.Drag01.Top = [Drag01_PositionY] Me.Drag01.Left = [Drag01_PositionX] Me.Drag01.Width = [Drag01_Width] Me.Drag01.Height = [Drag01_Height] Me.Drag02.Top = [Drag02_PositionY] ..... end sub Private Sub Drag01_KeyDown(KeyCode As Integer, Shift As Integer) Call KeyMe(KeyCode, Shift, ActiveControl, iWidth, iHeight) [Drag01_Width] = iWidth [Drag01_Height] = iHeight End Sub Private Sub Drag01_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single) Call DragMe(Button, Shift, x, Y, ActiveControl, PosX, PosY) [Drag01_PositionY] = PosY [Drag01_PositionX] = PosX End Sub ثم الدوال Public Sub DragMe(Button As Integer, Shift As Integer, x As Single, Y As Single, Drag As Control, PosX, PosY) ' Drag position Static InitX As Single Static InitY As Single If Button = acLeftButton Then If InitY <> 0 And InitX <> 0 Then Drag.Top = (Y - InitY) + Drag.Top Drag.Left = (x - InitX) + Drag.Left Else InitX = x InitY = Y End If Else InitX = 0 InitY = 0 End If PosX = Drag.Left PosY = Drag.Top End Sub Public Sub KeyMe(KeyCode As Integer, Shift As Integer, Drag As Control, iWidth, iHeight) 'Typical key down event handler : ' Right Arrow = Increase the Width ' Left Arrow = Reduce the Width ' Down Arrow = Increase the Height ' Up Arrow = Decrease the Height Select Case KeyCode Case 37 'Left arrow Drag.Width = Drag.Width - 72 Case 39 'Right arrow Drag.Width = Drag.Width + 72 Case 38 'Up arrow Drag.Height = Drag.Height - (1440 * 0.1667) Case 40 'Down arrow Drag.Height = Drag.Height + (1440 * 0.1667) End Select iWidth = Drag.Width iHeight = Drag.Height End Sub . 3.Group.mdb . ومع تعديل بسيط حتى يقبل التنسيق في حقول النص للاكسس 2007 فما فوق Drag_Drop_Locations.accdb . والان بعد ان عرفنا كيف نحرك المربع ، سنتحدث عن : طريقة تحريك اطرافه افقيا وعموديا ، تغيير مؤشر الفأرة حسب مكان المؤشر. هنا سأشير الى الفكرة ، واترككم مع البرنامج: من طول او عرض اي ضلع ، 0-25% و 75-100% يكون المؤشر لتحريك المريع. يعني اذا طول الضلع 10 ، اذن من 0-2.5 و من 7.5-10 يكون المؤشر لتحريك المربع. اما من 26-74% يكون لتحريك الضلع نفسه (من حوالي 3-7) ، وعليه يتغير المؤشر. اساس الكود هنا هو نفس الموجود في اول المشاركة هذه ، ومنه تم التوسع حسب الحاجة. . 4.Size_Move.accdb . وبعد تجارب كثيرة ومختلفة ، اتضح ان استعمال الاحداث اعلاه لكائن المربع لا تفي بالغرض لمشروعي ، والسبب هو ان الحدث يبدأ بالعمل عندما يكون المؤشر على احد اضلع المربع ، بينما لا يمكن الاستفادة من منتصف المربع ، فعليه ، تم تحويل الكود الى حدث قسم التفصيل Details ، ومنها بدأ العمل بالتبلور بصورة مرضية 🙂 الذكاء الاصطناعي كان وبالا/مشكلة عليّ في هذا المشروع ، وذلك لشح البيانات عن مثل هذا العمل في الانترنت ، فكنت اضطر الى عمل الكود الاساسي لضلع واحد ، ومن ثم الطلب منه بعمل باقي الاضلاع ، او تقييده في عمل الكود بين اسطر معينة من الكود. جعفر
×
×
  • اضف...

Important Information