-
Posts
5135 -
تاريخ الانضمام
-
تاريخ اخر زياره
-
Days Won
259
Foksh last won the day on أكتوبر 14
Foksh had the most liked content!
السمعه بالموقع
3003 Excellentعن العضو Foksh

- تاريخ الميلاد 07/02/1982
البيانات الشخصية
-
Gender (Ar)
ذكر
-
Job Title
فني صيانة موبايل وكمبيوتر
-
البلد
الأردن ♥
-
الإهتمامات
برمجة وصيانة الموبايل والكمبيوتر
اخر الزوار
13866 زياره للملف الشخصي
-
يا عيني يا عيني ما هذا الجمال ، والإبداع أخي منتصر بارك الله فيك على هذه المشاركة الجميلة فعلاً والتي يحتاجها الكثير فعلاً .. تعقيباً على كلام أخي موسى ، والذي لا ينقص من روعة العمل شيئاً ، لاحظت ما يلي يما يتعلق بالنقطة الثانية :- استخدام تعريف المتغير Private lngStep As Single في بداية النموذج الفرعي sbfSpinButtons . حيث أن نوع البيانات Single ( وحتى Double ) يعتمد على نظام الفاصلة العائمة الثنائي . وهنا الكسور العشرية التي تبدو بسيطة مثل 0.1 أو 0.05 لا يمكن تمثيلها بشكل دقيق تماماً بالنظام الثنائي ؛ فيتم تخزينها بقيمة تقريبية تزيد قليلاً عن القيمة الأصلية . ثم يأتي شرط فحص الحد الأقصى في الدالة Up ، حيث varMaxValue = 1 ، في الجملة :- If (ctlTxtBox.Value + lngStep) <= varMaxValue Then وفرضاً ، الشرط يختبر هل 1.00000001490116 <= 1 ؟؟؟ والنتيجة قطعاً هي لا = False . بالتالي يرفض الكود الزيادة ، ويتجمد الرقم عند 90% (0.9) . ونفس الأمر يتكرر مع خطوة 5% بعد 20 نقرة حيث يتجاوز المجموع الرقم 1 بجزء متناهي الصغر ، فيتوقف عند 95% . ونفس المشكلة تحدث أيضاً عند النزول Down . عندما يصل إلى 10% ثم ينقص 0.1 ، يصبح الناتج تقريباً -0.0000000149 ( أقل من الصفر ) ، فيتوقف عند 10% ولا يصل إلى 0% . لذا ، خطر ببالي ومن باب التجربة ما يلي ، على الدالتين Up و Down ، مع تغيير نوع المتغير طبعاً ليصبح الضع كالتالي :- نوع المتغير في تعريفه من Single إلى Double . الدالتين تصبحان :- Private Sub Up() Dim curVal As Variant Dim stpVal As Variant Dim nextVal As Variant stpVal = CDec(lngStep) If Not ctlTxtBox Is Nothing Then ' الوضع الأول: مع مربع النص If IsNumeric(ctlTxtBox.Value) Then curVal = CDec(ctlTxtBox.Value) nextVal = curVal + stpVal If Not IsEmpty(varMaxValue) Then If nextVal <= CDec(varMaxValue) Then ctlTxtBox.Value = CDbl(nextVal) ElseIf curVal < CDec(varMaxValue) Then ' إذا تجاوزت الخطوة الحد الأقصى وكان الرقم أقل منه (مثل 99% مع خطوة 3%) نضبطه على 100% ctlTxtBox.Value = varMaxValue End If Else ctlTxtBox.Value = CDbl(nextVal) End If End If Else ' الوضع الثاني: مع متغير وحدث curVal = CDec(dblValue) nextVal = curVal + stpVal If Not IsEmpty(varMaxValue) Then If nextVal <= CDec(varMaxValue) Then dblValue = CDbl(nextVal) ElseIf curVal < CDec(varMaxValue) Then dblValue = CDbl(varMaxValue) Else Exit Sub End If Else dblValue = CDbl(nextVal) End If RaiseEvent ValueChanged(dblValue) End If End Sub Private Sub Down() Dim curVal As Variant Dim stpVal As Variant Dim nextVal As Variant stpVal = CDec(lngStep) If Not ctlTxtBox Is Nothing Then ' الوضع الأول: مع مربع النص If IsNumeric(ctlTxtBox.Value) Then curVal = CDec(ctlTxtBox.Value) nextVal = curVal - stpVal If Not IsEmpty(varMinValue) Then If nextVal >= CDec(varMinValue) Then ctlTxtBox.Value = CDbl(nextVal) ElseIf curVal > CDec(varMinValue) Then ' إذا نزلت الخطوة عن الحد الأدنى وكان الرقم أكبر منه نضبطه على 0% ctlTxtBox.Value = varMinValue End If Else ctlTxtBox.Value = CDbl(nextVal) End If End If Else ' الوضع الثاني: مع متغير وحدث curVal = CDec(dblValue) nextVal = curVal - stpVal If Not IsEmpty(varMinValue) Then If nextVal >= CDec(varMinValue) Then dblValue = CDbl(nextVal) ElseIf curVal > CDec(varMinValue) Then dblValue = CDbl(varMinValue) Else Exit Sub End If Else dblValue = CDbl(nextVal) End If RaiseEvent ValueChanged(dblValue) End If End Sub
- 2 replies
-
- 1
-
-
- زر تدوير
- spinbuttons
-
(و1 أكثر)
موسوم بكلمه :
-
ملف يجمع جميع رسائل الخطا لاكسيس مترجم للعربية
Foksh replied to AMINYOUSIF's topic in قسم الأكسيس Access
جزاك الله خيراً اخي @AMINYOUSIF .. هدية مقبولة منك -
وعليكم السلام ورحمة الله وبركاته .. رغم أن طبيعة الطلب غير مفهومة أخي الكريم !!! ولكن !! على العموم ، ومشاركة مع أخي الأستاذ @بن علية حاجي ، جرب هذه المعادلة في الورقة Sheet1 في الخلية I2 ، واسحب للنهاية حسب حاجتك للتطبيق على الكل :- =IFERROR(VLOOKUP(A2&"", source!$A:$D, 4, 0), VLOOKUP(A2*1, source!$A:$D, 4, 0)) السبب على الأغلب يكمن في قاعدة أساسية في إكسل تسمى اختلاف نوع البيانات - Data Type Mismatch أما اذا كان سؤالك ، كيف تعمل الدالة السابقة ؟ فهي تقوم بما يلي :- تبحث أولاً مع تحويل القيمة إلى نص في (A2&"") إذا لم تجدها ، تقوم تلقائياً بالبحث بعد تحويل القيمة إلى رقم (A2*1) تضمن لك الحصول على النتيجة الصحيحة في كلتا الحالتين على أي جهاز كمبيوتر أو إصدار إكسل جرب وأخبرنا بالنتيجة
-
العفو يا صديقي ...
-
وعليكم السلام ورحمة الله وبركاته .. جرب المعادلة التالية في الخلية N6 :- =IF(G6<50, "ضعيف", IF(G6<60, "دون المتوسط", IF(G6<75, "متوسط", IF(G6<90, "فوق المتوسط", IF(G6<=100, "كفؤ", "درجة غير صحيحة"))))) إذا لم تعمل معك ، فالسبب عادةً الفاصلة المنقوطة ، لذا جرب التالية إحتياطاً :- =IF(G6<50; "ضعيف"; IF(G6<60; "دون المتوسط"; IF(G6<75; "متوسط"; IF(G6<90; "فوق المتوسط"; IF(G6<=100; "كفؤ"; "درجة غير صحيحة")))))
-
تنسيق مسافات الكود من خلال أداة Smart Indenter فى Add-Ins
Foksh replied to أحمد العيسى's topic in قسم الأكسيس Access
وعليكم السلام ورحمة الله وبركاته .. أبدعت بهذه المشاركة أخي أحمد ، وجزاكم الله خيراً لمشاركتكم الأداة مع أنها وكما أوضحتم بأنها 30 يوماً , ولكني سأنصحك بتجربة الأداة الأكثر تطوراً والمفتوحة المصدر حتى ، وبما أنك من المهتمين بهذه الأدوات الجميلة ، وهي أداة Rubberduck في هذه التفاصيل :- 1. تنسيق ومحاذاة الكود :- تقوم بإعادة محاذاة وتنسيق الكود بالكامل بضغطة زر واحدة ( للإجراء الحالي المحدد ، الموديول ، أو كامل المشروع ) . تحتوي على إعدادات متقدمة لتخصيص المسافات البادئة ، طريقة ترتيب الجمل الشرطية ، وسلوك الأقواس والتعليقات . 2. فحص وتدقيق الكود الذكي :- تحتوي الأداة على محلل ذكي يكتشف أكثر من 100 نوع من الأخطاء ونقاط الضعف البرمجية تلقائياً أثناء كتابة الكود ، مثل :- المتغيرات غير المستخدمة ( Unused Variables ) أو الأكواد الميتة ( Dead Code ) . المتغيرات التي لم يُحدد نوع بياناتها صراحة وتُركت كنوع Variant افتراضياً . غياب عبارة Option Explicit في الموديولات . نسيان إغلاق أو تفريغ كائنات الذاكرة ( Set rs = Nothing ) . توفر ميزة الإصلاح السريع ( Quick Fix ) لتصحيح المشكلة بنقرة واحدة دون كتابة يدوية . والعديد من المميزات التي قد تكتشفها عند مراجعتك هذا الرابط للتحميل والتفاصيل . -
أهلاً بعودتك أخي @kkhalifa1960 ، وحمداً لله على سلامتكم
-
وعليكم السلام ورحمة الله وبركاته .. إذا كان قارئ الـ NFC يعمل بوضع Keyboard Emulation ، أي أنه يرسل البيانات كما لو أنك كتبتها بلوحة المفاتيح ، فالإجابة هي نعم يمكن تنفيذ الفكرة دون الحاجة إلى مكتبات خارجية معقدة . وكأننا نتعامل مع قارئ الباركود أو الـ QR تماماً ؛ لأنني قد مررت بهذه التجربة مسبقاً . ابحث عن قارئ يدعم هذه المواصفات مجتمعة :- USB HID Keyboard Emulation . قراءة محتوى NDEF Text من البطاقة ، وليس UID فقط . إمكانية إرسال مفتاح Enter بعد القراءة . ليسهل عيك وضع الحدث داخل مربع نص كلمة المرور في الحدث بعد التحديث . بمعنى آخر ، هو القارئ الذي يعمل كلوحة مفاتيح افتراضية . وطبعاً ليست كل قارئات USB NFC من هذا النوع . اقرأ المقال التالي للتوضيح أكثر . أتمنى أن تكون الإجابة قد شملت ما تفكر به أخي الكريم .
-
العفو أخي الكريم .. على الرحب والسعة
-
بارك الله بكم أبا المعتصم على ما دعيتم ... ولكم الأجر والثواب إن شاء الله هو بعينه المنطق اللي انت بتتكلم عنه 😅 .. نعم هنا كان الهدف في الفكرة الأولى أن تقوم الأداة فعلاً بتقديم نسخة Accde ، واسترجاعها عند الحاجة لكثرة ما مررنا به من مشاكل وقعت أنا أولكم - أخوكم الصغير - بها سابقاً بأنني لم أجد نسخة العميل التي تم ارساله لها ولكن مفتوحة المصدر .. ولهذا توجهت لهذه الفكرة . فإن كان في خاطركم أفكار فلا أمانع أبداً أن أسمع أفكاركم ومقترحاتكم التطويرية .. الأمور الدقيقة هذه تلفت انتباهكم ، وفعلاً التسميات موجودة داخل مربعات النص اذا كانت فارغة ، ولكن بدون ليبلات 😁 يا عيني عليك .. بارك الله فيكم أخي احمد على مشاركتكم التجربة .. . سمعت صوتك وأنا أقرأ ردك هذا أخي منتصر 👀 .. مين قال هذا الكلام 😅 . على العكس يهمني رأيكم أخي منتصر