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

الدكتور خضر الرجبي

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

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

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

كل منشورات العضو الدكتور خضر الرجبي

  1. السلام عليكم يوجد عندي إقتراح، وهو ما أعمله أنا شخصيا ولا استطيع بعدها الدخول إلى أشرطة الادوات وحتى بضغط زر الخيارت (زر الماوس اليمين) والطريقة هي : 1. في عملية التخصيص صمم شريط أدوات وضع فيه من الادوات ما تحتاجه في تطبيقك. 2. في بدء التشغيل قم بإلغاء جميع المفاتيح التالية ( أي الغي الصح عنها) Display Database Window Display Status Bar Allow Full Menus Allow Default Short Cuts Menus Allow Built-in Toolbars Allow Toolbar/Menubar Changes Use Access Special Keys مع الاحترام
  2. السلام عليكم لقد جئت بمشكلة معقدة فعلا ولكن لحسن حظك حلها بسيط وموجود. إذا كنت تجيد اللغة الانجليزية وبحاجة إلى الحل بسرعة فهو موجود هنا http://support.microsoft.com/default.aspx?...Product=acc2000 وسأقوم بترجمته وشرحه قريبا لأن المشكلة والحل مهمان فعلا. مع الاحترام
  3. السلام عليكم أخي المستفسر إليك إقتراح لحل المسألة المطلوبة وبالتوفيق : 1. صمم التقرير وقم بتخزينه 2. يوجد للتقرير مقاطين رئيسيين يمكن وضع المجموع بهما وهما مقطع تذييل الصفحة (Page Footer) ومقطع تذييل االتقرير ( Report Footer). 3. قم بنسخ الحقل الذي تريد حساب المجموع له وضع نسخة منه في أحد أو كلا المقطعين المذكورين أعلاه. 4. ادخل إلى خاصية الحقل الجديد الذي نسخته وغير في البيانات خاصية مصدر عنصر التحكم (Control Source) بحيث تغيرها كما يلي لنفرض اسم الحقل المراد عمل المجموع له Amount =Sum([amount]) مع الاحترام
  4. السلام عليكم 1. أخي أبا هادي، أخي أبا سليمان بارك الله فيكما على ثقتكم بي وإن شاء الله أكون عند حسن ظنكم دائما وبارك الله بكما وبالاعضاء الاخرين المشاركين في المشروع على ما تبذلونه من جهد. 2. أخي أبا سليمان لقد أخذت بإقتراحك وأفردت موضوع جديد عن windows registry أرجو أن تتطلع عليه. 3. بالنسبة للمثال عن تبديل اللغة فهو ممتاز ويمكن الاستفادة من بعض الافكار التي به بلا شك ولكني بعد أذنك أخي أبا هادي أريد أن أستخدم المنطق ( Logic) الذي صممته أنا فهو مريح وبسيط جدا وطبعا أنا لم أعمل كل شيء 100% لأني أحببت أولا أن أريك أفكار وبعد أن أخذت الضوء الاخضر منك فالآن أستطيع الابحار. 4. بالنسبة لموضوع الحذف للمدن عن طرق تتالي الحذف فأنا أؤيدك الرأي (لربما أنه من الخطأ حذفها بهذه الطريقة) ولندع المستخدم يحذف المدن بنفسه وسأقوم بإجراء التعديل المطلوب وهذا أمر بسيط. 5. بالنسبة لعملية الاضافة وباقي الطلبات ( فلك ما طلبت ) 6. لقد درست وفهمت مثال أخانا محمد طاهر بما يتعلق (Dmax) وسأستخدمه بلا شك 7. بالنسبة لطريقة البداية إنطلاقا من frmcities فلا مشكلة 8. بالنسبة لموضوع البحث فبارك الله في أخينا أبا سليمان ولن أعمل مزيدا من المفاتيح ولكن لا تنسيا أن مفاتيح البحث الفرز التي صممتها في نموذجي تلزمنا في عمليات التعديل والحذف والعرض بكل الاحول للوصول إلى السجلات المطلوبة بسرعة ولا ضرر ولا تكرار في وجودها. إن شاء الله لن أطيل الغياب ، ولا تنسيا أن إجازة العيد قد انتهت مع الاحترام
  5. السلام عليكم موضوع تسجيلات الويندوز (Windows Registry) مهم إلى درجة كبيرة بحيث أننا كلما عرفنا عنه أشياء أكثر كلما استطعنا التحكم بنظام التشغيل وتفاعله مع البرامج بشكل أفضل وأدق. أنا شخصيا لست خبيرا باستخدامات تسجيلات الويندوز ولا استخدمها في العادة، ولكني قمت بهذا البحث الصغير محاولا من خلاله إلقاء الضوء على الموضوع بطريقة مبسطة ومتجاوبا مع طلب أخي أبا سليمان الذي اقترح مشكورا قيامي بهذا البحث. وفي هذا الموضوع نتعرف على الأمور التالية: 1. طريقة الدخول والبحث التقليدية لتسجيلات الويندوز. 2. طريقة تخزين تسجيلات الويندوز في مكان آمن خوفا من العبث بها واسترجاعها في الوقت المناسب. 3. أهمية تسجيلات ويندوز. 4. مفاتيح التسجيلات العامة ومعانيها. 5. بعض الأمثلة على تسجيلات ويندوز. 6. كيفية استعراض قيم المفاتيح من Access برمجيا. 1. طريقة الدخول والبحث التقليدية لتسجيلات الويندوز. طريقة الدخول التقليدية لتسجيلات ويندوز هي من خلال الضغط على زر ابدأ (Start) وبعدها نختار (Run) ثم نكتب الأمر regedit و بعدها نضغط ok طبعا regedit هو عبارة عن برنامج تحرير خاص وهو اختصار registry editor نستطيع من خلال هذا البرنامج مشاهدة جميع تسجيلات الويندوز وتعديلها وحذفها والإضافة لها. أنصحكم ، أن لا تقوموا بعمل أي تغيير حتى إتمام قراءة البحث. 2. طريقة تخزين تسجيلات الويندوز في مكان آمن خوفا من العبث بها واسترجاعها في الوقت المناسب. قبل الشروع بأي تغيير في تسجيلات ويندوز قم بتخزين هذه التسجيلات في مكان أمن (يفضل على ديسك خارجي) أو على الأقل على Hard Disk لحاسوبك. الطريقة بسيطة من داخل Registry Editor ضغط ملف (File) ثم تصدير (Export) ثم في الصندوق الحواري الذي يظهر وفي Export Range أختار All وبعدها اكتب اسم الملف وأحدد المسار أو المكان التخزيني ثم اضغط Save ويمكن استرجاعها لاحقا باستخدام Import بدلا من Export. 3.أهمية تسجيلات ويندوز. تكمن أهمية تسجيلات الويندوز أنها تحتوي على كل التعريفات الخاصة بالجهاز وبيئة العمل وحسابات المستخدمين وتعريفات البرامج وبيئة عملها. أي أن أي تغيير فيها قد يؤدي إلى تعطل البرامج أو حسابات المستخدمين أو حتى الويندوز ويجب أن نعرف قبل تغيير أي قيمة لماذا تستخدمها وهذا بالطبع يأتي بالخبرة وفي بعض الأحيان بالتحليل الدقيق والصحيح لطبيعة التغيرات التي تحصل وإليك الأمثلة التالية: - تقوم بعض البرامج التي تعمل لفترة محدودة بإنقاص قيمة عداد يعرف في تسجيلات ويندوز لذلك البرنامج كل مرة يفتح بها ذلك البرنامج. - تسجل البرامج البيئة القياسية التي تعمل فيها عند فتحها من ألوان وأماكن تخزين خاصة بالبرنامج . 4. مفاتيح التسجيلات العامة ومعانيها. يوجد 5 مفاتيح أساسية تعرف من windows وهي : HKEY_CURRENT_USER : يحتوي على أساس تعريفات معلومات المستخدم المسجل حاليا في ويندوز، من أدلة المستخدم التخزينية، ألوان الشاشة، وأيضا تعريفات لوحة التحكم، يطلق على هذه التعريفات والمعلومات Profile المستخدم. HKEY_USERS : يحتوي على أساس التعريفات (Profiles) لجميع المستخدمين أي أن HKEY_CURRENT_USER هو جزء منها. HKEY_LOCAL_MACHINE: يحتوي على المعلومات والتعريفات الخاصة بالجهاز بغض النظر عن المستخدم أي التعريفات التي تخدم جميع المستخدمين معا. HKEY_CLASSES_ROOT : وهو جزء من HKEY_LOCAL_MACHINE\Software والذي يحتوي على معلومات ملفات النظام أي أنه بمثابة الضابط لنظام الملفات في ويندوز. HKEY_CURRENT_CONFIG : يحتوي على معلومات الأجهزة المادية Hardware التي يستخدمها وعرفة على جهاز الحاسوب. 5. بعض الأمثلة على تسجيلات ويندوز. حامي الشاشة (Screen Saver) التحكم به يكون بتغيير مكان الدليل (Path) في المفتاح HKey_Current_User\Control Panel\DeskTop SCRNSAVE.EXE تحكم يسرع استجابة الضغط المزدوج للماوس ( Mouse Double Click) وذلك في HKey_Current_User\Control Panel\Mouse DoubleClickSpeed ونعرفها حولي 500. سرعة استقبال الضغط على مفاتيح الكيبورد من خلال HKey_Current_User\Control Panel\Keyboard Keyboardspeed وندخل القيمة حولي 31. إشارة العملة وذلك من خلال HKey_Current_User\Control Panel\International scurrency وندخل الإشارة المطلوب $ أو غيرها. 6. كيفية استعراض قيم المفاتيح من Access برمجيا. من موضوع سابق تم شرحه بالتفصيل من أخوة من الأعضاء. http://www.officena.net/ib/index.php?showtopic=5295 الخلاصة: تم في هذا الموضوع إلقاء الضوء على تسجيلات الويندوز Windows Registry بشكل مبسط وتبيان كيفية قراءة قيمها برمجيا من خلال VBA. مع الاحترام
  6. السلام عليكم الاخ مناجي الهم المحترم لقد إطلعت على سؤالك وعلى برنامجك الذي ارفقته وأود أن أوضح لك مجموعة من الأمور والملاحظات التي قد (إن شاء الله ) تفيدك بشكل أو أخر وهي: 1. إن تصميم قواعد البيانات في أكسس ليس كغيره من الموضوعات أو البرامج الاخرى التي يستطيع المستخدم أن يحرز تقدما سريعا في إستخدامها والتدرج فيها بطريقة عشوائية. 2. إن المصمم لقواعد البيانات في أكسس أو أي تطبيق أخر يحتاج إلى حد أدنى من المعرفة في كيفية جمع وتنظيم البيانات ومن ثم ترابطها وخصائصها وهذا شرط أساس للنجاح في التصميم. 3. برأيي هنا تكمن مشكلتك وليس في النماذج وطريقة التنقيص من المخزون (والتي تأتي في مرحلة متقدمة) في التصميم والعمل. 4. إن أحببت استطيع مساعدتك لاحقا في تطوير قدراتك في التصميم ولكن هنا لا بد أن نرجع إلى نقطة الصفر فقد قمت بتعديل جداولك بالشكل اللازم وإليك ملاحظاتي حول المثال الذي أرفقته لك في رابط إنزال الملفات للأعضاء: http://www.officena.net/ib/index.php?showforum=58 الملاحظات: 1. ليس لكل جدول في قاعدة البيانات نضع مفتاح رئيسي في مثالك فقط لرقم الكود في جدول المخزون وليس في جدول المبيعات . ولقد أزلت لك المفتاح من جدول المبيعات حيث أن رقم الكود ( رمز البضاعة) يتكرر في المبيعات في لا يجوز أن تضعه مفتاح رئيسي. 2. بالنسبة لنوع البيانات للحقول في الجدول يجب أن تعرف بشكل يتوافق مع استخدامها الفعلي في الحياة وأنت قمت بتعريفها كلها نص وهذا خطأ أخر وقد قمت بإصلاحها جميعها 3. لا يجوز تكرار نفس حقل البيانات في أكثر من جدول مثلما فعلت أنت مع اسم الكود (اسم البضاعة) وقد حذفت لك الحقول المتكررة. 4. وقد حذفت لك من المخزون حقل رصيد أول المدة (لأن هذه المعلومة تسجل في الكمية المتوفرة) وهو الحقل الذي سميته أنت بالرصيد المتوفر وأنا قمت بتغيير تسميته إلى الكمية المتوفرة، وقمت بحذف الحقول التاريخ والاضافة وتاريخ الاضافة لأنها لا علاقة لها بكيان المخزون ( جدول المخزون) 5. كما أنك أفردت جدولا لأسم الكود ورقمه بينما هذه البيانات يمكن الحصول عليها من جدول المخزون لذا قمت بحذف الجدول الذي أسميته أنت بالاكواد . 6. إن اساسيات التعامل مع المخزن بشكله البسيط (حسب طريقتك) تحتاج إلى ثلاث جداول ولقد نسيت أنت واحد منها ( جدول المشتريات) وللتوضيح أكثر هي: المخزون: الذي يسجل فيه رمز واسم البضاعة والكمية المتوفرة وسعر التكلفة وسعر البيع وقد أبقيت لك على هذا الجدول مع تعديل أنواع البيانات وحذف بعض الحقول التي لا تلزم. المبيعات : طبعا أنت قمت بوضع تفاصيل البيع من رمز الكود ( وأسمه لا نضعه في هذا الجدول لأنه موجود في المخزون) والرمز نستخدمه للربط بين جدولي المخزون وتفاصيل المبيعات فيكون مفتاح رئيسي ( غير متكرر في المخزون) ومفهرس مع سماح التكرار في جدول تفاصيل المبيعات وعليه تتم عملية الربط . المشتريات:وتحتاج أيضا إلى بناء جدول المشتريات الذي هو يشبه تماما المبيعات مع تغيير المسميات وتركته لك لتقوم بإنشائه. 7. ثم أنك لم تتعرض لعملية ربط الجداول من خلال تحديد العلاقات ويجب ربط جدول المخزون مع كل من جدول تفاصيل المبيعات و تفاصيل المشتريات وقد قمت لك بنصف العمل والنصف الاخر تركته لك. 8. إنه من الخطأ ومن غير الممكن أحيانا أن نبدأ بأي تصميم لإستعلام أو نموذج أو تقرير قبل ضبط وفهم الامور السابقة فهما عميقا لذا حذفت لك كل النماذج التي كنت (أنت) قد أنشأتها وهي لن تعمل نهائيا بشكل صحيح لأنها مبنية على أساس خاطئ . أخي الكريم إن أحببت أن تتواصل معي في حل مشكلتك فكما ذكرت سابقا فإنه لا مانع لدي ولكن عليك أن تتبع الارشادت والملاحظات التي أقترحها وإلا فسيكون صعبا علينا التواصل مع تقديري واحترامي لجهودك المبذولة في محاولة عمل شيء فمن يحاول ويجرب أحسن من من لا يحاول ولا يجرب. كما وأود أن أنصحك بالاستعانة ببعض المواقع - وهي كثيرة - التي تتحدث وتعلم أساسيات قواعد البيانات مع الاحترام
  7. السلام عليكم أخي أبا هادي - العمل الذي كلفتني به تقريبا (95%) جاهز، أرجو اعلامي بكيفية بعثه لك حتى تتطلع عليه. 1. لقد صممت نموذجا واحدا (كما طلبت مني) للإدخال والتعديل والحذف والتصفية والبحث ولقد صممته بحيث يكون متعدد اللغات (للتطلعات المستقبلية) الان هو يبدل بين الانجليزية والعربية فقط. 2. لقد قمت بدراسة قاعدة البيانات والعلاقات دراسة متعمقة واعتقد أنها ممتازة. التعديل الوحيد الذي اضطررت إلى عمله هو إعطاء خاصية تتالي الحذف بين جدولي المدن والدول. 3. بحثت عن الموضوع المتعلق بإقتران DMAX الذي نصحتني بإستعماله وهو من عمل الاخ محمد طاهر ولكني لم أجده يحبذا لو تضع له رابطا في تعقيبك التالي. مع الاحترام
  8. السلام عليكم لك وللإخوة الاعضاء ذلك يا أبا سليمان وسأقوم بذلك في الوقت القريب إن شاء الله (على الاكثر 3 أيام). مع الاحترام
  9. السلام عليكم أخي أبا هادي، اشكرك لقبولي في المشروع - ولك ما طلبت - ولكن من أين أحصل على أخر نسخة معدلة للمشروع. مع الاحترام
  10. السلام عليكم ورحمة الله وبركاته أخي أبا هادي - مدير المشروع إخواني الاعضاء المشتركين في بناء هذا المشروع العظيم أخوكم الصغير يود (إن أمكن وإن لم يكن متأخرا) أن يشترك في هذه الصدقة الجارية إن كان الجواب ايجابيا (واتمنى أن يكون كذلك) فأرجو تكليفي بعمل ما. مع احترامي وتقديري لكم جميعا
  11. السلام عليكم أخي ابا هادي لقد سعدت جدا بتعقيباتك الرائعة وبعمل الاقتران الذي يساعد المستفسر في حل مشكلته، ولقد فرحت كثيرا عندما وجدت هذا الموضوع مثبتا (وفعلا هو يستحق التثبيت)، مع احترامي وتقدير الكبيرين لك ولملاحظاتك الرائعة التي تنم عن خبرتك الكبيرة في الموضوع. ولك تحياتي واحترامي
  12. السلام عليكم اخي ابا هادي والاخوة الاعضاء الكرام، 1. أشكرك أخي ابا هادي على وصولك إلى الحل المطلوب بطريقة رائعة. 2. لا ضرر في أن نتعب من أجل الوصول للحلول الصحيحة والرائعة وهذا الامر هو الذي يميز هذا المنتدى الرائع وليكن شعارنا في هذا المنتدى " ممنوع وجود سؤال بدون جواب رائع " وهكذا يصبح المنتدى رائعا وهاما ومفيدا ولأمثالنا ممتعا أيضا. 3. لقد اسعدني جدا التواصل معك لحل هذه المشكلة مع الاحترام والتقدير
  13. السلام عليكم جميع الاخوة الاعضاء والاخ أبا هاديا وأخير توصلت إلى الكود والطريقة التي تمكننا من الوصول إلى قيم المفاتيح في windows registry وتكمن أهمية هذه العملية في حل الكثير من المسائل المتعلقة بتعريفات الويندز مثل هذا السؤال حول التاريخ الهجري وكيفية معرفته من windows registry والحل مؤلف من خطوتين: 1. وضع الكود التالي الذي كتباه (تيري كريفت و ديف أشيس) في وحدة نمطية وتخزينة بأي اسم. '********Code Start************** 'This code was originally written by Terry Kreft ' and Dev Ashish. 'It is not to be altered or distributed, 'except as part of an application. 'You are free to use it in any application, 'provided the copyright notice is left unchanged. ' 'Code Courtesy of 'Dev Ashish & Terry Kreft ' Public Const HKEY_CLASSES_ROOT = &H80000000 Public Const HKEY_CURRENT_USER = &H80000001 Public Const HKEY_LOCAL_MACHINE = &H80000002 Public Const HKEY_USERS = &H80000003 Public Const HKEY_PERFORMANCE_DATA = &H80000004 Public Const HKEY_CURRENT_CONFIG = &H80000005 Public Const HKEY_DYN_DATA = &H80000006 Private Const STANDARD_RIGHTS_READ = &H20000 Private Const KEY_QUERY_VALUE = &H1& Private Const KEY_ENUMERATE_SUB_KEYS = &H8& Private Const KEY_NOTIFY = &H10& Private Const SYNCHRONIZE = &H100000 Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or _ KEY_QUERY_VALUE Or _ KEY_ENUMERATE_SUB_KEYS Or _ KEY_NOTIFY) And _ (Not SYNCHRONIZE)) Private Const MAXLEN = 256 Private Const ERROR_SUCCESS = &H0& Const REG_NONE = 0 Const REG_SZ = 1 Const REG_EXPAND_SZ = 2 Const REG_BINARY = 3 Const REG_DWORD = 4 Const REG_DWORD_LITTLE_ENDIAN = 4 Const REG_DWORD_BIG_ENDIAN = 5 Const REG_LINK = 6 Const REG_MULTI_SZ = 7 Const REG_RESOURCE_LIST = 8 Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type Private Declare Function apiRegOpenKeyEx Lib "advapi32.dll" _ Alias "RegOpenKeyExA" (ByVal hKey As Long, _ ByVal lpSubKey As String, ByVal ulOptions As Long, _ ByVal samDesired As Long, ByRef phkResult As Long) _ As Long Private Declare Function apiRegCloseKey Lib "advapi32.dll" _ Alias "RegCloseKey" (ByVal hKey As Long) As Long Private Declare Function apiRegQueryValueEx Lib "advapi32.dll" _ Alias "RegQueryValueExA" (ByVal hKey As Long, _ ByVal lpValueName As String, ByVal lpReserved As Long, _ ByRef lpType As Long, lpData As Any, _ ByRef lpcbData As Long) As Long Private Declare Function apiRegQueryInfoKey Lib "advapi32.dll" _ Alias "RegQueryInfoKeyA" (ByVal hKey As Long, _ ByVal lpClass As String, ByRef lpcbClass As Long, _ ByVal lpReserved As Long, ByRef lpcSubKeys As Long, _ ByRef lpcbMaxSubKeyLen As Long, _ ByRef lpcbMaxClassLen As Long, _ ByRef lpcValues As Long, _ ByRef lpcbMaxValueNameLen As Long, _ ByRef lpcbMaxValueLen As Long, _ ByRef lpcbSecurityDescriptor As Long, _ ByRef lpftLastWriteTime As FILETIME) As Long Function fReturnRegKeyValue(ByVal lngKeyToGet As Long, _ ByVal strKeyName As String, _ ByVal strValueName As String) _ As String Dim lnghKey As Long Dim strClassName As String Dim lngClassLen As Long Dim lngReserved As Long Dim lngSubKeys As Long Dim lngMaxSubKeyLen As Long Dim lngMaxClassLen As Long Dim lngValues As Long Dim lngMaxValueNameLen As Long Dim lngMaxValueLen As Long Dim lngSecurity As Long Dim ftLastWrite As FILETIME Dim lngType As Long Dim lngData As Long Dim lngTmp As Long Dim strRet As String Dim varRet As Variant Dim lngRet As Long On Error GoTo fReturnRegKeyValue_Err 'Open the key first lngTmp = apiRegOpenKeyEx(lngKeyToGet, _ strKeyName, 0&, KEY_READ, lnghKey) 'Are we ok? If Not (lngTmp = ERROR_SUCCESS) Then Err.Raise _ lngTmp + vbObjectError lngReserved = 0& strClassName = String$(MAXLEN, 0): lngClassLen = MAXLEN 'Get boundary values lngTmp = apiRegQueryInfoKey(lnghKey, strClassName, _ lngClassLen, lngReserved, lngSubKeys, lngMaxSubKeyLen, _ lngMaxClassLen, lngValues, lngMaxValueNameLen, _ lngMaxValueLen, lngSecurity, ftLastWrite) 'How we doin? If Not (lngTmp = ERROR_SUCCESS) Then Err.Raise _ lngTmp + vbObjectError 'Now grab the value for the key strRet = String$(MAXLEN - 1, 0) lngTmp = apiRegQueryValueEx(lnghKey, strValueName, _ lngReserved, lngType, ByVal strRet, lngData) Select Case lngType Case REG_SZ lngTmp = apiRegQueryValueEx(lnghKey, strValueName, _ lngReserved, lngType, ByVal strRet, lngData) varRet = Left(strRet, lngData - 1) Case REG_DWORD lngTmp = apiRegQueryValueEx(lnghKey, strValueName, _ lngReserved, lngType, lngRet, lngData) varRet = lngRet Case REG_BINARY lngTmp = apiRegQueryValueEx(lnghKey, strValueName, _ lngReserved, lngType, ByVal strRet, lngData) varRet = Left(strRet, lngData) End Select 'All quiet on the western front? If Not (lngTmp = ERROR_SUCCESS) Then Err.Raise _ lngTmp + vbObjectError fReturnRegKeyValue_Exit: fReturnRegKeyValue = varRet lngTmp = apiRegCloseKey(lnghKey) Exit Function fReturnRegKeyValue_Err: varRet = "Error: Key or Value Not Found." Resume fReturnRegKeyValue_Exit End Function '********Code End************** 2. يمكن معرفة قيمة التاريخ الهجري التي تم الشرح عنها سابقا في windows registry بالطريقة التالية : MsgBox fReturnRegKeyValue(HKEY_CURRENT_USER, _ "control Panel\International", "AddHijriDate") مع الاحترام
  14. السلام عليكم صدقت، أخي أبا هادي إن ما تبقى هو كل الموضوع بلا شك، أنا أيضا تعبت وأن أبحث عن حل لهذه المسألة ولكني توصلت إلى بوادره واتمنى أن يساعدنا أحد الاعضاء في اكمال الحل من حيث وصلنا. لقد حصلت على كل التعريفات المتعلقة بتعريفات تسجيلات ويندوز من حذف واضافة وتعديل واستعراض ولكني أجد صعوبة في استخدامها. الاقترانات والتعريفات التالية يجب وضعها في وحدة نمطية كي يتم طلبها من تعريف الاجراء لحدث معين في النموذج وهي : Enum RegHive HKEY_CLASSES_ROOT = &H80000000 HK_CR = &H80000000 HKEY_CURRENT_USER = &H80000001 HK_CU = &H80000001 HKEY_LOCAL_MACHINE = &H80000002 HK_LM = &H80000002 HKEY_USERS = &H80000003 HK_US = &H80000003 HKEY_CURRENT_CONFIG = &H80000005 HK_CC = &H80000005 HKEY_DYN_DATA = &H80000006 HK_DD = &H80000006 End Enum Enum RegType REG_SZ = 1 'Unicode nul terminated string REG_BINARY = 3 'Free form binary REG_DWORD = 4 '32-bit number End Enum Public Const ERROR_SUCCESS = 0& Public Declare Function RegCloseKey Lib "advapi32.dll" _ (ByVal hKey As Long) As Long Public Declare Function RegCreateKey Lib "advapi32.dll" _ Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, _ phkResult As Long) As Long Public Declare Function RegDeleteKey Lib "advapi32.dll" _ Alias "RegDeleteKeyA" (ByVal hKey As Long, _ ByVal lpSubKey As String) As Long Public Declare Function RegDeleteValue Lib "advapi32.dll" _ Alias "RegDeleteValueA" (ByVal hKey As Long, _ ByVal lpValueName As String) As Long Public Declare Function RegOpenKey Lib "advapi32.dll" _ Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, _ phkResult As Long) As Long Public Declare Function RegQueryValueEx Lib "advapi32.dll" _ Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _ ByVal lpReserved As Long, lpType As Long, lpData As Any, _ lpcbData As Long) As Long Public Declare Function RegSetValueEx Lib "advapi32.dll" _ Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _ ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, _ ByVal cbData As Long) As Long Public Declare Function RegEnumKey Lib "advapi32.dll" _ Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, _ ByVal lpName As String, ByVal cbName As Long) As Long Public Function DelRegValue(ByVal hKey As RegHive, ByVal strPath As String, _ ByVal strValue As String) Dim hCurKey As Long Dim lRegResult As Long lRegResult = RegOpenKey(hKey, strPath, hCurKey) lRegResult = RegDeleteValue(hCurKey, strValue) lRegResult = RegCloseKey(hCurKey) End Function Public Function DelRegKey(ByVal hKey As RegHive, ByVal strPath As String) As Long Dim lRegResult As Long lRegResult = RegDeleteKey(hKey, strPath) DelRegKey = lRegResult End Function Public Function CreateRegKey(hKey As RegHive, strPath As String) Dim hCurKey As Long Dim lRegResult As Long lRegResult = RegCreateKey(hKey, strPath, hCurKey) If lRegResult <> ERROR_SUCCESS Then 'there is a problem End If lRegResult = RegCloseKey(hCurKey) End Function Public Function GetRegString(hKey As RegHive, strPath As String, _ strValue As String, Optional Default As String) As String Dim hCurKey As Long Dim lResult As Long Dim lValueType As Long Dim strBuffer As String Dim lDataBufferSize As Long Dim intZeroPos As Integer Dim lRegResult As Long 'Set up default value If Not IsEmpty(Default) Then GetRegString = Default Else GetRegString = "" End If lRegResult = RegOpenKey(hKey, strPath, hCurKey) lRegResult = RegQueryValueEx(hCurKey, strValue, 0&, lValueType, _ ByVal 0&, lDataBufferSize) If lRegResult = ERROR_SUCCESS Then If lValueType = REG_SZ Then strBuffer = String(lDataBufferSize, " ") lResult = RegQueryValueEx(hCurKey, strValue, 0&, 0&, _ ByVal strBuffer, lDataBufferSize) intZeroPos = InStr(strBuffer, Chr$(0)) If intZeroPos > 0 Then GetRegString = Left$(strBuffer, intZeroPos - 1) Else GetRegString = strBuffer End If End If Else 'there is a problem End If lRegResult = RegCloseKey(hCurKey) End Function Public Function SaveRegString(hKey As RegHive, strPath As String, _ strValue As String, strData As String) Dim hCurKey As Long Dim lRegResult As Long lRegResult = RegCreateKey(hKey, strPath, hCurKey) lRegResult = RegSetValueEx(hCurKey, strValue, 0, REG_SZ, _ ByVal strData, Len(strData)) If lRegResult <> ERROR_SUCCESS Then 'there is a problem End If lRegResult = RegCloseKey(hCurKey) End Function Public Function GetRegLong(ByVal hKey As RegHive, ByVal strPath As String, _ ByVal strValue As String, Optional Default As Long) As Long Dim lRegResult As Long Dim lValueType As Long Dim lBuffer As Long Dim lDataBufferSize As Long Dim hCurKey As Long 'Set up default value If Not IsEmpty(Default) Then GetRegLong = Default Else GetRegLong = 0 End If lRegResult = RegOpenKey(hKey, strPath, hCurKey) lDataBufferSize = 4 '4 bytes = 32 bits = long lRegResult = RegQueryValueEx(hCurKey, strValue, 0&, lValueType, lBuffer, _ lDataBufferSize) If lRegResult = ERROR_SUCCESS Then If lValueType = REG_DWORD Then GetRegLong = lBuffer End If Else 'there is a problem End If lRegResult = RegCloseKey(hCurKey) End Function Public Function SaveRegLong(ByVal hKey As RegHive, ByVal strPath As String, _ ByVal strValue As String, ByVal lData As Long) Dim hCurKey As Long Dim lRegResult As Long lRegResult = RegCreateKey(hKey, strPath, hCurKey) lRegResult = RegSetValueEx(hCurKey, strValue, 0&, REG_DWORD, lData, 4) If lRegResult <> ERROR_SUCCESS Then 'there is a problem End If lRegResult = RegCloseKey(hCurKey) End Function Public Function GetRegByte(ByVal hKey As RegHive, ByVal strPath As String, _ ByVal strValueName As String, Optional Default As Variant) As Variant Dim lValueType As Long Dim byBuffer() As Byte Dim lDataBufferSize As Long Dim lRegResult As Long Dim hCurKey As Long If Not IsEmpty(Default) Then If VarType(Default) = vbArray + vbByte Then GetRegByte = Default Else GetRegByte = 0 End If Else GetRegByte = 0 End If lRegResult = RegOpenKey(hKey, strPath, hCurKey) lRegResult = RegQueryValueEx(hCurKey, strValueName, 0&, lValueType, _ ByVal 0&, lDataBufferSize) If lRegResult = ERROR_SUCCESS Then If lValueType = REG_BINARY Then ReDim byBuffer(lDataBufferSize - 1) As Byte lRegResult = RegQueryValueEx(hCurKey, strValueName, 0&, lValueType, _ byBuffer(0), lDataBufferSize) GetRegByte = byBuffer End If Else 'there is a problem End If lRegResult = RegCloseKey(hCurKey) End Function Public Function SaveRegByte(ByVal hKey As RegHive, ByVal strPath As String, _ ByVal strValueName As String, byData() As Byte) Dim lRegResult As Long Dim hCurKey As Long lRegResult = RegCreateKey(hKey, strPath, hCurKey) lRegResult = RegSetValueEx(hCurKey, strValueName, 0&, REG_BINARY, _ byData(0), UBound(byData()) + 1) lRegResult = RegCloseKey(hCurKey) End Function Public Function CopyRegByte(ByVal From_hKey As RegHive, _ ByVal From_strPath As String, ByVal From_strKeyName As String, _ ByVal To_strPath As String, Optional ByVal To_hKey As RegHive, _ Optional ByVal To_strKeyName As String) If To_hKey = 0 Then To_hKey = From_hKey Else To_hKey = To_hKey End If If To_strKeyName = "" Then To_strKeyName = From_strKeyName Else To_strKeyName = To_strKeyName End If Dim mybytes As Variant mybytes = GetRegByte(From_hKey, From_strPath, From_strKeyName) thelen = UBound(mybytes) Dim x() As Byte ReDim x(thelen) For i = 0 To UBound(mybytes) x(i) = mybytes(i) Next i rslt = SaveRegByte(To_hKey, To_strPath, To_strKeyName, x) End Function Public Function CopyRegString(ByVal From_hKey As RegHive, _ ByVal From_strPath As String, ByVal From_strKeyName As String, _ ByVal To_strPath As String, Optional ByVal To_hKey As RegHive, _ Optional ByVal To_strKeyName As String) If To_hKey = 0 Then To_hKey = From_hKey Else To_hKey = To_hKey End If If To_strKeyName = "" Then To_strKeyName = From_strKeyName Else To_strKeyName = To_strKeyName End If Dim mystring As String mystring = GetRegString(From_hKey, From_strPath, From_strKeyName) rslt = SaveRegString(To_hKey, To_strPath, To_strKeyName, mystring) End Function Public Function CopyRegLong(ByVal hKey As RegHive, ByVal From_strPath As String, _ ByVal From_strKeyName As String, ByVal To_strPath As String, _ Optional ByVal To_hKey As RegHive, Optional ByVal To_strKeyName As String) If To_hKey = 0 Then To_hKey = From_hKey Else To_hKey = To_hKey End If If To_strKeyName = "" Then To_strKeyName = From_strKeyName Else To_strKeyName = To_strKeyName End If Dim mylong As Long mylong = GetRegLong(From_hKey, From_strPath, From_strKeyName) rslt = SaveRegLong(To_hKey, To_strPath, To_strKeyName, mylong) End Function Public Function GetRegSubKeyList(ByVal hKey As RegHive, ByVal strPath As String) 'On Error Resume Next Dim lResult As Long, lKeyValue As Long, lDataTypeValue As Long, lValueLength As Long Dim sValue As String, td As Double, i As Long, Ret As Boolean, tmprst() Do Until Ret = True lResult = RegOpenKey(hKey, strPath, lKeyValue) sValue = Space$(2048) lValueLength = Len(sValue) lResult = RegEnumKey(lKeyValue, i, sValue, lValueLength) If (lResult = 0) And (Err.Number = 0) Then ReDim Preserve tmprst(i) tmprst(i) = Left$(sValue, InStr(sValue, Chr(0)) - 1) Else Ret = True End If lResult = RegCloseKey(lKeyValue) i = i + 1 Loop GetRegSubKeyList = tmprst End Function ملاحظات مهمة : 1. الكود اعلاه تم تجربته وهو يعمل بدون أخطاء. 2. يجب استدعاء احد الاقترانات لمعرفة القيمة من Registry واعتقد أنه الاقتران GetRegSubKeyList 3. يجب الحذر عند استخدام اقترانات التعديل والحذف لأن أي تغير في Registry ممكن أن يعطل بعض الامور في ويندوز والبرامج. مع الاحترام
  15. السلام عليكم أخي أبا هادي والاخوة الاعضاء ،أعتقد أن هذا الموضوع (تحويل اللغة إلى الانجليزية أو غيرها) وكذلك موضوع معرفة قيمة من Windows Registry لهما علاقة وثيقة ببعضهما حيث أن الموضوعان مرتبطان بمتغيرات وتعريفات في ويندوز (windows settings) واستخدامها في أكسس. أعتقد أن مفتاح الحل لهذه الامور موجود في الامر Call Shell وارفق هنا مثال لشخص (صيني) يحول اللغة إلى الصينية ويمكن أن نستفيد بشكل أو أخر منه. ' To Display Regional Settings Call Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,@1,0", vbNormalFocus) ' Move the Cursor focus to "Language Settings for the System" SendKeys vbTab, True ' Move the Cursor focus to "Set default" SendKeys vbTab, True ' Click the "Set default" button SendKeys "{ENTER}", True ' Change the language in "Select System Locale" SendKeys "Chinese", True SendKeys "{DOWN}", True SendKeys "{DOWN}", True ' Move the Cursor focus to "OK" button SendKeys vbTab, True ' Click the "OK" button SendKeys "{ENTER}", True DoEvents ' Move the Cursor focus to "Advanced ..." button SendKeys vbTab, True ' Move the Cursor focus to "OK" button SendKeys vbTab, True ' Move the Cursor focus to "Cancel" button SendKeys vbTab, True ' Move the Cursor focus to "Apply" button DoEvents SendKeys vbTab, True ' Click the "Apply" button SendKeys "{ENTER}", True مع الاحترام والتقدير
  16. السلام عليكم أخي ابا هادي بارك الله فيك، إنه ليشرفني أن تعقب على مداخلاتي ومواضيعي، وكلما زادت المداخلات والافكار كلما ازددنا علما واعتقد هذا هو المغزي من هذا المنتدى. مع الاحترام والتقدير
  17. السلام عليكم الاخوة الاعضاء الكرام، بعد بحثي في المشكلة المطروحة أود أن ابين ما توصلت له من معلومات متعلقة بهذه المسألة حتى الان: 1. عند (تعديل) زيادة أو انقاص التاريخ الهجري من التعريفات الاقليمية فإنه كما ذكر الاخ المستفسر في سؤاله لا يتغير حقل مربع النص المعرف على التاريخ الهجري ولكن هناك قيمة في تسجيلات ويندوز (Windows Registry) تتغير وهي في (HKey_current_user\Control Panel\International) والخاصية هي AddHijriDate وتتغير قيمتها بالشكل التالي إذا قمنا بتنقيص يومين تصبح قيمة الخاصية AddHijriDate-2 إذا قمنا بتنقيص يوم تصبح قيمة الخاصية AddHijriDate إذا لم ننقص أو نزيد تصبح قيمة الخاصية (فراغ) إذا قمنا بزيادة يوم تصبح قيمة الخاصية AddHijriDate+1 إذا قمنا بزيادة يومين تصبح قيمة الخاصية AddHijriDate+2 2. طبعا هذا مفتاح لحل المشكلة حيث يمكن وضع كود في حدث ما للنموذج الذي به التاريخ الهجري بحيث يقرأ قيمة AddHijriDate من Windows Registry وبناء Select Case بناء على القيمة كما بينت أعلاه لزيادة أو إنقاص التاريخ الهجري تلقائيا في النموذج. 3. ما تبقى لتطبيق الحل المقترح هو معرفة كيفية قراءة القيمة المطلوبة من Windows Registry فأرجو المساعدة. مع الاحترام
  18. السلام عليكم أخي السامر، أود المساعدة (قدر استطاعتي) في هذه المسألة بعد إذنك وإذن الاخ أبا هادي طبعا. 1. ذكرت في الشرح أنك تقوم بتعديل التقويم الهجري يدويا في Windows وهذا جزء من المسألة، أود أن ارشدك إلى برنامج تقويم هجري رائع يعدل نفسه تلقائيا وله خصائص كثيرة لطيفة من أهمها أنه يعمل حسب حالات القمر وليس حسب خوارزميات رياضية وهذا البرنامج موجود في الموقع التالي يمكنك تحميله من هناك http://ultimaterepository.com/business/calendar/10506.aspx 2. بشأن السؤال الاخر المتعلق بتعديل التاريخ بنموذج ليتوافق مع تاريخ الجهاز فإنه محفز وسأفكر به. مع الاحترام
  19. السلام عليكم 1. الطريقة التي ذكرها العضو في المداخلة قبل السابقة وتفاصيل الطريقة في الرابط التالي http://www.mybiznas.com/access 2. إذا احتجت إلى معلومات أكثر بإمكاني مساعدتك. مع الاحترام
  20. السلام عليكم بإمكانك عمل بحث من خلال المنتدى وذلك بالبحث في أسفل هذه الصفحة عن (شريط الادوات) ويوجد موضوعات مختلفة مفيدة، بعد إدخال الكلمات المفتاحية (شريط الادوات) لا تنسى ضغط زر ابحث في الموضوع، وبالتوفيق مع الاحترام
  21. يتماشى هذا الموضوع مع نسخة Access2000 وما بعدها. يستفاد من هذا الموضوع معرفة طريقة إضافة مجموعة من العناصر بعد ترتيبها أبجديا إلى مربع تحرير وسرد (combo box) برمجيا باستخدام (VBA). المشكلة : إذا تم إضافة مجموعة من العناصر برمجيا إلى مربع التحرير والسرد فإنها تظهر حسب ترتيب الإضافة وليس أبجديا. إحدى طرق الحل: 1. إضافة العناصر إلى مصفوفة (Array) 2. وبعدها ترتيب المصفوفة 3. ومن ثم إضافة عناصر المصفوفة المرتبة إلى مربع التحرير والسرد ولننفذ هذه الخوارزمية نقوم بالخطوات التالية: 1. ننشأ مربع التحرير والسرد ونسميه TheCombo في خاصية الاسم (Name) 2. نختار في خاصية نوع مصدر الصف (Row Source Type) قائمة الحقول (Value List) 3. نضع في إطار (VBA) الكود التالي : Option Compare Database Dim sA(50) As String Private Sub Form_Load() Dim obj As AccessObject Dim proj As CurrentProject Dim I As Byte ' Step1 : fill the array with the wanted items Set proj = Application.CurrentProject I = 0 For Each obj In proj.AllForms sA(I) = obj.Name I = I + 1 Next obj ' Step2 : Sort the array Sort I - 1 ' Step3 : add to the combo box items in the sorted array For x = 0 To I - 1 Me.TheCombo.AddItem (sA(x)) Next End Sub Sub Sort(Items As Integer) Dim L, M As Integer Dim sT As String MsgBox sA(0) For L = 0 To Items For M = 0 To Items - 1 If StrComp(sA(M), sA(M + 1), vbTextCompare) = 1 Then sT = sA(M) sA(M) = sA(M + 1) sA(M + 1) = sT End If Next Next End Sub ملاحظة (1): العناصر التي تم تحميلها إلى المصفوفة هي أسماء النماذج التي في القاعدة (AllForms) ويمكن تحميل أسماء عناصر مختلفة من القاعدة فقط بتغيير (AllForms). ملاحظة (2): طريقة الترتيب تصاعديا وإذا أردنا الترتيب تنازليا فالتغيير يكون فقط في إشارة المساواة نحولها إلى عدم المساواة كالتالي: If StrComp(sA(M), sA(M + 1), vbTextCompare) <> 1 Then الخلاصة: تم ترتيب عناصر مصفوفة وإضافة عناصرها إلى مربع تحرير وسرد برمجيا.
  22. 1. عفوا، حسبت أنك تود حل برمجي (وعلى كل الاحول لم نخسر شيئا فربما يناسب ذلك الحل بعض الاخوة الاعضاء لإمور مشابهة في معالجة عدم وجود البيانات) 2. الحل بطريقة الماكرو هو كما يلي: أنشىء ماكرو جديد ... وفي أول سطر (إجراء) اختار CancelEvent وفي ثاني سطر (إجراء) اختار OpenReport وحدد اسم التقرير الذي سيتم تنفيذه في حالة عدم وجود بيانات وحدد طريقة العرض في تصميم التقرير اطلب هذا الماكرو في حدث عند عدم وجود بيانات
  23. الموضوع: إخفاء أو إظهار سطور مربع النص (TextBox) في التقارير 1. يمكن لمربع النص أن يحتوي سطرا واحدا أو عدة سطورا أو فراغا بالطبع مصدر مربع النص هو حقل من نوع مذكرة (Memo) 2. المطلوب في سؤال المستفسر أمران السؤال الاول : كيفية عدم ترك (سطر فراغ) في التقرير في حالة عدم احتواء مربع النص على بيانات أي عندما يكون مربع النص فارغا. السؤال الثاني: كيفية طباعة أكثر من سطر في حال إحتواء مربع النص على أكثر من سطر 3. لتحقيق المطلوب نعمل ما يلي في التقرير أولا : من خصائص مقطع تفصيل (Detail section) الموجود فيه مربع النص نختار (نعم) في خاصية قابل للنمو (Can Grow) نختار (نعم) في خاصية قابل للتقلص (Can Shrink) ثانيا : من خصائص مربع النص (TextBox) نختار (نعم) في خاصية قابل للنمو (Can Grow) نختار (نعم) في خاصية قابل للتقلص (Can Shrink)
  24. هذا الموضوع يتماشى مع Access 2002 و Access 2003 يستفاد من هذا الموضوع معرفة طريقة إضافة الطابعات المحملة (المعرفة) لجهاز الحاسوب إلى مربع تحرير وسرد (combo box) باستخدام البرمجة بلغة(VBA) . خطوات الطريقة هي : 1. ندخل إلى خصائص مربع التحرير والسرد ونضغط لسان التبويب الكل (All tab). 2. نغير قيم الخصائص كما يلي : نضع في خاصية الاسم (Name) الاسم dPrinter نختار في خاصية نوع مصدر الصف (Row Source Type) قائمة الحقول (Value List) نضع في حدث عند التحميل للنموذج (On Load) الكود التالي: Private Sub Form_Load() Dim prt As Printer For Each prt In Application.Printers Me!dPrinter.AddItem prt.DeviceName Next End Sub ملاحظة(1): عندما نضيف (نحمل) عناصر لمربع التحرير والسرد بالبرمجة (كما في المثال السابق) فإن العناصر لا تترتب أبجديا وإنما حسب ترتيب التحميل طبعا هناك حل لهذا الأمر أيضا، أرجو من الإخوة الأعضاء التفكير في الحل. ملاحظة(2): انتبه إلى طريقة استخدام (AddItem). الخلاصة : تم إضافة الطابعات المعرفة إلى مربع التحرير والسرد برمجيا وهذا مجرد مثال لأفكار كثيرة يمكن تطبيقها بنفس التقنية والشيء الممتع في هذه التقنية أن نتيجتها متواصلة التغير (Dynamic) أي كلما تغيرت تعريفات الطابعات تتغير محتويات مربع التحرير والسرد.
  25. السلام عليكم 1. أود أن ارشد المستفسر إلى أنه يوجد طريقة بحث رائعة في هذا المنتدى والتي من خلالها يمكن أن يجد إجابات لمعظم استفساراته وخصوصا في الامور الاساسية العامة ولأن هذا المنتدى غني بالمعلومات على كل المستويات. 2. إذا تكرمت بالنزول إلى أسفل الصفحة المعروضة أمامك الان (طبعا بعد استكمال قراءة مداخلتي) تجد مربع ابيض مكتوب فيه أدخل الكلمات المفتاحية اكتب كلمة (اخفاء) طبعا بدون الاقواس ثم إضغط على زر ابحث في الموضوع. 3. ستظهر الموضوعات ذات العلاقة بالبحث المدرج وهي بالتأكيد تجيب بشكل موسع عن سؤالك وبهذه الطريقة تحل المشكلة المطروحة وتستفيد أيضا من مداخلات ذات علاقة بالموضوع. 4. والسؤال الجيد هو لماذا اخترت كلمة اخفاء لإجراء البحث وليس غيرها، السبب هو أن جوهر الموضوع الذي تطرحه هو اخفاء شيء سواء كما وصفته أنت بنافذة الاكسس ويسمى قياسيا (اطار قاعدة البيانات) وهكذ ولكن كما ذكرت فإن الجوهر هو اخفاء شيء. 5. وهكذا من الممكن أن تتعرف على الكثير من المواضيع الممتعة والمفيدة مبتدئا من كلمة.
×
×
  • اضف...

Important Information