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

نجوم المشاركات

  1. Foksh

    Foksh

    الخبراء


    • نقاط

      695

    • Posts

      4967


  2. عبدالله بشير عبدالله
  3. ابوخليل

    ابوخليل

    أوفيسنا


    • نقاط

      396

    • Posts

      13753


  4. منتصر الانسي

    منتصر الانسي

    المشرفين السابقين


    • نقاط

      309

    • Posts

      1389


Popular Content

Showing content with the highest reputation since 07/30/25 in مشاركات

  1. السلام عليكم ورحمة الله وبركاته 🙂🖐 يقول المثل : أن تأتي متأخرا خير من أن لا تأتي 😅✌ بعد جهد جهيد إنتهيت من تصميم نظام تسجيل دخول + نظام صلاحيات متطور كلما أخطو فيه خطوة أجد أنه ناقص وتطلع أفكار جديدة .. 😅👊 لذلك قلت سأنزلها كما هي الآن .. حاولت تبسيطه للمستخدم والمستفيدين منه لاحقا قدر المستطاع .. وسأبدأ بواجهة تسجيل الدخول المتواضعة : المزايا : حفظ بيانات دخول المستخدم (اختياري) الدخول مباشرة بمجرد كتابة كلمة المرور بشكل صحيح (تسريع عملية الدخول) ملاحظة : جميع كلمات المرور في البرنامج : 123 ثانيا الواجهة الرئيسية : يتم تطبيق الصلاحيات للمستخدم بمجرد تسجيل الدخول .. ثالثا : إدارة المستخدمين هنا يتم إدارة جميع ما يتعلق بمستخدمي البرنامج ( إضافة ، تعديل ، حذف ، تعيين الصلاحيات ) رابعا : إدارة مجموعات العمل والصلاحيات لكل مجموعة هنا يتم ضبط الصفحات المسموح لكل مجموعة دخولها والصلاحيات الخاصة بكل صفحة .. ومثل ماهو واضح يمكن إضافة النماذج أو إزالتها كما يحلو لك وبعد ضبط مجموعات العمل يتم تعيين كل مستخدم للمجموعة الخاصة به ، ويمكن عمل مجموعة خاصة لشخص واحد فالخيارات غير محدودة .. 🙂 الآن يمكنك الخروج من البرنامج ثم تجربة تسجيل الدخول باسم المستخدمين المسجيلين في البرنامج للاستمتاع بتجربة الصلاحيات الممنوحة لكل مستخدم 😊 وبعد الدخول للصفحات يتم تطبيق الصلحيات الخاصة بالنموذج أيضا .. وبقية الصلاحيات ستظهر حسب الزر الذي يتم الضغط عليه مزايا إضافية موجودة في البرنامج .. ولها علاقة بالأمان أيضا .. نظام النسخ الاحتياطي وله إعدادات خاصة به (نسخ احتياطي يدوي أو تلقائي ) وهو موجود في صفحة إعدادات البرنامج : ولكل مستخدم مجموعة خيارات يمكنه التحكم بها مثل ( تغيير كلمة المرور ، التشغيل عند إقلاع الجهاز ، إنشاء اختصار في سطح المكتب ، حفظ بيانات التسجيل لتسريع الدخول للبرنامج) هذه هي أهم الميزات التي يحتويها البرنامج 🙂 ولفتح البرنامج في وضع التصميم ، حتى هذي سهلة للمبرمج 😅🖐 في صفحة تسجيل الدخول وكذلك الصفحة الرئيسية يوجد هذا الزر الخاص بالمبرمج >> بعد الضغط عليه >> أدخل كلمة المرور : 123 ويمكنك تغييرها من الكود الخاص بالزر .. بتظهر لك هذي النافذة الخاصة بالمبرمج فقط : وأهم ما فيها : (1) عرض الشريط العلوي ونافذة الأكسس >> بعد تفعيله تحفظ وتشغل الماكرو وبتنفتح عندك واجهة الأكسس >> أعد تشغيل البرنامج من جديد للحصول على جميع الميزات. (2) اسم نموذج البداية >> وهو أو نموذج بيشتغل معاك في البرنامج >> وهذا يسهل على المبرمج تطبيق النظام على أي برنامج آخر 🙂 (3) اسم البرنامج (واللي ييظهر في الشريط العلوي للأكسس) : (4) رقم الإصدار (نسخة البرنامج) وتاريخها >> ويمكن الاعتماد عليها لتحديث البرنامج لاحقا .. (5) إدارة نماذج الصلاحيات >> وهي النماذج اللي ستسمح بإعطاء صلاحيات لدخولها للبرنامج .. وكذلك تعطي كل نموذج اسم صديق للمستخدم وسيتم استخدام المسمى الحقيقي للنموذج داخليا .. وهكذا أكون شرحت لكم أهم المميزات ويتبقى نقطة مهمة وهي : يمكن للمبرمج الآن الاستفادة من هذا الملف فهو قاعدة جاهزة لإنطلاق في تصميم برنامجك الخاص .. جميع الأكواد الخاصة بالصلاحيات ستجدها في الموديول التالي : وأهم ما ستحتاج معرفته في كيفية تطبيق الصلاحيات ذكرته في الملاحظات المكتوبة أول الموديول : ' (1) : لتطبيق صلاحية فتح النماذج وصلاحيات الإضافة والتعديل والحذف تضع الأسطر التالية أول الأكواد في حدث فتح النموذج '------------------------------------------------------------------------------- 'Private Sub Form_Open(Cancel As Integer) ' ' فحص صلاحة دخول النموذج ' Cancel = Not Permission_OpenForm(Me.Name, True) ' ' تطبيق صلاحيات : الإضافة / التعديل / الحذف ' Apply_Addition_Edits_Delete_Permissions (Me.Name) 'End Sub '------------------------------------------------------------------------------- ' (2) : لتطبيق صلاحيات الطباعة والاستيراد والتصدير داخل نموذج معين تكتب هذه الأسطر لمعرفة وجود الصلاحة من عدمها ' : وكل سطر من هذه الصلاحيات يرجع لك النتيجة كما يلي ' True : مسموح ' False : ممنوع '------------------------------------------------------------------------------- ' 1- فحص صلاحية الطباعة (True/False) ' Permission_Print(Me.Name , True) ' |_>> (True/False) : هذه الجزئية اختيارية لعرض رسالة تنبيه عند عدم وجود صلاحية من عدمها ' 2- فحص صلاحية الاستيراد (True/False) ' Permission_Import(Me.Name , True) ' |_>> (True/False) : هذه الجزئية اختيارية لعرض رسالة تنبيه عند عدم وجود صلاحية من عدمها ' 3- فحص صلاحية التصدير (True/False) ' Permission_Export(Me.Name , True) ' |_>> (True/False) : هذه الجزئية اختيارية لعرض رسالة تنبيه عند عدم وجود صلاحية من عدمها '------------------------------------------------------------------------------- والنماذج الموجودة في البرنامج مع أزرارها تم تطبيق الأكواد عليها بشكل عملي << راجعها وأدرسها لمعرفة كيفية عملها .. وهي سهلة يسيرة بفضل الله 🙂 وهذا مثال عملي لتطبيق الصلاحية على زر الطباعة (فتح التقرير) مثلا : وهكذا بقية الصلاحيات (اطلع على بقية الموديول) تم تحويلها لأسطر قليلة بسيطة للاستفادة منها بكل يسر .. 🙂 وأخيرا تحميل البرنامج :: Moosak ‏‏Login System with permissions 1.0.zip :: وآخر دعوانا أن الحمد لله رب العالمين ::
    11 points
  2. ::: السلام عليكم ورحمة الله وبركاته ::: أسمحولي أن أقدم لكم هذه الهدية 🎁 البسيطة والمميزة والرائعة من مميزات هذا الإضافة: - عرض الملاحظات المهمة والتذكيرات مثل ( إجتماع ، اختبار ، تدوين أفكار ، كتابة مسودات، التذكير بالمواعيد ، .... الخ ) على واجهة برنامجك. - تتوائم مع البرامج ذوات المستخدمين المتعددين (كل مستخدم بملاحظاته الخاصة به). - تصميم رائع وألوان جميلة . - سهلة الاستخدام . رابط الشرح على اليوتيوب : تحميل الملف: Notes.accdb :: ولا تنسوني ووالدي من صالح دعواتكم 🙂 ::
    9 points
  3. اما فكرتي هذه ......... وهي حتى الان غير قابلة للنشر ..... 💡 نظام متكامل لإدارة صلاحيات المستخدمين في Microsoft Access يهدف هذا البرنامج إلى توفير تحكم كامل ومرن في صلاحيات المستخدمين داخل قاعدة بيانات Access، بحيث يتم تخصيص الصلاحيات على مستوى النماذج والأزرار بشكل دقيق، مما يعزز الأمان وسهولة الاستخدام. 🔐 أولاً: إدارة صلاحيات النماذج يوفر النظام إمكانية التحكم في صلاحيات المستخدم لكل نموذج على حدة، وتشمل: ➕ إضافة بيانات (Add) ✏️ تعديل بيانات (Edit) ❌ حذف بيانات (Delete) حيث يمكن تحديد ما إذا كان المستخدم: يملك صلاحيات كاملة أو صلاحيات محدودة (عرض فقط أو إضافة بدون تعديل… إلخ) 🎛️ ثانياً: التحكم في الأزرار داخل النماذج يتميز النظام بإدارة ذكية لواجهة المستخدم من خلال: إظهار الأزرار المصرح بها فقط حسب صلاحيات المستخدم إخفاء الأزرار غير المسموح بها تلقائيًا إعادة ترتيب الأزرار ديناميكيًا بحيث: لا تظهر أي فراغات يتم عرض الأزرار بشكل متتالي ومنظم الحفاظ على الشكل الجمالي للنموذج 🎨 ثالثاً: تخصيص واجهة المستخدم يوفر البرنامج مرونة عالية في تخصيص الواجهة، مثل: ✍️ التحكم في مسميات الأزرار بسهولة 🖼️ تغيير أيقونات الأزرار 🏠 تخصيص الشاشة الرئيسية: أسماء العناصر الأيقونات ترتيب العرض وذلك بدون الحاجة لتعديل الكود، بل من خلال جداول إعدادات مخصصة. ⚙️ رابعاً: مميزات إضافية نظام يعتمد على مستويات المستخدمين (User Levels / Groups) سهولة التوسع وإضافة صلاحيات جديدة إمكانية ربط الصلاحيات بجداول لسهولة الإدارة واجهة ديناميكية تتكيف مع كل مستخدم تلقائيًا 🔐 خامساً: إدارة كلمات المرور واستعادتها يدعم النظام آليات متقدمة لإدارة حسابات المستخدمين، مما يعزز مستوى الأمان وسهولة الاستخدام، وتشمل: 📧 استعادة كلمة المرور عبر البريد الإلكتروني إمكانية استرجاع كلمة المرور في حال نسيانها إرسال رابط أو رمز تحقق (OTP) إلى البريد الإلكتروني الخاص بالمستخدم التحقق من هوية المستخدم قبل إعادة تعيين كلمة المرور ضمان حماية الحساب من الوصول غير المصرح به 🔄 تغيير كلمة المرور تمكين المستخدم من تغيير كلمة المرور الخاصة به في أي وقت التحقق من كلمة المرور الحالية قبل التغيير تطبيق سياسات أمان (مثل الحد الأدنى لطول كلمة المرور أو تعقيدها) حفظ كلمة المرور بشكل آمن (مشفّر) داخل قاعدة البيانات 🚀 الخلاصة هذا النظام يوفر بيئة عمل احترافية داخل Access من خلال: تعزيز الأمان تحسين تجربة المستخدم تقليل الأخطاء توفير واجهة مرنة وقابلة للتخصيص بالكامل القيديو يلخص ذلك :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    8 points
  4. 🌷 لقاءات أكسس العرب الافتراضية | 03 | 🌷 موضوع اللقاء : مهارات وفنيات تصميم النماذج واختيار الألوان وتنسيق العناصر رابط اليوتيوب: ★ روابط اللقاء الثالث ★ ○ موقع إلهام : https://www.pinterest.com https://www.freepik.com ○ مواقع اختيار الألوان : https://coolors.co https://colorhunt.co https://www.materialpalette.com https://coolors.co/gradients ○ مواقع الأيقونات : https://icons8.com/icons https://www.flaticon.com https://icon-icons.com/ https://www.iconarchive.com/ https://flaticons.net/free-icons ○ مواقع صور PNG : https://www.cleanpng.com https://www.pngwing.com https://www.seekpng.com ○ مواقع صور خلفيات : https://www.pexels.com https://www.freepik.com/free-photos-vectors/background https://pixabay.com https://www.vecteezy.com/free-photos/background https://stocksnap.io/search/background ○ مواقع الخطوط : https://fonts.google.com https://arbfonts.com خطوط رسومية : https://www.vertex42.com/ExcelTips/unicode-symbols.html https://www.ssec.wisc.edu/~tomw/java/unicode.html ○ مراجع مهمة : https://elshemy.me/content/2025_8/Access_UI_UX_ِGuide.html ★ روابط تهمك ★ ❀ ملفات اللقاءات الافتراضية : ○ https://shorturl.at/mR2T3 ○ اللقاء الأول : https://drive.google.com/drive/folders/1wiMVugVZNzU9eaJ9abX-YfqhhSG6_Ec5 ○ اللقاء الثاني : https://drive.google.com/drive/folders/1EcaTZBp0rhmxhm7c_NKOg6BC-O89DS4W ○ اللقاء الثالث : https://drive.google.com/drive/folders/1VX4an_hg3ZdX-Q9_MlNNPoCzkCN6b98d ○ برمـجيـات - أدوات - إضـافـات : https://drive.google.com/drive/folders/1RtmH-cuk1rpj0zKkUNPbQz681oqKVNo3 ○ مجلد ورش العمل المشتركة : https://drive.google.com/drive/folders/1LL5_hsElZR4zQv62Wt1TxU2_M8Gv1Jja ❀ رابط الانظمام لمجموعة الأكسس جروب (واتسأب) : https://chat.whatsapp.com/HQvOPGrkASM2guvAotHXCw ❀ قناة أكسس العرب (اليوتيوب) : http://www.youtube.com/@ArabAccessGroup ❀ مواضيع اللقاء : المقدمة الإلهام البصري pinterest الإلهام البصري Google اختيار الألوان المناسبة تطبيق الألوان على قاعدة البيانات الأيقونات النصية الأيقونات الأيقونات - برنامج Pichon إضافة الصور المفرغة PNG تصميم الواجهات عن طريق PowerPoint حفظ التصميم من الباوربوينت واستيراده إلى الأكسس تصميم نموذج تسجيل الدخول إضافة التفاعل البصري للعناصر تفاعل بصري بالتنسيق الشرطي التأثيرات البصرية التي تطبق على الأزرار الخطوط في النماذج وتنسيقاتها الأنماط اللونية أنماط الخطوط مشاهدة ممتعة 😊🌷
    8 points
  5. اعرض الملف نظام تسجيل دخول احترافي، مع نظام صلاحيات متعدد المستويات السلام عليكم ورحمة الله وبركاته 🙂🖐 بفضل الله وتوفيقه أقدم لكم تصميم نظام تسجيل دخول + نظام صلاحيات متطور حاولت تبسيطه للمستخدم والمستفيدين منه لاحقا قدر المستطاع .. وسأبدأ بواجهة تسجيل الدخول المتواضعة : المزايا : حفظ بيانات دخول المستخدم (اختياري) الدخول مباشرة بمجرد كتابة كلمة المرور بشكل صحيح (تسريع عملية الدخول) ملاحظة : جميع كلمات المرور في البرنامج : 123 ثانيا الواجهة الرئيسية : يتم تطبيق الصلاحيات للمستخدم بمجرد تسجيل الدخول .. ثالثا : إدارة المستخدمين هنا يتم إدارة جميع ما يتعلق بمستخدمي البرنامج ( إضافة ، تعديل ، حذف ، تعيين الصلاحيات ) رابعا : إدارة مجموعات العمل والصلاحيات لكل مجموعة هنا يتم ضبط الصفحات المسموح لكل مجموعة دخولها والصلاحيات الخاصة بكل صفحة .. ومثل ماهو واضح يمكن إضافة النماذج أو إزالتها كما يحلو لك وبعد ضبط مجموعات العمل يتم تعيين كل مستخدم للمجموعة الخاصة به ، ويمكن عمل مجموعة خاصة لشخص واحد فالخيارات غير محدودة .. 🙂 الآن يمكنك الخروج من البرنامج ثم تجربة تسجيل الدخول باسم المستخدمين المسجيلين في البرنامج للاستمتاع بتجربة الصلاحيات الممنوحة لكل مستخدم 😊 وبعد الدخول للصفحات يتم تطبيق الصلحيات الخاصة بالنموذج أيضا .. وبقية الصلاحيات ستظهر حسب الزر الذي يتم الضغط عليه مزايا إضافية موجودة في البرنامج .. ولها علاقة بالأمان أيضا .. نظام النسخ الاحتياطي وله إعدادات خاصة به (نسخ احتياطي يدوي أو تلقائي ) وهو موجود في صفحة إعدادات البرنامج : ولكل مستخدم مجموعة خيارات يمكنه التحكم بها مثل ( تغيير كلمة المرور ، التشغيل عند إقلاع الجهاز ، إنشاء اختصار في سطح المكتب ، حفظ بيانات التسجيل لتسريع الدخول للبرنامج) هذه هي أهم الميزات التي يحتويها البرنامج 🙂 ولفتح البرنامج في وضع التصميم ، حتى هذي سهلة للمبرمج 😅🖐 في صفحة تسجيل الدخول وكذلك الصفحة الرئيسية يوجد هذا الزر الخاص بالمبرمج >> بعد الضغط عليه >> أدخل كلمة المرور : 123 ويمكنك تغييرها من الكود الخاص بالزر .. بتظهر لك هذي النافذة الخاصة بالمبرمج فقط : وأهم ما فيها : (1) عرض الشريط العلوي ونافذة الأكسس >> بعد تفعيله تحفظ وتشغل الماكرو وبتنفتح عندك واجهة الأكسس >> أعد تشغيل البرنامج من جديد للحصول على جميع الميزات. (2) اسم نموذج البداية >> وهو أو نموذج بيشتغل معاك في البرنامج >> وهذا يسهل على المبرمج تطبيق النظام على أي برنامج آخر 🙂 (3) اسم البرنامج (واللي ييظهر في الشريط العلوي للأكسس) : (4) رقم الإصدار (نسخة البرنامج) وتاريخها >> ويمكن الاعتماد عليها لتحديث البرنامج لاحقا .. (5) إدارة نماذج الصلاحيات >> وهي النماذج اللي ستسمح بإعطاء صلاحيات لدخولها للبرنامج .. وكذلك تعطي كل نموذج اسم صديق للمستخدم وسيتم استخدام المسمى الحقيقي للنموذج داخليا .. وهكذا أكون شرحت لكم أهم المميزات ويتبقى نقطة مهمة وهي : يمكن للمبرمج الآن الاستفادة من هذا الملف فهو قاعدة جاهزة لإنطلاق في تصميم برنامجك الخاص .. جميع الأكواد الخاصة بالصلاحيات ستجدها في الموديول التالي : وأهم ما ستحتاج معرفته في كيفية تطبيق الصلاحيات ذكرته في الملاحظات المكتوبة أول الموديول : ' (1) : لتطبيق صلاحية فتح النماذج وصلاحيات الإضافة والتعديل والحذف تضع الأسطر التالية أول الأكواد في حدث فتح النموذج '------------------------------------------------------------------------------- 'Private Sub Form_Open(Cancel As Integer) ' ' فحص صلاحة دخول النموذج ' Cancel = Not Permission_OpenForm(Me.Name, True) ' ' تطبيق صلاحيات : الإضافة / التعديل / الحذف ' Apply_Addition_Edits_Delete_Permissions (Me.Name) 'End Sub '------------------------------------------------------------------------------- ' (2) : لتطبيق صلاحيات الطباعة والاستيراد والتصدير داخل نموذج معين تكتب هذه الأسطر لمعرفة وجود الصلاحة من عدمها ' : وكل سطر من هذه الصلاحيات يرجع لك النتيجة كما يلي ' True : مسموح ' False : ممنوع '------------------------------------------------------------------------------- ' 1- فحص صلاحية الطباعة (True/False) ' Permission_Print(Me.Name , True) ' |_>> (True/False) : هذه الجزئية اختيارية لعرض رسالة تنبيه عند عدم وجود صلاحية من عدمها ' 2- فحص صلاحية الاستيراد (True/False) ' Permission_Import(Me.Name , True) ' |_>> (True/False) : هذه الجزئية اختيارية لعرض رسالة تنبيه عند عدم وجود صلاحية من عدمها ' 3- فحص صلاحية التصدير (True/False) ' Permission_Export(Me.Name , True) ' |_>> (True/False) : هذه الجزئية اختيارية لعرض رسالة تنبيه عند عدم وجود صلاحية من عدمها '------------------------------------------------------------------------------- والنماذج الموجودة في البرنامج مع أزرارها تم تطبيق الأكواد عليها بشكل عملي << راجعها وأدرسها لمعرفة كيفية عملها .. وهي سهلة يسيرة بفضل الله 🙂 وهذا مثال عملي لتطبيق الصلاحية على زر الطباعة (فتح التقرير) مثلا : وهكذا بقية الصلاحيات (اطلع على بقية الموديول) تم تحويلها لأسطر قليلة بسيطة للاستفادة منها بكل يسر .. 🙂 :: 🌹 وآخر دعوانا أن الحمد لله رب العالمين 🌹 :: صاحب الملف Moosak تمت الاضافه 05/12/26 الاقسام قسم الأكسيس  
    7 points
  6. أخواني وأساتذتي ومعلمينا ( دون استثناء ) .. الكثير من المواضيع التي ناقشت موضوع التحكم بالقوائم المختصرة داخل التقارير أو النماذج .. وكان للكثيرين من الأساتذة والخبراء والموهوبين أفكار جميلة جداً حول كيف تصنع قائمة مختصرة عند النقر على الزر الأيمن داخل نموذج أو تقرير . ومن هنا اليوم أضع بين أيديكم أداة تقوم بهذه المهمة بشكل سحري . 1️⃣ القدرة على إنشاء قوائم مختصرة دون أن تكتب أي أمر برمجي أو حتى البحث عن الخيارات داخل آكسيس لإضافة قائمة مختصرة .... إلخ . 2️⃣ القدرة على استيراد قوائم مختصرة من قاعدة بيانات أخرى إلى قاعدة بياتك الحالية من خلال الأداة . 3️⃣ القدرة على تصدير قوائم مختصرة إلى قواعد بيانات أخرى . 4️⃣ التحكم بالترتيب للأوامر داخل القوائم بحرية وسهولة ، وإتاحة إمكانية تسمية الأوامر كما تحب . 5️⃣ إتاحة إمكانية إعادة تسمية قائمة مختصرة موجودة مسبقاً . 6️⃣ التحكم بحذف قوائم معينة لا تريدها من خلال زر واحد . 7️⃣ إتاحة الفرصة لإضافة أوامر خاصة من خارج آكسيس ، أو ماكرو . أي أنك تستطيع استدعاء دوال عامة من مشروعة داخل زر في القوائم التي تصنعها . والكثير من الميزات التي يجب عليك اكتشافها بنفسك . 📸 واجهة الأداة المتواضعة :- فيديو توضيحي لطريقة الاستخدام بشكل سريع .. ملف الأداة مفتوح المصدر ، للتحميل :- Menu Builder.zip لمعرفة وظيفة كل زر ، فقط قف على الزر وستظهر لك الوظيفة المخصصة له .
    7 points
  7. اعرض الملف 🖼️ أداة جميلة لإزالة خلفيات الصور | سلسلة هدايا الأكسس | ⭐ 🎁 السلام عليكم ورحمة الله وبركاته لكسر الروتين وعموم الفائدة 😎👌 أقدم لكم أداة جديدة بفكرة جديدة 🙂 :: أداة إزالة خلفيات الصور :: الهدف من الأداة واضح >> وهو ببساطة إزالة خلفيات الصور >> والناتج صورة بخلفية شفافة بصيغة png . ولها استخدامات كثيرة في الاحتياجات العامة أو لتشذيب الصور قبل إدراجها في برنامج الأكسس مثلا .. أو .. أو .. أو .. عدد ما شئت أنا شخصيا أحتجتها في برنامجي (صانع الشهادات) لإزالة خلفيات التواقيع 🖋️📜 ثم إضافتها للبرنامج كمرفق. الأداة فكرتها بسيطة >> الإتصال بموقع remove.bg المشهور عن طريق ال API والعودة بالناتج بدون الحاجة لفتح الموقع. مفتاح الـAPI الحالي هو خاص بي ويمكنكم استخدامه مباشرة ولكنه محدود ب 50 تحويل لليوم .. في حال رغبتك بوضع مفتاحك الخاص ( وهي خدمة مجانية بالمناسبة ) يمكن تغييره في أول صفحة الكود وقد وضحت الطريقة هناك . 🙂 الملف مفتوح المصدر :: ودعواتكم الطيبة 🙂 صاحب الملف Moosak تمت الاضافه 06/22/26 الاقسام قسم الأكسيس  
    7 points
  8. ممكن وبكل سهولة هذا البرنامج يسهل عليك أدخال الدرجات والتاريخ كذلك الشرح يطول ولكن ثق تماما أنك بمجرد أن تفتحه وتثبت الماكرو وتستخدمه ستفهم البرنامج ثم بعد التجربة أذا أردت أي توضيح نحن في الخدمة محرر الأكواد مفتوح ويمكنك التعديل عليه كما تريد الطريقة : افتح ملفك الذي تريد الأدخال فيه ثم افتح هذا الملف ثم اضغط على إحدى الأيقونتين (الدرجات أو التاريخ) وعندما يفتح الفورم انتقل مباشرة إلى ملفك الذي تريد الأدخال فيه ستجد أن الفورم ينتقل إلى الملف الجديد تفضل إدخال الدرجات والتاريخ.xls
    7 points
  9. اعمل استعلام وضع فيه هذا مع تعديل اسم الحق الذي به المبلغ واسم الجدول لديك SELECT Amount, IIf([Amount] <= 15000, [Amount] * 0.1, 15000 * 0.1) AS [10%], IIf([Amount] > 15000, ([Amount] - 15000) * 0.15, 0) AS [15%] FROM YourTableName;
    7 points
  10. السلام عليكم بريمج صغير في حجمه وادواته .. ولكنه محكم ويفي بمتطلبات عملية الحضور والانصراف واحتساب ساعات ودقائق العمل . ومع ذلك هو قابل للتطوير واضافة خدمات اخرى مثل الغيابات والاجازات والعطل والاستئذان ونحوها ومثل جعل شاشة الحضور منفصلة عن البرنامج الاساسي واشياء اخرى كثيرة لا يمكن حصرها المهم ان العمل هذا يفي بالحاجات الأساسية والضرورية ....................... عملية التحضير تتم اما بادخال المعرف يدويا ثم النقر على انتر وإما استخدام قارىء الباركود كل ذلك تم تهيئته في البرنامج .. بطاقات وكشوف الباركود المطلوب قبل العمل على البرنامج هو نسخ ملف اداة الباركود barcodex.ocx الى نظام وندوز وتسجيلها تم العمل على وندوز 64 وأوفيس 32 بت الملف موجود ضمن المرفقات ، وتم اضافة المرفق المطور ChkInNetUp ايضا .. وهو خلاصة الملاحظات والطلبات في المشاركات اللاحقة ChkInOut.rar ChkInNetUp1.rar
    7 points
  11. وعليكم السلام تفضل هذا الملف ربما يفيدك ويكون به المطلوب ان شاء الله وبالتوفيق المحطة.xlsm
    7 points
  12. أخواني وأساتذتي ومعلمينا ( دون استثناء ) تشجيعاً للمتابعة والتقدم باستكمال الفكرة المعروضة في الفيديو التالي ، أرجو منكم مشاركتي أفكاركم وتعليقاتكم حول الفكرة الجديدة التي أقوم بتطويرها .. وأعلم أن هناك موضوع واحد على الأغلب قد تحدث عن الفكرة ولكن بطريقة مختلفة تماماً عن ما سترونه في :-
    6 points
  13. السلام عليكم يمكن عمل ذلك بقك الحماية في بداية اي كود ثم اعادة الحماية في نهاية الكود كلمة الحماية 123 يمكنك تعديلها بالكود جدول الحراسة.xlsm
    6 points
  14. السلام عليكم الجزء الاول هو المرجع لتوضيح عمل القائمة المختصرة : . في الموضوع السابق ، تحدثنا عن القائمة الثابتة ، وفي هذا الموضوع سنتكلم القائمة المؤقتة ، وعن طرق اخرى لإستعمال القائمة. وللعلم ، هناك قائمة مختصرة للنموذج واخرى للحقل ، سواء قائمة ثابته او مؤقته . القائمة الثابتة هي التي تجدها جاهزة للاستعمال ، وبدون عمل اي كود لها ، سواء في النموذج او التقرير ، مثلا : . اما القائمة المؤقته فيحتاج تناديها بالكود لكل استعمال ، ولما تغلق النموذج/التقرير ، يحتاج تحذفها ، والسبب مثل ما بتشوفون في المرفق ، نستعمل نفس القائمة ببعض الاختلافات بين النموذج/التقرير وحقوله. . التحدي الاكبر في القائمة المؤقته ليس البرمجة ، وانما معرفة الحدث الصحيح للحصول على النتيجة ، ثم تمرير النتيجة ، مثلا ، للحصول على عدد صفحات التقرير ، يجب استعمال الحدث On Page ، ومنها اخذ عدد الفحات وتمريرها الى دالة القائمة المؤقته. حاولت عمل اكبر قدر من التشكيلات ، وبأبسط طرق البرمجة ، حتى يكون تغييرها سهل للمبرمج. وفي المرفق وحدة نمطية لتصدير/استيراد كائنات قاعدة البيانات ، وحسب طلب اخي العزيز @ابوخليل ققد اضفت لها دالة لإرجاع كود القائمة المختصرة (اذا صارت الحاجة اليه). myRight_Click_Shortcut_Menu.zip
    6 points
  15. برنامج صغير خفيف .. يخدم الايجار اليومي وغيره ويصلح لأي خدمة ايجارات قابل للتطوير بمجرد تنفيذ اجراء الايجار يطبع فاتورة استلام .. وعند تنفيذ اجراء الارجاع يطبع فاتورة بالمبالغ المستحقة حاليا هذه الفواتير تفتح كتقارير يتم عرضها .. وهي مصممة للعمل على الطابعة الحرارية امل ان تجدوا المتعة والفائدة كلمة المرور = 1 Equps.rar
    6 points
  16. السادة الزملاء : مرفق دالة التفقيط بدون اكواد كل ما عليك ان تدرج الشيت المرفق فى اى ملف اكسيل تريد تفعيل دالة التفقيط بدون اكواد ولو نسخة الاكسيل 2021 فيما فوق يتم استخدام دالة مخصصة اسمها tafkeet Tafqeet_Dynamic_System (1).xlsx
    6 points
  17. السلام عليكم وجدت لكم صيدا سمينا لمن يواجه صعوبة في استخدام شجرة الحسابات اسميتها الحرة .. لأنها لا تستخدم اداة ActiveX TreeView تعتبر مشكلة أداة ActiveX TreeView في الإصدارات الحديثة من Microsoft Access (خاصة مع ظهور النسخ 64-بت) من أكثر التحديات شيوعاً، لأن الأداة القديمة (MSCOMCTL.OCX) غير مستقرة، تسبب مشاكل في "المكتبات" (DLLs)، ولا تدعم بنية 64-بت بشكل أصيل. هذا هو الخيار "الاحترافي" حالياً. بدلاً من أداة خارجية، يتم استخدام وحدات نمطية (Class Modules) برمجها مطورون لتغيير شكل النماذج العادية لتشبه الشجرة تماماً باستخدام عناصر التحكم الأصلية (مثل الـ Labels والـ Textboxes) تعتبر أداة Jan Karel Pieterse (المعروفة بـ JKP TreeView) واحدة من أرقى الحلول البرمجية التي تعتمد على "الفئات" (Class Modules) لتعويض أداة ActiveX، لأنها لا تعتمد على ملفات خارجية، بل تُبنى بالكامل داخل كود VBA إليكم المثال العملي تم فيه إنشاء شجرة حسابات احترافية بدون الاعتماد على ActiveX ولمن أراد التوسع والاستفادة يوجد امثلة ومرفقات متنوعة مجانية خاصة بأكسس اصدارات قديمة وأكسل وورد .. في هذا الرابط Treeview 26-5.rar
    6 points
  18. وعليكم السلام ورحمة الله وبركاته يتم الامر في حطوة واحدة
    6 points
  19. وعليكم السلام ورحمة الله وبركاته جرب الكود حيث قبل التنفيذ، يقوم بحذف أي دوائر سابقة 1الثالث.xlsb
    6 points
  20. السلام عليكم ورحمة الله تم التعديل أيضا (دائما بواسطة المعادلات) على ورقة "جداول الحراسة" التي تحتوي الجداول الفردية للحراس (معذرة لم أنتبه لها إلا الآن)... الحراسة2026 للتصحيح.xlsm
    6 points
  21. اولا شكرا لدعاؤك لي ثانيا الكود في الملف السابق يقوم بترتيب الصفحات ذات الارقام وبالتالي ستجد الصفحات الاخرى ذات الحروف وليس الارقام مستثناة وتجدها بجانب بعضها ولكن هناك احتمال الرغبة في استثناء صفخة او صفحات رقمية مثلا تريد استثناء صفخة 4 من الترتيب . هنا سيتم التعديل على الكود باظافة مصفوفة لتجميع الصفخات المستثناة كل ما عليك فعلة هو التعديل في هذا الجزء من الكود حيث اضفت لك صفحات افتراضية في الكود وليس في المصتف مثل "ملخص", "إعدادات", "تعليمات يمكنك تعديلها باي اسم او اظافة صفحات اخرى باي عدد تشاء excludedSheets = Array("الرييييسية", "تجميع", "ملخص", "إعدادات", "تعليمات") اليك الملف بالتعديل ترتيب الصفحات1.xlsm تحياتي
    6 points
  22. ما باقي بالعمر الكثير ...... وانا بدعبس بملفاتي حصلت مجموعة برمجيات كنت سويتها سابقاً منها هذا المرفق وهو يعمل لدي أحد أصدقائي وللحين مابه مشاكل .. باسوورد تحديث الجداول (1001) وباسوورد الوحدات النمطية أو الشفت (tariq1991) .... أنا برفق الفولدر كامل . القاعدة (WaitingMain 2010) بحجرة التسجيل . القاعدة (Role_CheckUp) بحجرة الكشف العام . القاعدة (Role_Consultation) بحجرة الاستشارات . القاعدة (Role_MedicalAnalytics) بحجرة العلاج الطبيعي . القاعدة (Role_Pharmacy) بالصيدلية . القاعدة (Role_Physiotherapy) بمعمل التحاليل . القاعدة (Role_Radiology) بحجرة الاشعة . .القاعدة (Role_Surgery) بحجرة العمليات . ولابد كل القواعد على شبكة واحده لأن الكل مرتبط بحجرة التسجيل . . واي استفسار أو طلب أنا حاضر . Khalifa Hospital.rar
    6 points
  23. السلام عليكم طبعا الفكره قديمه واحد الاخوه كان عامل مثلها ولاكن انا عدلت عليها بطريقه تكون سهلة وبسيطة وبدون اي شرح اليكم الببرنامج رسائل.zip
    6 points
  24. في طلبك الاول TextBox8 فقط والان تغير الطلب الى الكمبوبكس يمكن اظافة التالي الى UserForm_Initialize Dim ctrl As Control For Each ctrl In Me.Controls If TypeName(ctrl) = "ComboBox" Then ctrl.Style = fmStyleDropDownList ctrl.Locked = False End If Next ctrl برنامج المراكز الطبية 30 اغسطس.xlsm
    6 points
  25. أخواني وأساتذتي ومعلمينا ( دون استثناء ) .. مختبر ، وكيميائي ، وتفاعلي .. وفي آكسيس !!!! نعم أخي الكريم .. هل كنت تتصور أن آكسيس يمكن أن يكون مختبرك الكيميائي الرقمي التفاعلي بصورة لم تخطر على بالك !!! بفضل الله عز وجل وكرمه . تم الإنتهاء من تصميم هذا المختبر الرقمي في آكسيس . وهو قاعدة بيانات تعليمية تفاعلية تختص بكيمياء العناصر الذرية التي درسناها جميعنا .. نتعرف على مكونات و وظائف المختبر :- 1️⃣ عند فتح المشروع ستلاحظ أن جدول العناصر الدوري موجود أمامك بكامل العناصر الذرية الـ 118 . 2️⃣ قم باختيار اي عنصر بالنقر نقرة واحدة على مربعه . وستلاحظ معلومات غنية بالتعريف عن هذا العنصر . اسمه ورقمه الذري . من اكتشفه وفي أي عام . درجة الحرارة التي يغلي عندها أو ينصهر . كثافته .. توزيعه الإلكتروني ... وحتى أين يتواجد هذا العنصر ... إلخ 3️⃣ يمكنك عرض / إخفاء الجزء الذي لا ترغب بعرضه . 4️⃣ يمكنك عرض العناصر بفلترة تصل الى 10 فلاتر عرض حسب تصنيف كل عنصر . 5️⃣ عند اختيار أي عنصر ، ستلاحظ عرض رسومي متحرك تفاعلي لنواة العنصر والإلكترونات التي تدور حول نواته في مجالها الكهربائي . 6️⃣ من خلال زر "اختبار اللهب" ستلاحظ لون اللهب الناتج عن هذا العنصر عند احتراقه . على سبيل المثال جرب العنصر الثالث Li الليثيوم بالنقر على مربعه ثم انقر زر "اختبار اللهب" 7️⃣ من خلال زر "اصنع تفاعلك الكيميائي" سيتم الإتاحة لك باختيار أي عنصرين تريدهما من الجدول الدوري الذي هو أمامك ( ستلاحظ إحاطة اسم العنصر باللون الأبيض بعد اختياره ) ، ومن ثم نقلك إلى المختبر مباشرة لرؤية نتيجة تفاعل هذين العنصرين عند التقائهما معاً ؛ وهذه الطريقة الأولى . 8️⃣ الطريقة الثانية من خلال الزر "مختبر التفاعلات الكيميائي" حيث سيتم فتح باب المختبر أمامك لاختيار عناصر من قائمتين منسدلتين ، ثم النقر على الزر "ابدأ التفاعل الكيميائي ..." 9️⃣ من خلال الزر "مسابقة المختبر الكيميائي" سيتم فتح نافذة اختبار تفاعلية متعددة المستويات ( مبتدئ ، متوسط ، محترف ) ولكل من هذه المستويات طبيعة أسئلة مختلفة في كل مرة . والإختيار سيكون اختيار إجابة من 4 إجابات . طبعاً كل إجابة صحيحة بـ 10 نقاط من عدد 10 أسئلة . يعني إنت وشطارتك ومعلوماتك 😁 . 🔟 في نهاية الواجهة الرئيسية ستلاحظ ظهور مقترحات ومعلومات عن عنصر عشوائي ، أو عن التقاء عنصرين والناتج لهما ماذا سيكون . كيف تم بناء هذا المختبر ؟ تم جلب كافة المعلومات من الموقع Byjus . طبعاً بعد التدقيق في أكثر المعلومات التي استطعت الوصول لها من عدة مصادر ومراجع . تم تصميم الخلفية المستخدمة للجدول الدوري مقتبسةً من الموقع نفسه ( إقتباساً ) . الحركة الناتجة عن دوران الإلكترونات والتفاعلات الذرية في المختبر ، أو حتى اختبار اللهب ، وحتى مسابقة المختبر ؛ تم بنائها بالاعتماد على عنصر ويب تمت برمجته بلغة :- ( HTML / CSS / JS ) . ويتم إنتاج الملفات داخل المجلد %Temp% وربطها بعنصر الويب داخل النماذج تلقائياً . اضغط مفتاح Win + R في لوحة المفاتيح ، ثم اكتب %temp% وابحث عن ملفات HTML في مجلد الملفات المؤقته ، واستمتع .. كل عنصر كيميائي ( مربع ) سيمثله ( عنصر زر + مربع نص ) خاص بهذا العنصر . وتم الربط بينها داخل الأكواد من خلال الرقم الذري لكل عنصر . اكتشف اسم كل زر ومربع نص ولاحظ نهاية الاسم لكل منهما والرقم الذري للعنصر الذي سيمثلانه هذين العنصرين . أزرار التحكم ( إخفاء / إظهار ) بعض التفاصيل ؛ يمثلها صورتين إظهار واحدة وإخفاء الأخرى لأظهار الحركة On/Off . جميع العناصر في النماذج عبارة عن صورة وليست أزرار ، تم استخدام الحدث عند النقر لها لأداء وظيفتها . والحدث عند تحريك الماوس فوقها لإظهار الماوس بصورة يد . الخطأ وارد عند نقل أي معلومة من مصادر خارجية . لذا التعديل متاح لك أخي المستخدم داخل الجداول (tblCompounds و tblElements ) لأي معلومة تعتقد أنها غير صحيحة . والإستدلال عليها بسهولة من خلال اسم العنصر أو رقمه الذري . فيديو توضيحي لشكل العمل في نهايته التي ستتعامل معها :- ملف المشروع مفتوح المصدر :- Periodic Table.zip
    5 points
  26. السلام عليكم الموقع التالي: https://www.msaccesstips.com/ فيه مجموعة مواضيع تخص تنصيب الذكاء الاصطناعي محليا على حاسبتك ، والمواصفات المطلوبة لعمل ai على حاسبتك ، ونوع ai المناسب ، ثم يتطرق في موضوع آخر الى عمل نموذج اكسس ليقوم بمحاكاة ai ، ويتطرق في موضوع ثالث لشرح JSON والتوكن والحرارة ضمن بيئة الاكسس ، ويوجد امثلة مرفقة مفتوحة المصدر. للعلم والاستفادة 🙂
    5 points
  27. أخواني وأساتذتي ومعلمينا ( دون استثناء ) .. سابقاً وفي الموضوع الذي قمت بطرحه بإستفسارات حول آلية تطبيق وإمكانية التنفيذ من خلال آكسيس ليقوم بإرسال رسائل قصيرة SMS من الجوال . كانت الملاحظات والمشاركات ذات قيمة بالنسبة لي . وأشكر كل من ساهم بالرد بمعلومة حتى لو كانت بسيطة وجزئية بنظره .🥰. وبعد البحث عن فكرة مجانية بالكامل . خلصت في نهاية المطاف إلى أنني بحاجة فقط إلى جسر وصل وربط بين الجوال والكمبيوتر ( آكسيس تحديداً ) . ولهذا قمت أولاً بإنشاء تطبيق خاص وحصري ، ويعمل فقط على هواتف أندرويد بشكل عام فقط ( طبعاً بحكم طبيعة عملي في مجال الجوالات وصيانتها ) - جماعة IOS اعتذر منكم في الوقت الحالي 😁 - فكان التنفيذ لتطبيق لا يحتاج منك إلا تشغيل/أيقاف الخدمة فقط . وطبعاً وللمعلومة هذه الخدمة لا تعتمد على أي اتصال بالإترنت نهاااائياً . حيث أن الربط سيكون من خلال الشبكة المحلية التي يتصل بها الكمبيوتر والجوال معاً ، حتى لو كانت مجرد شبكة محلية بدون انترنت ، وعليه :- سيلزمنا أولاً تحميل التطبيق بصيغة APK من الرابط التالي هنا ، وتثبيته على الجوال بالشكل الطبيعي . ولكن وبما أن حمايات جوجل تتطور وتتحدث يومياً فإنك ستلاحظ أن النظام في جوالك سيمنع التثبيت بحكم أنك لم تقم بتحميل التطبيق من متجر تطبيقات جوجل 😅 ، وبالتالي فما عليك فعله بعد تحميل التطبيق من الرابط إلى جوالك ، ما يلي :- 1. افتح متجر جوجل بلاي في جوالك ، واتبع الخطوات التالية :- 2. الآن قم بإيقاف الحماية مؤقتاً للسماح بتثبيت تطبيقات خارجية ، ثم أعد تشغيلها للإطمئنان ، كما في الصورة :- 3. قم بتثبيت التطبيق الذي قمت بتحميله من الرابط السابق الآن . وبما أننا سنتعامل مع تطبيق يتعامل مع الرسائل وجهات الاتصال فقط . فسيطلب منك التطبيق الإذن بالصلاحيات للوصول الى الرسائل وجهات الإتصال ، وهذا الأمر طبيعي جداً . يعني حاله كحال أي تطبيق تقوم بتثبيته ويطلب منك صلاحيات . ولكن صلاحياتنا هنا محدودة وظاهرة . 4. قم الآن بتحميل النظام من الرابط التالي هنا للإصدار 64 ، أو من هنا للإصدار 32 . وستكون الواجهة بالشكل التالي :- 5. الآن ما الذي يتوجب عليك فعله بعد تحميل التطبيق وتثبيته على الجوال وفتحه ، وتشغيل البرنامج ؟ فقط اتبع ما يلي مصوراً :- اضغط الزر الأحمر والذي يدلك على حالة الإتصال بالخدمة ( تعمل / متوقف ) . حيث سيتغير لونه إلى اللون الأخضر عند تشغيل البرنامج . ليصبح بالشكل التالي على نجاح التشغيل :- التطبيق سيعمل معك بالعربية أو الإنجليزية ، ويدعم نمط الوضع الداكن أو الفاتح . وهي أمور جمالية فقط لا غير . لكن الإفتراضية ستكون اللغة العربية بالوضع الداكن . 6. الآن وبما أننا حصلنا على رقم IP محلي داخل الشبكة الحالية التي تحدثنا أنه يجب أن يكون الجوال والكمبيوتر متصلان على نفس الشبكة . سنذهب إلى واجهة التطبيق ونضغط زر الإعدادات الموجود بقائمة الأزرار الموجودة في الجزء العلوي الأيمن . وستجد أنك دخلت إلى النموذج التالي :- والمطلوب منك هو إدخال رقم الـ IP الذي ظهر معك في التطبيق الذي تم تثبيته على جوالك ، كما في الصورة ( مع اختلاف القيم طبعاً حسب الموزع الذي يتصل به جهازاك ) . وطبعاً باقي تفاصيل الإعدادات واضحة . حيث يمكنك تحديد عدد حروف الرسالة النصية الواحدة المرسلة . ومدة التحديث التلقائي التي تريد أن يتم كل عدد ثواني الكشف عن الاتصال . ثم انقر الزر الأخضر لحفظ الإعدادات والخروج . 7. وبعد أن تمت عملية تهيئة النظام للإتصال من خلال الشبكة المحلية بنجاح . سنقوم بالضغط على الزر الذي له شكل شبكة الـواي فاي WiFi . وستلاحظ انه تم الاتصال بالجوال وسيظهر لك اسم جوالك في أعلى الجهة اليمنى من واجهة النظام . وكذلك نسبة البطارية في جهازك في الجهة اليسرى المقابلة . وهذا دلالة على الإتصال ناجح بين آكسيس والجوال . 8. الآن ما دلالات ووظائف الأزرار الباقية ؟؟ ♻ الزر وظيفته جلب جهات الإتصال من الجوال ومزامنتها داخل التطبيق . والهدف هو تحميل جهات اتصالك بدلاً من حفظها واحداً واحداً . طبعاً ميزة الإضافة لجهة جوال جديدة غير متاحة حالياً في هذه النسخة . ♻ الزر الغير مفعل كوظيفة ، هو ووظيفته لاحقاً هي إستيراد الرسائل من الصندوق الوارد في جوالك الى اكسيس . وطبعاً المزامنة لن تكون بتكرار الرسائل عند كل عملية استيراد أو مزامنة ، وكذلك الأمر لجهات الاتصال . فلن يكون هناك تكرار عند كل عملية مزامنة . ♻ الزر ووظيفته عرض واختيار جهات الإتصال التي تمت مزامنتها من جوالك لاختيار - فردي أو متعدد - جهات إتصال وأرقام ترغب بالإرسال لهم . وعند النقر المزدوج على أي جهة إتصال سيفتح لك نموذج تعديل الاسم أو جهة الاتصال هذه وحفظ التعديلات . و طبعاً تستطيع الإرسال لرقم غير محفوظ في جهات اتصالك . ♻ الزرين ( فحص حالة الإتصال تلقائياً و حفظ الرسالة بعد الإرسال ) تسميتهما دالة على الوظيفة بشكل صريح . ♻ الزر 😄 ، وظيفته إضافة تعبير رسومية Emoji للرسالة . 9. الليست بوكس الموجود على الجهة اليسرى من الواجهة سيعرض لك جميع الرسائل التي تم ارسالها ( طبعاً إن قمت بتفعيل الحفظ التلقائي في الزرين الذين تم شرحهم قبل هذه النقطة ) ووجب الذكر هنا أن الخيارات والإعدادات ستبقى محفوظة حتى لو قمت بالخروج من النظام والعودة له لاحقاً . وطبعاً عند النقر المزدوج على أي رسالة مرسلة محفوظة سيتم نقل نص الرسالة الى مربع نص الرسالة بدلاً من كتابتها مرة أخرى عند حاجتها . وهنا ستجد المتعة في هذه القائمة من خلال طريقة العرض التي تريدها . يعني أنه يمكنك عرض الليست بوكس عن طريق القائمة وهي طريقة العرض الإفتراضية أو الشجرة . وذلك من خلال الزرين الموجودين فوق هذه القائمة . حيث في طريقة عرض القائمة سيتم عرض جميع الرسائل كسجل منفرد لكل رسالة . بينما في طريقة عرض الشجرة سيتم عرض الرقم المرسل له . وعند فتح قائمته تظهر لك الرسائل التي ارسلتها له 😁 . الآن وفي نهاية المطاف ، آمل أن يكون هذا العمل الذي استغرقني قرابة الشهر ، قد نال إعجابكم من الناحية التنفيذية و الوظيفية له . وحيث أن الوظائف التي لم تدرج بعد ، سيكون لها قريباً دمج وإضافة بعد التحقق من نجاحها بكافة الأشكال وتجربتها على أكثر من جوال ، في تحديث جديد . طبعاً التطبيقات التي تشابه فكرة تطبيق الجوال الخاص بي كثيرة على متجر جوجل بلاي .. فلك الحق والحرية بتجربة أي تطبيق آخر من المتجر نفسه . على سبيل المثال لا الحصر Traccar SMS Gateway . لكن ما يميز تطبيقي أنك لست بحاجة الى رمز وصول Token . أيضاً لن تستفيد من ميزة إستيراد جهات الإتصال من جوالك الى آكسيس . وبعض المزايا الأخرى بالتأكيد 😉 . •| وفي الحديث عن أن العمل مقفل وبصيغة ACCDE . فهو مجهود شخصي وغير منفذ مسبقاً . لذا عذراً عن عدم رفعه مفتوح المصدر فيما بعد |• 🤗 ولك الحق في عدم تجربة أي مشاريع مقفلة 🤗 دعم شبكات الـ CDMA .. دعم الشريحتين ، واختيار شريحة الأرسال الإفتراضية . عرض اسم الشبكة ونوع الاتصال GSM-LTE-CDMA ... إلخ قراءة اسم الشبكة لكل شريحة للتمييز . إتاحة ميزة جديدة وهي الإتصال برقم محدد من تطبيق آكسيس . طبعاً الإتصال سيكون من الجوال مباشرةً . قراءة رسائل الوارد من الجوال والتحكم بطريقة العرض كما هو الحال في الرسائل المرسلة . تصحيح الإتصال عند اغلاق شاشة الهاتف . تصحيح الإتصال عند ربط آكسيس والجوال على نقطة اتصال من جوال آخر بدلاً من راوتر شبكة محلية . جميع ما سبق متاح الآن في الإصدار الجديد . ميزة الإتصال من واجهة آكسيس تحتاج لمنح التطبيق الصلاحية . وكذلك الأمر تصحيح الإتصال عند اغلاق شاشة الهاتف ستطلب منك صلاحية باستثناء التطبيق من وضع الخمول عند قفل الشاشة . إصدارات أوفيس 64 إصدارات أوفيس 32 تطبيق الجوال قم أولاً بإزالة التطبيق المقبت على جوالك للنسخة السابقة ، وثبت النسخة الجديدة بنفس الآلية السابقة ، ومنح التطبيق الصلاحيتين ( قراءة الرسائل و استعمال تطبيق الهاتف للإتصال )
    5 points
  28. وعليكم السلام ورحمة الله وبركاته اليك الحل بالمعادلات في شيت1 بالاكواد شيت2 مثال1.xlsb
    5 points
  29. استكمالاً للموضوع القديم هنا ، تم بحمد الله وفضله ؛ إطلاق النسخة الأولى من اللعبة الشهيرة الدومينو ، ولكن بنكهتي التي تعودت عليها 😊 .. اللعبة لن تحتاج شرح عنها ، سوى كيفية اللعب .. ضبط الإعدادات :- في نموذج البداية والمخصص لإعدادات اللعبة . انقر الزر لعبة محلية. اللاعب الأول = الخصم وهو الكمبيوتر . واللاعب الثاني هو أنت عزيزي اللاعب . من يبدأ اللعبة هو الذي يكون لديه حجر الدش الأكبر ( إن وجد ) ، أو اللاعب الذي لديه أكبر حجر . الرقم 100 هو رقم افتراضي للمجموع الذي سيكون الفائز من يصل إليه أولاً . نقاط الفوز = مجموع الأرقام في الحجارة التي في يد اللاعب الخسران . والفائز يحصل على مجموع النقاط هذه . صورة واجهة الإعدادات . كيفية اللعب على النسخة المحلية :- عند بدء اللعبة ، اللاعب الذي لديه أكبر حجر مزدوج ( الدش ) هو من يبدأ اللعب .. لمعرفة وظيفة كل زر فقط قف عليه لتعرف ظيفته في اللعبة ، وعدد الأزرار = 4 وهي :- زر بدء الجولة الجديدة . * زر سحب حجر من الكومة ( عندما لا يكون لديك او لدى الكمبيوتر حجر صالح للعب ) . * زر تسليم الدور . ويكون متاحاً عندما لا يكون لدى الكومة ( البنك ) حجارة ، وبالطبع عندما لا يكون لديك حجر صالح لتلعبه بينما الكمبيوتر أو اللاعب الآخر لديه حجر صالح للرمي . أما عند عدم وجود حجارة صالح للرمي مع كلا الطرفين ( ولم يتبق حجارة في الكومة - البنك - ) فتكون اللعبة قد أغلقت ، والنتيجة تحسم لصاحب العدد الأقل مجموعاً للحجارة بالفوز . * زر الغش 😁 ، وهو زر كشف حجارة الكمبيوتر . وعكسه زر الإخفاء . اللعب سيكون بالنقر المزدوج على الحجر الصالح للرمي بيدك . عند وجود حجر صالح للرمي باتجاهين ، لديك الحرية باختيار الجهة التي تريد رميه فيها بظهور مستطيل وهمي يمثل موقع الحجر . ( ستلاحظونه أثناء اللعب بسهولة و وضوح ) . صورة واجهة اللعبة . فيديو توضيحي لطريقة اللعب :- التحميل للإصدارين 32 و 64 من هنا . وقد تم رفعه على جوجل درايف لأن حجم الملف تقريباً بحدود 9 ميجا مع مجلد الصور .
    5 points
  30. فقط للمشاركة مع النخبة تفضل اساذ @ابوخليل محاولتي المتواضعة . حسب ما فهمت وزودت شويه من عندي .... BoKhalil.rar
    5 points
  31. وعليكم السلام -كان عليك ان تقوم بالتالى حدد العمود. اذهب إلى علامة التبويب بيانات (Data) > نص إلى أعمدة (Text to Columns) > إنهاء (Finish) ثم اكتب معادلة جمع عادية وستحصل على النتيجة المرجوة تقرير التأخير الشهري 11112.xlsx
    5 points
  32. اليك الملف البحث في القائمة بالحروف.xlsm
    5 points
  33. و عليكم السلام ورحمة الله وبركاته __اصناف مشتريات - نسخة2.xlsx
    5 points
  34. وعليكم السلام ورحمة الله وبركاته الى جانب الحلول التي ارفقها استاذنا الفاضل hegazee اليك حل اخر بالكود في حدث الورقة Private Sub Worksheet_Change(ByVal Target As Range) Dim rngF As Range, rngG As Range Dim rngB As Range, rngC As Range Dim pos As Variant Set rngF = Me.Range("F2") ' Set rngG = Me.Range("G2") Set rngB = Me.Range("B2:B1000") Set rngC = Me.Range("C2:C1000") If Not Intersect(Target, rngF) Is Nothing Then Application.EnableEvents = False pos = Application.Match(rngF.Value, rngB, 0) If Not IsError(pos) Then rngG.Value = Application.Index(rngC, pos) Else rngG.Value = "" End If Application.EnableEvents = True End If rngG.Select End Sub data.xlsb
    5 points
  35. السلام عليكم ورحمة الله إليك هذا الحل باستعمال "الذكاء الاصطناعي" (بالمعادلات وبالأكواد -بتصرف-) أرجو أن يفي الغرض المطلوب... ملف العمل.xlsm
    5 points
  36. السلام عليكم خسب المثال المرفق يبدو أنك تريد دالة للتقريب إلى أقرب 0.1 (أعشار)، وليس معادلة باقي القسمة (mod) التي تعمل عادة مع الأعداد الصحيحة. =CEILING(A2; 0.1) =ROUNDUP(A2*10;0)/10 تقريب.xlsx
    5 points
  37. وعليكم السلام ورحمة الله وبركاته المشكلة الرئيسية هي في منطق البحث البحث عن الأعمدة يتم من الصف 3 (G3:U3) ولكن البيانات تبدأ من الصف 4 الإزاحة (offset) غير صحيحة عند استخراج القيم اليك التعديل تنسيق ترتيب الجداول الكمية مع اسم الصنف مع التاريخ التابع له - Copy - Copy.xlsm
    5 points
  38. السلام عليكم و رحمة الله و بركاتة الزملاء الكرام وأعضاء المنتدى الموقرين، تحية طيبة وبعد، نتشرف بإبلاغكم، بفضل الله وتوفيقه، اكتمال المرحلة التطويرية النهائية لتطبيقنا المبارك: [القرآن الكريم]. نأمل أن يكون هذا العمل وقفاً رقمياً مستداماً، وأن يكتب أجره لمن ساهم في إنجازه مادياً وتقنياً. دعوة للمراجعة الفنية وضمان الجودة (Quality Assurance): قبل الإطلاق الرسمي والتعميم، ندعوكم، خاصةً من ذوي الخبرة التقنية والمستخدمين المتمرسين، لتحميل النسخة التجريبية والمشاركة في مراجعتها بدقة وعمق. إن الهدف الجوهري من هذه المرحلة هو: ضمان جودة الأداء: والتأكد من توافق التطبيق مع المعايير التقنية واحتياجات شرائح المستخدمين المتنوعة. تحديد نقاط التحسين: واكتشاف أي مواطن خلل أو قصور فني ووظيفي يتطلب تعديلاً. تحقيق التكاملية: للوصول إلى أفضل تجربة مستخدم ممكنة. نؤكد استعداد فريق العمل لدمج وتطبيق الملاحظات البنّاءة التي تصب في مصلحة الهدف العام للتطبيق، مع الالتزام التام بإعادة نشر النسخة المحسّنة والموثقة لجميع المساهمين والجمهور، تحقيقاً لمبدأ "الصدقة الجارية والمنفعة العامة". ختاماً، ندعو المولى عز وجل أن يتقبل هذا الجهد المشترك وأن يجعله في ميزان حسنات كل من شارك في بناء هذا العمل وفي تحسينه ونشره. مع خالص التقدير والامتنان، حسين الحمادي ابو يوسف القران الكريم.xlsm
    5 points
  39. و عليكم السلام ورحمة الله و بركاته انشيء ملف جديد و وأضبطه كما تريد من حيث الحجم و الهوامش و كل شيء بعدين احفظ الملف باسم مثلا A4 وبصيغة Excel Template (*.xltx) الحفظ يكون في المسار التالي C:\Users\[اسم المستخدم]\Documents\Custom Office Templates لما تنشئ ملف جديد اختار القالب اللي أنت عملته اللي هو A4
    5 points
  40. ساعة بعقارب كان طلبها استاذنا @الحلبي وأضفت عليها أصوات للثواني يعمل الاختيار الاول عند تشغيل الفورم ويمكن تغيير صوت الثواني من الليستبوكس .كذلك صوت الساعة(كوكو) يعمل مع ظهور صورة عصفور بعدد رنات تساوي عدد الساعة الصحيح مثلاً الساعة 01:00:00 رنة واحدة وظهور العصفور مرة واحدة ..... وهكذا الى الساعة 12:00:00 بعدد 12 رنة وظهور العصفور 12 مرة . اليكم المرفق كامل مفتوح المصدر . Cuckoo_Clock.rar
    5 points
  41. وعليكم السلام ورحمة الله وبركانه اليك التصحيج Sub Filter_Class2() Dim WSdest As Worksheet: Set WSdest = Sheets("TI3DAD") Dim D1 As Object, D2 As Object, D3 As Object, D4 As Object Dim I As Long, x As Long, Y As Long, m As Long, z As Long Dim Réf As Variant, ky As Variant, Rng As String Set D1 = CreateObject("Scripting.Dictionary") Set D2 = CreateObject("Scripting.Dictionary") Set D3 = CreateObject("Scripting.Dictionary") Set D4 = CreateObject("Scripting.Dictionary") x = 0: Y = 0: m = 0: z = 0 With WSdest Application.ScreenUpdating = False .Range("M4:V32,X4:AG32,AI4:AR32,AT4:BC32").ClearContents I = 7 Do While I <= .Rows.Count If .Cells(I, 2) <> "" Then Rng = Left(Trim(.Cells(I, 2).Value), 1) Réf = Application.Transpose(.Cells(I, 2).Resize(, 13).Value) Réf = Application.Transpose(Réf) Select Case Rng Case "4" D4(z) = Join(Réf, "*") z = z + 1 Case "3" D3(Y) = Join(Réf, "*") Y = Y + 1 Case "2" D2(x) = Join(Réf, "*") x = x + 1 Case "1" D1(m) = Join(Réf, "*") m = m + 1 End Select I = I + 1 Else Exit Do End If Loop m = 4 If D4.Count > 0 Then For Each ky In D4.Keys .Cells(m, "M").Resize(, 13).Value = Split(D4(ky), "*") m = m + 1 Next ky End If m = 4 If D3.Count > 0 Then For Each ky In D3.Keys .Cells(m, "X").Resize(, 13).Value = Split(D3(ky), "*") m = m + 1 Next ky End If m = 4 If D2.Count > 0 Then For Each ky In D2.Keys .Cells(m, "AI").Resize(, 13).Value = Split(D2(ky), "*") m = m + 1 Next ky End If m = 4 If D1.Count > 0 Then For Each ky In D1.Keys .Cells(m, "AT").Resize(, 13).Value = Split(D1(ky), "*") m = m + 1 Next ky End If .Range("M4").CurrentRegion.Value = .Range("M4").CurrentRegion.Value .Range("X4").CurrentRegion.Value = .Range("X4").CurrentRegion.Value .Range("AI4").CurrentRegion.Value = .Range("AI4").CurrentRegion.Value .Range("AT4").CurrentRegion.Value = .Range("AT4").CurrentRegion.Value Application.ScreenUpdating = True End With End Sub 1تعداد.xlsm
    5 points
  42. السلام عليكم كود طباعة وكود تحويل pdf Sub Print_Managers_Deputies() Dim wsData As Worksheet, wsReport As Worksheet Dim lastRow As Long, i As Long Dim idVal As String, roleVal As String Application.ScreenUpdating = False Application.EnableEvents = False Set wsData = ThisWorkbook.Sheets("data") Set wsReport = ThisWorkbook.Sheets("التقرير مدير وكيل") lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row For i = 3 To lastRow idVal = wsData.Cells(i, "A").Value roleVal = wsData.Cells(i, "E").Value If (InStr(1, roleVal, "مدير", vbTextCompare) > 0) _ Or (InStr(1, roleVal, "وكيل", vbTextCompare) > 0) Then wsReport.Range("L2").Value = idVal wsReport.PrintOut wsReport.Range("L2").Value = 1 End If Next i MsgBox "تمت طباعة جميع المديرين والوكلاء.", vbInformation Application.ScreenUpdating = True Application.EnableEvents = True End Sub Sub sav_PDFall2() Dim wsData As Worksheet, wsReport As Worksheet Dim lastRow As Long, i As Long Dim roleVal As String Dim folderPath As String, pdfPath As String Dim safeName As String Application.ScreenUpdating = False Application.EnableEvents = False Set wsData = ThisWorkbook.Sheets("data") Set wsReport = ThisWorkbook.Sheets("التقرير مدير وكيل") wsReport.Unprotect password:="0" folderPath = ThisWorkbook.Path & "\التقرير مدير وكيل" If Dir(folderPath, vbDirectory) = "" Then MkDir folderPath lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row For i = 3 To lastRow roleVal = wsData.Cells(i, "E").Value If (InStr(1, roleVal, "مدير", vbTextCompare) > 0) _ Or (InStr(1, roleVal, "وكيل", vbTextCompare) > 0) Then wsReport.Range("C9").Value = wsData.Cells(i, "B").Value safeName = wsReport.Range("C9").Value safeName = Replace(safeName, "/", "-") safeName = Replace(safeName, "\", "-") safeName = Replace(safeName, ":", "-") safeName = Replace(safeName, "*", "-") safeName = Replace(safeName, "?", "-") safeName = Replace(safeName, """", "-") safeName = Replace(safeName, "<", "-") safeName = Replace(safeName, ">", "-") safeName = Replace(safeName, "|", "-") pdfPath = folderPath & "\" & safeName & ".pdf" wsReport.ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:=pdfPath, _ Quality:=xlQualityMinimum, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False End If Next i MsgBox "تم حفظ جميع ملفات PDF للمديرين والوكلاء في:" & vbCrLf & folderPath, vbInformation wsReport.Protect password:="0" Application.ScreenUpdating = True Application.EnableEvents = True End Sub الملف طباعة وظائف محددة.xlsm
    5 points
  43. إضافة للاستاذ كمال تفضل ملف عملي طرح تاريخين.xlsx
    4 points
  44. وعليكم السلام-تفضل طالما انك لم تقم برفع ملف موضح به المطلوب بكل دقة ,وفى طلبك وبالمعادلات العادية لا يوجد أفضل من معادلة DATEDIF
    4 points
  45. السلام عليكم بمناسبة هذه الايام المباركة ، حبيت اشارك بهذه الجزئية المستقطعة من احد برامجي 🙂 في بعض الاحيان ما يقدر المبرمج من سد جميع ثغرات البرنامج لمنع المستخدم من عمل خطأ في ادخال البيانات ، فتكون نفس المعلومة مكتوبة بعدة طرق ، مثلا: . ومثال من جدول آخر . عادة يُطلب من المبرمج تنظيف هذه البيانات ، جدول جدول / حقل حقل / معلومة معلومة ، والمشكلة في هذا العمل هو معرفة الحقول المطلوب تنظيفها ، ثم معرفة البيانات الخطأ والبيانات الصحيحة (لإستبدالها) ، وهذا العمل يتطلب وجود المبرمج والمستخدم لمعرفته بالبيانات الخطأ والصحيحة. وبعد هذا التنظيف ، وبعد مرور مدة ، يجب تكرار العملية طبيعتي ، لما اشوف فيه تكرار لعمل معين ، اقوم ببرمجته ، وهذا اللي حصل في هذا المشروع 🙂 الان المستخدم (طبعا المسؤول) هو الذي يقوم بهذا العمل من خلال نموذج. انت محتاج الى نقل هذه الكائنات الى قاعدة بياناتك للقيام بالعمل ، ثم تشغيل النموذج frm_Clean_Data . 1. عند دخول النموذج ، تجد اسماء جميع الجداول في حقل اسم الجدول ، وبعد ان تختار اسم الجدول ، تجد اسماء جميع حقول الجدول في حقل اسم الحقل ، ثم تختار الحقل المطلوب تنظيف بياناته ، فتأتيك البيانات بدون تكرار . . 2. يجب عمل تصفية في اختيار "القيمة الحالية" للبيانات المطلوب تنظيفها ، وتختار "القيمة الجديدة" لها ، . 3. ثم تنقر على زر "جميع الاسماء المختار" ، فتاتيك رسالة تأكيد لعملية التنظيف التي سيقوم بها البرنامج ، وعند التأكد من هذا العمل والنقر على "نعم" ، فسيقوم البرنامج بعمل التغييرات المطلوبة ، ولا يوجد تراجع . 3. فنحصل على هذه النتيجة . 4. ونستمر بإختيار القيمة التالية من هذا الحقل ، او اختيار جدول/حقل آخر ، التغيير لقيمة الحقل كاملة وليست لجزء من الحقل يجب اعطاء هذا البرنامج للمسؤول ، ويجب ان يعرف عواقب العمل ، وقبل كل شيئ يجب اخذ نسخة من قاعدة البيانات Clean_Data.zip
    4 points
  46. اعرض الملف UiMsg Framework - نظام رسائل احترافي استبدال صندوق الرسائل فى الاكسس بنموذج رسائل احترافى بسطر واحد بس كل حاجة جاهزة مش محتاج تفكر في تصميم نموذج مش محتاج نموذج الرسائل يكون موجود اساسا مش محتاج تكتب كود كبير بعد كده لصندوق الرسائل استدعي الدالة وخلاص والنظام يعمل كل شئ النظام يقدم 4 أنواع رسائل جاهزة : { معلومة - نجاح - تحذير - خطأ } كل نوع بتصميمه ولونه وأيقونته معلومة : من خلال : UiInfo اللون : أزرق نجاح : من خلال : UiSuccess اللون : أخضر تحذير : من خلال : UiWarning اللون : برتقالي خطأ : من خلال : UiError اللون : أحمر 3 أنواع إدخال : { نص حر - رقم مع تحقق تلقائي - اختيار من قائمة } نص حر : من خلال : UiInput رقم مع تحقق تلقائي: من خلال : UiInputNum يرفض الحروف بدون ما تكتب سطر واحد اختيار من قائمة : من خلال : UiPick قرارات متعددة : { تأكيد نعم/لا - ثلاثة خيارات أزرار مخصصة بأسماء ترجعها النتيجة مباشرة } نعم / لا : من خلال : BlnUiConfirm يرجع True أو False مباشرة ثلاثة خيارات : من خلال :IntUiConfirm3 يرجع 1 أو 2 أو 0 أزرار مخصصة : من خلال :UiCustom يرجع اسم الزر اللي اتضغط مش رقمه دعم كامل للعربية والإنجليزية : { اتجاه النص RTL/LTR تلقائي - الأزرار والعناوين بالغتين من خلال معامل UiLangEn يكفي لتبديل كل شيء } أضف UiLangEn كآخر parameter وكل شيء يتبدل : اتجاه النص - الأزرار - العناوين الافتراضية ثيم موحد قابل للتخصيص : { ألوان الهيدر والأيقونات والأزرار كلها من UiTheme غير لون الـ Accent في مكان واحد وكل الرسائل تتغير } كل ألوان النظام مجمعة في UiTheme مناسب لأي مشروع قاعدة بيانات صغير أو كبير - عربي أو إنجليزي - مبتدئ أو محترف يبني نفسه : لا تثبيت ولا إعداد كل إجراء أو وظيفة واضحة الاسم - واضحة الـ return - واضحة الاستخدام اسم الوحدة النمطية : modUIMsgFramework كود الوحدة النمطية.. Option Explicit Option Compare Database Public Enum UiIcon UiIconInfo = 0 UiIconSuccess = 1 UiIconWarning = 2 UiIconError = 3 UiIconQuestion = 4 End Enum Public Enum UiMode UiModeAlert = 0 UiModeInput = 1 UiModeNumber = 2 UiModeList = 3 End Enum Public Enum UiLang UiLangAr = 0 UiLangEn = 1 End Enum Public Type UiParams strMessage As String strTitle As String strButtons As String strDefault As String strList As String strDetails As String strResult As String enuIcon As UiIcon enuMode As UiMode enuLang As UiLang End Type Public Type UiTheme lngAccent As Long lngHeader As Long lngBg As Long lngText As Long lngMuted As Long lngBorder As Long lngSuccess As Long lngWarning As Long lngError As Long lngInfo As Long lngQuestion As Long End Type Private Const STRFORMNAME As String = "frmUiMsg" Private Const STRMODNAME As String = "modUICore" Private Const MAX_BUTTONS As Integer = 5 Private Const FRM_W As Long = 9000 Private m_typParams As UiParams Public Function TypDefaultTheme() As UiTheme Dim typT As UiTheme typT.lngAccent = RGB(0, 120, 212) typT.lngHeader = RGB(32, 32, 38) typT.lngBg = RGB(245, 246, 250) typT.lngText = RGB(30, 30, 35) typT.lngMuted = RGB(120, 120, 130) typT.lngBorder = RGB(210, 212, 220) typT.lngSuccess = RGB(16, 124, 16) typT.lngWarning = RGB(200, 100, 0) typT.lngError = RGB(196, 43, 28) typT.lngInfo = RGB(0, 120, 212) typT.lngQuestion = RGB(104, 33, 122) TypDefaultTheme = typT End Function Private Function BlnFormExists(ByVal strName As String) As Boolean On Error Resume Next Dim objFrm As Object Set objFrm = CurrentProject.AllForms(strName) BlnFormExists = Not (objFrm Is Nothing) Set objFrm = Nothing On Error GoTo 0 End Function Private Sub LogError(ByVal strProc As String, _ ByVal lngNum As Long, _ ByVal strDesc As String) Debug.Print "[" & STRMODNAME & "." & strProc & "] " & _ "Err " & lngNum & ": " & strDesc & _ " @ " & Now() End Sub Public Function TypGetParams() As UiParams TypGetParams = m_typParams End Function Public Sub SetResult(ByVal strResult As String) m_typParams.strResult = strResult End Sub Private Sub ResetParams() Dim typEmpty As UiParams m_typParams = typEmpty End Sub Private Function StrDefaultTitle(ByVal enuIcon As UiIcon, _ ByVal enuLang As UiLang) As String If enuLang = UiLangAr Then Select Case enuIcon Case UiIconSuccess: StrDefaultTitle = "تم بنجاح" Case UiIconWarning: StrDefaultTitle = "تحذير" Case UiIconError: StrDefaultTitle = "خطأ" Case UiIconQuestion: StrDefaultTitle = "تأكيد" Case Else: StrDefaultTitle = "معلومة" End Select Else Select Case enuIcon Case UiIconSuccess: StrDefaultTitle = "Success" Case UiIconWarning: StrDefaultTitle = "Warning" Case UiIconError: StrDefaultTitle = "Error" Case UiIconQuestion: StrDefaultTitle = "Confirm" Case Else: StrDefaultTitle = "Information" End Select End If End Function Private Function StrValidateButtons(ByVal strBtns As String) As String Dim arrB() As String Dim intCnt As Integer Dim intI As Integer Dim strOut As String arrB = Split(strBtns, ",") intCnt = UBound(arrB) + 1 If intCnt > MAX_BUTTONS Then LogError "StrValidateButtons", 0, _ "تجاوز الحد الأقصى للأزرار (" & intCnt & "). سيتم اقتصارها على " & MAX_BUTTONS intCnt = MAX_BUTTONS End If For intI = 0 To intCnt - 1 If Len(strOut) > 0 Then strOut = strOut & "," strOut = strOut & Trim(arrB(intI)) Next intI StrValidateButtons = strOut End Function Private Function BlnBuildMsgForm() As Boolean On Error GoTo ErrHandler Dim typT As UiTheme Dim objFrm As Object Dim objCtl As Object Dim strTemp As String Dim intI As Integer Dim lngLeft As Long typT = TypDefaultTheme() Const HDR_H As Long = 900 Const ICON_L As Long = 200 Const ICON_T As Long = 150 Const ICON_W As Long = 600 Const ICON_H As Long = 600 Const TITLE_L As Long = 900 Const TITLE_T As Long = 200 Const TITLE_W As Long = 7800 Const TITLE_H As Long = 500 Const MSG_L As Long = 300 Const MSG_T As Long = 1050 Const MSG_W As Long = 8400 Const MSG_H As Long = 1400 Const DET_L As Long = 300 Const DET_T As Long = 2500 Const DET_W As Long = 8400 Const DET_H As Long = 700 Const INP_L As Long = 300 Const INP_T As Long = 3300 Const INP_W As Long = 8400 Const INP_H As Long = 450 Const DIV_T As Long = 4050 Const BTN_T As Long = 4250 Const BTN_W As Long = 1550 Const BTN_H As Long = 550 Const FRM_H As Long = 5000 Set objFrm = CreateForm strTemp = objFrm.Name With objFrm .Caption = "" .ScrollBars = 0 .RecordSelectors = False .NavigationButtons = False .DividingLines = False .BorderStyle = 1 .AutoCenter = True .PopUp = True .Modal = True .Width = FRM_W .Section(0).Height = FRM_H .Section(0).BackColor = typT.lngBg End With Set objCtl = CreateControl(strTemp, acRectangle, acDetail) With objCtl .Name = "recHeader": .Left = 0: .Top = 0 .Width = FRM_W: .Height = HDR_H .BackColor = typT.lngHeader: .BackStyle = 1 .BorderStyle = 0: .SpecialEffect = 0 End With Set objCtl = CreateControl(strTemp, acRectangle, acDetail) With objCtl .Name = "recIcon": .Left = ICON_L: .Top = ICON_T .Width = ICON_W: .Height = ICON_H .BackColor = typT.lngInfo: .BackStyle = 1 .BorderStyle = 0: .SpecialEffect = 0 End With Set objCtl = CreateControl(strTemp, acLabel, acDetail) With objCtl .Name = "lblIcon": .Caption = "i" .Left = ICON_L: .Top = ICON_T .Width = ICON_W: .Height = ICON_H .FontSize = 20: .FontBold = True .ForeColor = vbWhite: .BackStyle = 0: .TextAlign = 2 End With Set objCtl = CreateControl(strTemp, acLabel, acDetail) With objCtl .Name = "lblTitle": .Caption = "" .Left = TITLE_L: .Top = TITLE_T .Width = TITLE_W: .Height = TITLE_H .FontSize = 14: .FontBold = True .ForeColor = vbWhite: .BackStyle = 0: .TextAlign = 1 End With Set objCtl = CreateControl(strTemp, acLabel, acDetail) With objCtl .Name = "lblMessage": .Caption = "" .Left = MSG_L: .Top = MSG_T .Width = MSG_W: .Height = MSG_H .FontSize = 11: .ForeColor = typT.lngText .BackStyle = 0: .TextAlign = 1 End With Set objCtl = CreateControl(strTemp, acLabel, acDetail) With objCtl .Name = "lblDetails": .Caption = "" .Left = DET_L: .Top = DET_T .Width = DET_W: .Height = DET_H .FontSize = 9: .ForeColor = typT.lngMuted .BackStyle = 0: .Visible = False End With Set objCtl = CreateControl(strTemp, acTextBox, acDetail) With objCtl .Name = "txtInput" .Left = INP_L: .Top = INP_T .Width = INP_W: .Height = INP_H .FontSize = 11 .BorderColor = typT.lngBorder: .BackColor = vbWhite .Visible = False End With Set objCtl = CreateControl(strTemp, acComboBox, acDetail) With objCtl .Name = "cboList" .Left = INP_L: .Top = INP_T .Width = INP_W: .Height = INP_H .FontSize = 11 .BorderColor = typT.lngBorder: .BackColor = vbWhite .RowSourceType = "Value List" .LimitToList = True: .AllowValueListEdits = False .Visible = False End With Set objCtl = CreateControl(strTemp, acLine, acDetail) With objCtl .Name = "linDivider": .Left = 0: .Top = DIV_T .Width = FRM_W: .Height = 0 .BorderColor = typT.lngBorder: .BorderWidth = 1 End With For intI = 1 To MAX_BUTTONS lngLeft = 200 + ((intI - 1) * 1760) Set objCtl = CreateControl(strTemp, acCommandButton, acDetail) With objCtl .Name = "btn" & intI: .Caption = "btn" & intI .Left = lngLeft: .Top = BTN_T .Width = BTN_W: .Height = BTN_H .FontSize = 10: .FontBold = True .BackColor = typT.lngAccent: .ForeColor = vbWhite .BorderStyle = 0: .Visible = False .OnClick = "=ProcBtnClick(" & intI & ")" End With Next intI DoCmd.Save acForm, strTemp DoCmd.Close acForm, strTemp, acSaveYes DoCmd.Rename STRFORMNAME, acForm, strTemp BlnBuildMsgForm = True Set objCtl = Nothing: Set objFrm = Nothing Exit Function ErrHandler: LogError "BlnBuildMsgForm", Err.Number, Err.Description BlnBuildMsgForm = False Set objCtl = Nothing: Set objFrm = Nothing End Function Private Function BlnInjectMsgCode() As Boolean On Error GoTo ErrHandler Dim objMdl As Object Dim strCode As String Dim strOldCode As String DoCmd.OpenForm STRFORMNAME, acDesign, , , , acHidden Set objMdl = Forms(STRFORMNAME).Module If objMdl.CountOfLines > 0 Then strOldCode = objMdl.Lines(1, objMdl.CountOfLines) objMdl.DeleteLines 1, objMdl.CountOfLines End If strCode = StrFormCodeHeader() & _ StrFormCodeApplyIcon() & _ StrFormCodeApplyLang() & _ StrFormCodeSetupBtns() & _ StrFormCodeFillList() & _ StrFormCodeOpen() & _ StrFormCodeBtn() & _ StrFormCodeUnload() objMdl.AddFromString strCode If objMdl.CountOfLines < 10 Then If Len(strOldCode) > 0 Then objMdl.DeleteLines 1, objMdl.CountOfLines objMdl.AddFromString strOldCode End If LogError "BlnInjectMsgCode", 0, "AddFromString أنتج كوداً فارغاً، تم استعادة الكود القديم" BlnInjectMsgCode = False GoTo Cleanup End If DoCmd.Save acForm, STRFORMNAME DoCmd.Close acForm, STRFORMNAME, acSaveYes BlnInjectMsgCode = True Cleanup: Set objMdl = Nothing Exit Function ErrHandler: LogError "BlnInjectMsgCode", Err.Number, Err.Description BlnInjectMsgCode = False Set objMdl = Nothing End Function Private Function StrFormCodeHeader() As String Dim s As String s = "Option Explicit" & vbCrLf s = s & "Option Compare Database" & vbCrLf & vbCrLf s = s & "Private mintMode As Integer" & vbCrLf s = s & "Private mintLang As Integer" & vbCrLf & vbCrLf StrFormCodeHeader = s End Function Private Function StrFormCodeApplyIcon() As String Dim s As String s = "Private Sub ProcApplyIcon(ByVal intIcon As Integer)" & vbCrLf s = s & " Select Case intIcon" & vbCrLf s = s & " Case 1" & vbCrLf s = s & " Me.recHeader.BackColor = RGB(16,124,16)" & vbCrLf s = s & " Me.recIcon.BackColor = RGB(16,124,16)" & vbCrLf s = s & " Me.lblIcon.Caption = Chr(252)" & vbCrLf s = s & " Me.lblIcon.FontName = ""Wingdings""" & vbCrLf s = s & " Case 2" & vbCrLf s = s & " Me.recHeader.BackColor = RGB(200,100,0)" & vbCrLf s = s & " Me.recIcon.BackColor = RGB(200,100,0)" & vbCrLf s = s & " Me.lblIcon.Caption = Chr(56)" & vbCrLf s = s & " Me.lblIcon.FontName = ""Wingdings""" & vbCrLf s = s & " Case 3" & vbCrLf s = s & " Me.recHeader.BackColor = RGB(196,43,28)" & vbCrLf s = s & " Me.recIcon.BackColor = RGB(196,43,28)" & vbCrLf s = s & " Me.lblIcon.Caption = Chr(251)" & vbCrLf s = s & " Me.lblIcon.FontName = ""Wingdings""" & vbCrLf s = s & " Case 4" & vbCrLf s = s & " Me.recHeader.BackColor = RGB(104,33,122)" & vbCrLf s = s & " Me.recIcon.BackColor = RGB(104,33,122)" & vbCrLf s = s & " Me.lblIcon.Caption = Chr(63)" & vbCrLf s = s & " Me.lblIcon.FontName = ""Wingdings""" & vbCrLf s = s & " Case Else" & vbCrLf s = s & " Me.recHeader.BackColor = RGB(0,120,212)" & vbCrLf s = s & " Me.recIcon.BackColor = RGB(0,120,212)" & vbCrLf s = s & " Me.lblIcon.Caption = Chr(105)" & vbCrLf s = s & " Me.lblIcon.FontName = ""Arial""" & vbCrLf s = s & " End Select" & vbCrLf s = s & "End Sub" & vbCrLf & vbCrLf StrFormCodeApplyIcon = s End Function Private Function StrFormCodeApplyLang() As String Dim s As String s = "Private Sub ProcApplyLang(ByVal intLang As Integer)" & vbCrLf s = s & " Dim intAlign As Integer" & vbCrLf s = s & " intAlign = IIf(intLang = 0, 3, 1)" & vbCrLf s = s & " Me.lblTitle.TextAlign = intAlign" & vbCrLf s = s & " Me.lblMessage.TextAlign = intAlign" & vbCrLf s = s & " Me.lblDetails.TextAlign = intAlign" & vbCrLf s = s & " Me.txtInput.TextAlign = intAlign" & vbCrLf s = s & " Me.cboList.TextAlign = intAlign" & vbCrLf s = s & "End Sub" & vbCrLf & vbCrLf StrFormCodeApplyLang = s End Function Private Function StrFormCodeSetupBtns() As String Dim s As String s = "Private Sub ProcSetupBtns(ByVal strBtns As String, ByVal intLang As Integer)" & vbCrLf s = s & " Dim arrBtns() As String" & vbCrLf s = s & " Dim intTotal As Integer" & vbCrLf s = s & " Dim intI As Integer" & vbCrLf s = s & " Dim lngBtnW As Long" & vbCrLf s = s & " Dim lngBtnH As Long" & vbCrLf s = s & " Dim lngGap As Long" & vbCrLf s = s & " Dim lngTotalW As Long" & vbCrLf s = s & " Dim lngStartX As Long" & vbCrLf s = s & " Dim blnIsRtl As Boolean" & vbCrLf s = s & " arrBtns = Split(strBtns, "","")" & vbCrLf s = s & " intTotal = UBound(arrBtns) + 1" & vbCrLf s = s & " If intTotal > 5 Then intTotal = 5" & vbCrLf s = s & " blnIsRtl = (intLang = 0)" & vbCrLf s = s & " lngBtnW = 1550" & vbCrLf s = s & " lngBtnH = 550" & vbCrLf s = s & " lngGap = 200" & vbCrLf s = s & " lngTotalW = (intTotal * lngBtnW) + ((intTotal - 1) * lngGap)" & vbCrLf s = s & " lngStartX = (Me.Width - lngTotalW) \ 2" & vbCrLf s = s & " For intI = 1 To 5" & vbCrLf s = s & " Me(""btn"" & intI).Visible = False" & vbCrLf s = s & " Next intI" & vbCrLf s = s & " For intI = 1 To intTotal" & vbCrLf s = s & " With Me(""btn"" & intI)" & vbCrLf s = s & " .Caption = Trim(arrBtns(intI - 1))" & vbCrLf s = s & " If blnIsRtl Then" & vbCrLf s = s & " .Left = lngStartX + ((intTotal - intI) * (lngBtnW + lngGap))" & vbCrLf s = s & " Else" & vbCrLf s = s & " .Left = lngStartX + ((intI - 1) * (lngBtnW + lngGap))" & vbCrLf s = s & " End If" & vbCrLf s = s & " .Top = 4250: .Width = lngBtnW: .Height = lngBtnH" & vbCrLf s = s & " .Visible = True" & vbCrLf s = s & " End With" & vbCrLf s = s & " Next intI" & vbCrLf s = s & "End Sub" & vbCrLf & vbCrLf StrFormCodeSetupBtns = s End Function Private Function StrFormCodeFillList() As String Dim s As String s = "Private Sub ProcFillList(ByVal strItems As String, ByVal strDefault As String)" & vbCrLf s = s & " Dim arrItems() As String" & vbCrLf s = s & " Dim strSource As String" & vbCrLf s = s & " Dim intI As Integer" & vbCrLf s = s & " arrItems = Split(strItems, "","")" & vbCrLf s = s & " For intI = 0 To UBound(arrItems)" & vbCrLf s = s & " strSource = strSource & Trim(arrItems(intI)) & "";""" & vbCrLf s = s & " Next intI" & vbCrLf s = s & " Me.cboList.RowSource = strSource" & vbCrLf s = s & " If Len(Trim(strDefault)) > 0 Then" & vbCrLf s = s & " Me.cboList.Value = strDefault" & vbCrLf s = s & " ElseIf UBound(arrItems) >= 0 Then" & vbCrLf s = s & " Me.cboList.Value = Trim(arrItems(0))" & vbCrLf s = s & " End If" & vbCrLf s = s & "End Sub" & vbCrLf & vbCrLf StrFormCodeFillList = s End Function Private Function StrFormCodeOpen() As String Dim s As String s = "Private Sub Form_Open(Cancel As Integer)" & vbCrLf s = s & " On Error GoTo ErrHandler" & vbCrLf s = s & " Dim typP As UiParams" & vbCrLf s = s & " typP = TypGetParams()" & vbCrLf s = s & " mintMode = CInt(typP.enuMode)" & vbCrLf s = s & " mintLang = CInt(typP.enuLang)" & vbCrLf s = s & " Me.Caption = typP.strTitle" & vbCrLf s = s & " Me.lblTitle.Caption = typP.strTitle" & vbCrLf s = s & " Me.lblMessage.Caption = typP.strMessage" & vbCrLf s = s & " Me.lblDetails.Visible = (Len(Trim(typP.strDetails)) > 0)" & vbCrLf s = s & " If Me.lblDetails.Visible Then Me.lblDetails.Caption = typP.strDetails" & vbCrLf s = s & " ProcApplyIcon CInt(typP.enuIcon)" & vbCrLf s = s & " ProcApplyLang mintLang" & vbCrLf s = s & " ProcSetupBtns typP.strButtons, mintLang" & vbCrLf s = s & " Me.txtInput.Visible = (mintMode = 1 Or mintMode = 2)" & vbCrLf s = s & " Me.cboList.Visible = (mintMode = 3)" & vbCrLf s = s & " If mintMode = 1 Or mintMode = 2 Then" & vbCrLf s = s & " Me.txtInput.Value = typP.strDefault" & vbCrLf s = s & " Me.txtInput.SetFocus" & vbCrLf s = s & " End If" & vbCrLf s = s & " If mintMode = 3 Then" & vbCrLf s = s & " ProcFillList typP.strList, typP.strDefault" & vbCrLf s = s & " Me.cboList.SetFocus" & vbCrLf s = s & " End If" & vbCrLf s = s & " Exit Sub" & vbCrLf s = s & "ErrHandler:" & vbCrLf s = s & " Debug.Print ""Form_Open Err: "" & Err.Number & "" - "" & Err.Description" & vbCrLf s = s & " DoCmd.Close acForm, Me.Name" & vbCrLf s = s & "End Sub" & vbCrLf & vbCrLf StrFormCodeOpen = s End Function Private Function StrFormCodeBtn() As String Dim s As String s = "Public Function ProcBtnClick(ByVal intNum As Integer)" & vbCrLf s = s & " On Error GoTo ErrHandler" & vbCrLf s = s & " Dim strResult As String" & vbCrLf s = s & " Dim strWarn As String" & vbCrLf s = s & " Select Case mintMode" & vbCrLf s = s & " Case 1" & vbCrLf s = s & " If intNum = 1 Then" & vbCrLf s = s & " strResult = Nz(Me.txtInput.Value, """")" & vbCrLf s = s & " Else" & vbCrLf s = s & " strResult = ""__CANCEL__""" & vbCrLf s = s & " End If" & vbCrLf s = s & " Case 2" & vbCrLf s = s & " If intNum = 1 Then" & vbCrLf s = s & " If Len(Nz(Me.txtInput.Value, """")) > 0 Then" & vbCrLf s = s & " If Not IsNumeric(Me.txtInput.Value) Then" & vbCrLf s = s & " strWarn = IIf(mintLang = 0, ""أدخل رقماً صحيحاً"", ""Enter a valid number"")" & vbCrLf s = s & " MsgBox strWarn, vbExclamation" & vbCrLf s = s & " Me.txtInput.SetFocus" & vbCrLf s = s & " Exit Function" & vbCrLf s = s & " End If" & vbCrLf s = s & " End If" & vbCrLf s = s & " strResult = Nz(Me.txtInput.Value, """")" & vbCrLf s = s & " Else" & vbCrLf s = s & " strResult = ""__CANCEL__""" & vbCrLf s = s & " End If" & vbCrLf s = s & " Case 3" & vbCrLf s = s & " If intNum = 1 Then" & vbCrLf s = s & " strResult = Nz(Me.cboList.Value, """")" & vbCrLf s = s & " Else" & vbCrLf s = s & " strResult = ""__CANCEL__""" & vbCrLf s = s & " End If" & vbCrLf s = s & " Case Else" & vbCrLf s = s & " strResult = Me(""btn"" & intNum).Caption" & vbCrLf s = s & " End Select" & vbCrLf s = s & " SetResult strResult" & vbCrLf s = s & " DoCmd.Close acForm, Me.Name" & vbCrLf s = s & " Exit Function" & vbCrLf s = s & "ErrHandler:" & vbCrLf s = s & " Debug.Print ""ProcBtnClick Err: "" & Err.Number & "" - "" & Err.Description" & vbCrLf s = s & "End Function" & vbCrLf & vbCrLf StrFormCodeBtn = s End Function Private Function StrFormCodeUnload() As String Dim s As String s = "Private Sub Form_Unload(Cancel As Integer)" & vbCrLf s = s & " Dim typP As UiParams" & vbCrLf s = s & " typP = TypGetParams()" & vbCrLf s = s & " If Len(Nz(typP.strResult, """")) = 0 Then" & vbCrLf s = s & " SetResult ""__CANCEL__""" & vbCrLf s = s & " End If" & vbCrLf s = s & "End Sub" & vbCrLf StrFormCodeUnload = s End Function Private Function BlnEnsureForm() As Boolean On Error GoTo ErrHandler If BlnFormExists(STRFORMNAME) Then BlnEnsureForm = True Exit Function End If If Not BlnBuildMsgForm() Then LogError "BlnEnsureForm", 0, "BlnBuildMsgForm failed" Exit Function End If If Not BlnInjectMsgCode() Then LogError "BlnEnsureForm", 0, "BlnInjectMsgCode failed" Exit Function End If BlnEnsureForm = True Exit Function ErrHandler: LogError "BlnEnsureForm", Err.Number, Err.Description BlnEnsureForm = False End Function Private Function StrShowMsg(ByVal strMsg As String, _ ByVal enuIcon As UiIcon, _ ByVal strBtns As String, _ ByVal strTitle As String, _ ByVal enuMode As UiMode, _ ByVal strDef As String, _ ByVal strList As String, _ ByVal strDet As String, _ ByVal enuLang As UiLang) As String On Error GoTo ErrHandler If Not BlnEnsureForm() Then LogError "StrShowMsg", 0, "EnsureForm failed" StrShowMsg = "__CANCEL__" Exit Function End If If Len(Trim(strTitle)) = 0 Then strTitle = StrDefaultTitle(enuIcon, enuLang) End If ResetParams With m_typParams .strMessage = strMsg .strTitle = strTitle .strButtons = StrValidateButtons(strBtns) .enuIcon = enuIcon .enuMode = enuMode .strDefault = strDef .strList = strList .strDetails = strDet .enuLang = enuLang .strResult = "" End With DoCmd.OpenForm STRFORMNAME, acNormal, , , , acDialog StrShowMsg = m_typParams.strResult If Len(StrShowMsg) = 0 Then StrShowMsg = "__CANCEL__" ResetParams Exit Function ErrHandler: LogError "StrShowMsg", Err.Number, Err.Description ResetParams StrShowMsg = "__CANCEL__" End Function Public Sub UiInfo(ByVal strMsg As String, _ Optional ByVal strTitle As String = "", _ Optional ByVal enuLang As UiLang = UiLangAr) Dim strBtns As String strBtns = IIf(enuLang = UiLangAr, "موافق", "OK") StrShowMsg strMsg, UiIconInfo, strBtns, strTitle, UiModeAlert, "", "", "", enuLang End Sub Public Sub UiSuccess(ByVal strMsg As String, _ Optional ByVal strTitle As String = "", _ Optional ByVal enuLang As UiLang = UiLangAr) Dim strBtns As String strBtns = IIf(enuLang = UiLangAr, "موافق", "OK") StrShowMsg strMsg, UiIconSuccess, strBtns, strTitle, UiModeAlert, "", "", "", enuLang End Sub Public Sub UiWarning(ByVal strMsg As String, _ Optional ByVal strTitle As String = "", _ Optional ByVal enuLang As UiLang = UiLangAr) Dim strBtns As String strBtns = IIf(enuLang = UiLangAr, "موافق", "OK") StrShowMsg strMsg, UiIconWarning, strBtns, strTitle, UiModeAlert, "", "", "", enuLang End Sub Public Sub UiError(ByVal strMsg As String, _ Optional ByVal strTitle As String = "", _ Optional ByVal strDetails As String = "", _ Optional ByVal enuLang As UiLang = UiLangAr) Dim strBtns As String strBtns = IIf(enuLang = UiLangAr, "موافق", "OK") StrShowMsg strMsg, UiIconError, strBtns, strTitle, UiModeAlert, "", "", strDetails, enuLang End Sub Public Function BlnUiConfirm(ByVal strMsg As String, _ Optional ByVal strTitle As String = "", _ Optional ByVal enuLang As UiLang = UiLangAr) As Boolean Dim strBtns As String Dim strYes As String Dim strResult As String strBtns = IIf(enuLang = UiLangAr, "نعم,لا", "Yes,No") strYes = IIf(enuLang = UiLangAr, "نعم", "Yes") strResult = StrShowMsg(strMsg, UiIconQuestion, strBtns, strTitle, UiModeAlert, "", "", "", enuLang) BlnUiConfirm = (strResult = strYes) End Function Public Function IntUiConfirm3(ByVal strMsg As String, _ Optional ByVal strTitle As String = "", _ Optional ByVal enuLang As UiLang = UiLangAr) As Integer Dim strBtns As String Dim strYes As String Dim strNo As String Dim strResult As String strBtns = IIf(enuLang = UiLangAr, "نعم,لا,إلغاء", "Yes,No,Cancel") strYes = IIf(enuLang = UiLangAr, "نعم", "Yes") strNo = IIf(enuLang = UiLangAr, "لا", "No") strResult = StrShowMsg(strMsg, UiIconQuestion, strBtns, strTitle, UiModeAlert, "", "", "", enuLang) Select Case strResult Case strYes: IntUiConfirm3 = 1 Case strNo: IntUiConfirm3 = 2 Case Else: IntUiConfirm3 = 0 End Select End Function Public Function UiInput(ByVal strMsg As String, _ Optional ByVal strTitle As String = "", _ Optional ByVal strDefault As String = "", _ Optional ByVal enuLang As UiLang = UiLangAr) As String Dim strBtns As String Dim strResult As String strBtns = IIf(enuLang = UiLangAr, "موافق,إلغاء", "OK,Cancel") strResult = StrShowMsg(strMsg, UiIconInfo, strBtns, strTitle, UiModeInput, strDefault, "", "", enuLang) UiInput = IIf(strResult = "__CANCEL__", "", strResult) End Function Public Function UiInputNum(ByVal strMsg As String, _ Optional ByVal strTitle As String = "", _ Optional ByVal strDefault As String = "", _ Optional ByVal enuLang As UiLang = UiLangAr) As String Dim strBtns As String Dim strResult As String strBtns = IIf(enuLang = UiLangAr, "موافق,إلغاء", "OK,Cancel") strResult = StrShowMsg(strMsg, UiIconInfo, strBtns, strTitle, UiModeNumber, strDefault, "", "", enuLang) Select Case strResult Case "__CANCEL__", "": UiInputNum = "" Case Else UiInputNum = IIf(IsNumeric(strResult), strResult, "") End Select End Function Public Function UiPick(ByVal strMsg As String, _ ByVal strItems As String, _ Optional ByVal strTitle As String = "", _ Optional ByVal strDefault As String = "", _ Optional ByVal enuLang As UiLang = UiLangAr) As String Dim strBtns As String Dim strResult As String strBtns = IIf(enuLang = UiLangAr, "موافق,إلغاء", "OK,Cancel") strResult = StrShowMsg(strMsg, UiIconQuestion, strBtns, strTitle, UiModeList, strDefault, strItems, "", enuLang) UiPick = IIf(strResult = "__CANCEL__", "", strResult) End Function Public Function UiCustom(ByVal strMsg As String, _ ByVal strBtns As String, _ Optional ByVal enuIcon As UiIcon = UiIconQuestion, _ Optional ByVal strTitle As String = "", _ Optional ByVal enuLang As UiLang = UiLangAr) As String Dim strResult As String strResult = StrShowMsg(strMsg, enuIcon, strBtns, strTitle, UiModeAlert, "", "", "", enuLang) UiCustom = IIf(strResult = "__CANCEL__", "", strResult) End Function ' ===================================== ' أمثلة الاستخدام ' ===================================== ' UiSuccess "تم انشاء النظام بنجاح" ' UiInfo "رسالة معلومة" ' UiWarning "تحذير: لا يمكن التراجع" ' UiError "حدث خطأ", "", "تفاصيل الخطأ" ' ' If BlnUiConfirm("هل تريد الحذف؟") Then ... ' ' Select Case IntUiConfirm3("حفظ التغييرات؟") ' Case 1: ' نعم ' Case 2: ' لا ' Case 0: ' إلغاء ' End Select ' ' Dim s As String ' s = StrUiInput("أدخل اسمك", "", "محمد") ' If Len(s) > 0 Then ... ' ' Dim n As String ' n = StrUiInputNum("أدخل العمر", "", "25") ' ' Dim pick As String ' pick = StrUiPick("اختر قسم", "مبيعات,محاسبة,مخازن,إدارة") ' ' Dim choice As String ' choice = StrUiCustom("اختر خيار", "حفظ,تجاهل,إلغاء") ' Select Case choice ' Case "حفظ": ... ' Case "تجاهل": ... ' Case "": ' أُغلق بدون اختيار ' End Select طريقة الاعداد و التشغيل : بعد اضافة الوحدة النمطية: modUIMsgFramework الى قاعدة بياناتك استدعي من أي زر أمر داخل أى نموذج أو من النافذة الفورية مباشرة UiSuccess "تم انشاء النظام بنجاح" للتجربة الفورية فى المرفق تم اضافة ما يلى : وحدة نمطية باسم : modBuildTestUI ماكرو باسم : BuildTestUI شغل الماكرو BuildTestUI على الفور هيتم عمل جدول tblEmployees يحتوى على بيانات افتراضية غير حقيقية للتجربة وهيتم عمل نموذج اختبار متكامل وفتحة بشكل مباشر صاحب الملف عسل قليل الدسم تمت الاضافه 04/29/26 الاقسام قسم الأكسيس  
    4 points
  47. السلام عليكم ضع المعادلة =SUM(C8:C12) بدل الموجودة في خلية الجمع = SUM(C8+C9+C10+C11+C12) وفي الخلية c6 اكتب المعادلة =EOMONTH(P1;0) خطأ في الجمع و نهاية الشهر.xlsx
    4 points
  48. وعليكم السلام ورحمة الله تعالى وبركاته .. أحد الكتب الإلكترونية التي شاركه أحد الأخوة سابقاً تعلم آكسيس.pdf
    4 points
×
×
  • اضف...

Important Information