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

الردود الموصى بها

قام بنشر

السلام عليكم ورحمة الله وبركاته

قد لا يكون المجال للمدح ولكن ... من لايشكر الناس لا يشكر الله

فضائل علمك عمت والنبع فياض بامر الله ... ما شاء الله ، تبارك الله ، لا قوة الا بالله

اكاديمي جميل ، ومحاضر ممتاز ومتمكن

فعلا خبير

نفع الله بك وبعلمك ، ننتفع مما علمَك الله

تابع بعون الله ، وعليك بالعزم و العزيمة

قام بنشر

السلام عليكم

أخي محب العلم

جزاك الله خيرا

اخجلتني ، فمثلي لا يشهد فانما انا طويلب علم

والله من وراء القصد

قام بنشر (معدل)

المثال الخامس عشر

كيفية برمجة زر ذو حالة متبدلة للتبديل بين وضعي العرض (منع التعديلات) والتعديل (سماح التعديلات) في النموذج

بيئة العمل : أكسيس 2003 و 2007

المقدمة

كلما زاد التحكم في النموذج ووفرت بيئة استخدام آمنة ومريحة للمستخدم كلما أصبح البرنامج صديقا للمستخدم بشكل أكبر وأصبح من الممكن الاعتماد على البرنامج واستخدامه مشجعا أكثر وطبعا أقل مشاكل. يعمد مبرمجو الأنظمة إلي عمل عدة أوضاع للنموذج عوضا عن بناء نماذج للإدخال ونماذج للعرض وأخرى للإضافة وهكذا ... ، في هذا المثال سأشرح طريقة من تصميمي تعتمد على زر ذو حالة متبدلة للعرض والتعديل.

التفاصيل

من المعروف أن الصور الرمزية التي تستخدم مع أزرار أكسيس لا يمكن تغييرها خلال فترة تشغيل النموذج لذلك سنقوم بوضع زرين فوق بعضهم في النموذج وهما :

post-27241-1200971639_thumb.jpg

الزر الأول لوضع التعديل (يعني الزر الذي سيسمح للمستخدم تعديل البيانات )

الزر الثاني لوضع العرض (بمعنى الزر الذي سيمنع المستخدم تعديل البيانات)

ثم نضع هذه الأزرار فوق بعضها فتظهر كأنها زر واحد في النموذج جاعلين زر سماح التعديل في الأمام ومنع التعديل في الخلف لأننا نريد عندما ندحل للنموذج أن نكون في وضع منع التعديل هكذا

post-27241-1200972038_thumb.jpg

الآن يجب أن نضع كود يسمح التعديل أو يمنع التعديل حسب الزر الذي نضغط عليه وبالطبع فإن هذا الكود سيوضع في حدث النقر لكل زر هكذا

 

Private Sub c1_Click()
Me.ambId.SetFocus
Me.c1.Visible = False
Me.c2.Visible = True
Me.Form.Caption = "تعديل"
Call Lock_Edit(Me.Form, False)
End Sub

Private Sub c2_Click()
Me.ambId.SetFocus
Me.c1.Visible = True
Me.c2.Visible = False
Me.Form.Caption = "عرض"
Call Lock_Edit(Me.Form, True)
End Sub
لاحظ ما نفعله هنا أولا تحويل التركيز إلى حقل غير الزرين لأننا سنخي الزر الذي ضغطناه ونظهر الأخر ومن المعروف أنه لا يمكن اخفاء زر يمتلك التركيز. ثم نخفي الزر المضغوط ونظهر الأخر النتيجة التي سيراها المستخدم هي وكأن الزر تم تبديل صورتة وهذه نتيجة تحايلية عن عدم القدرة على تغيير الصور الرمزية لأزرار أكسيس. ثم تغير عنوان النموذج الرئيس ليظهر الوضعية الحالية للنموذج (عرض أو تعديل) ومن الممكن أن تتساءل لماذا جعلت الإجراء الخاص بالوضع إجراءا عاما في وحدة نمطية وهو الذي أطلبه lock_edit والجواب أنني أريد أن أستخدم هذا الإجراء في جميع نماذجي وليس في نموذج واحد فحسب. الآن أنظر معي لطريقة العمل على تبديل الأوضاع :
Sub Lock_Edit(F As Variant, S As Boolean)
Dim Ctl As Control
  For Each Ctl In F.Controls
   If Ctl.Tag <> 0 Then
     If Ctl.ControlType = acTextBox Or Ctl.ControlType = acComboBox _
                                   Or Ctl.ControlType = acCheckBox _
                                   Or Ctl.ControlType = acSubform Then
                                                                        Ctl.Locked = S
     If S = True Then Ctl.SpecialEffect = 1 Else Ctl.SpecialEffect = 0
    End If
   End If
  Next Ctl
End Sub
ما أعمله هنا هو أنني افحص كل حقل فإذا كان مربع نص أو مربع اختيار أو نموذج فرعي أو مربع تحرير وسرد فإنه يتم تأمينه من خلال خاصية التأمين locked وليحس المستخدم بالفرق بين الوضعين اغير في شكله من خلال الخاصية speciialeffect . السؤال والفكرة الجميلة هي ماذا لو أردت لبعض عناصر التحكم أن لا تخضع لوضعي التبديل على سبيل المثال مربع تحرير وسرد يستخدم للبحث عن سجل والجواب هو أنني استخدمت فكرة بسيطة باستغلال خاصية tag لذلك العنصر فإذا وضعت فيها 0 في وضع التصميم للنموذج فإنني أعني بذلك أن هذا العنصر لن يخضع لعملية التبديل . الشيء الأخير والمهم لإكمال العمل هو تحديد وضع العرض عندما نفتح النموذج وذلك يتم هكذا
Private Sub Form_Open(Cancel As Integer)
Me.c1.Visible = True
Me.c2.Visible = False
Me.Form.Caption = "عرض"
Call Lock_Edit(Me.Form, True)
End Sub

أملا أن تكونوا استمتعتم واستفدتم من هذه الفكرة

2003_2007.zip

مع وافر الاحترام والتقدير

تم تعديل بواسطه محب العلم
قام بنشر

السلام عليكم

أهلا وسهلا ومرحبا بمحبي العلم وداعميه ومشجعيه ، عسى الله أن ينفعكم بما علمني وينفعني بما علمكم.

شكرا لإخواني الأحباب ومشرفينا الكرام رضوان ويوسف ومنذر عساج على التشجيع والدعم، وإنه لفخر لي مروركم .

وشكرا لأخي nart lebzo واخي حامل المسك على التشجيع الكبير والتواصي الدائم

وشكرا لأخي mr toto .

مع فائق احترامي وتقديري لكم ولجميع الاعضاء

ولكم مني جميعا :fff:

محبكم محب العلم

  • 2 weeks later...
قام بنشر (معدل)

السلام عليكم ورحمة الله وبركاته

على هامش المثال الرابع في المشاركة رقم 22 وطلب جديد من الأخ sweety

المثال السادس عشر

احضار مجموع فرعي إلى النموذج الرئيس مع تخزينه في مصدر البيانات للنموذج الرئيس،

المقدمة

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

السيناريو السابق تم شرحه بالتفصيل وعرض الطريقة المثلى بدون الوقوع في المشاكل عند استخدامه في المثال الرابع في هذه السلسلة هــــــــنـــــــــا

التفاصيل

أما السيناريو الذي يستخدمه sweety في مثاله فهو يتضمن عمل إضافي على السابق حيث يقوم بإحضار مجموع من نموذج فرعي إلى رئيس ثم تستخدم هذا المجموع في عملية حسابية لحساب قيمة حقل أخر وكذلك أنت تود تخزين هذا المجموع الفرعي الذي تم احضاره وكذلك الذي تم احتسابه في مصدر البيانات للنموذج الرئيس .

الحل يكون أولا بتطبيق الشرح السابق في السيناريو الأول والذي سيعمل على احضار المجموع والحساب في النموذج ولكن لن يخزن في مصدر السجلات للنموذج الرئيس لذا وجب التفكير متى يجب تخزين التغيرات في مصدر السجلات للنموذج الرئيس والجوب هو عندما يتغير المجموع في النموذج الفرعي أي في حدث بعد التعديل (بعد التحديث) لحقل المجموع الذي في النموذج الفرعي ولاحظ الكود الخاص بذلك

Private Sub Paid_Amount_AfterUpdate()
Me.Requery
Me.Parent.[paid amount] = Me.Parent.pa
Me.Parent.[Balance] = Me.Parent.b
Me.Refresh
End Sub

السطر الأول يعيد الاستعلام في النموذج الفرعي مما يؤدي إلى ظهور نتيجة التغيرات في كلا من الفرعي والرئيس

السطر الثاني يعدل (يخزن) قيمة الحقل Paid amount والذي سيكون القيمة المحضرة في عنصر التحكم غير المنضم لمصدر السجلات والذي اطلقت عليه اسم pa

السطر الثالث يخزن(يخزن) قيمة الحق balance والذي سيكون القيمة المحتسبة في عنصر التحكم غير المنضم لمصدر السجلات والذي اطلقت عليه اسم b

السطر الأخير ينعش النموذج بكل التغيرات التي حدثت

لاحظوا كلمة parent المستخدمة وهي الطريقة التي نصل من خلالها لعناصر نموذج رئيس (من حقول وغيرها) عندما يكون التركيز داخل نموذج فرعي (وتعني الأب وهي آتية من مبدأ التوارث في البرمجة الكينونية )

مع ملاحظة أننا وضعنا في النموذج الرئيس الحقول المنضمة وهي حقل paid amount وحقل balance وجعلناها مخفية لأن العمل سيتم في العناصر غير المنضمة والنتيجة تنقل للحقول المنضمة بواسطة الكود اعلاه.

SubTotal.rar

مع وافر الاحترام والتقدير

تم تعديل بواسطه محب العلم
  • 2 weeks later...
قام بنشر

أخي الكريم لكل شئ زكاة وزكازة علمك لقد اخرجتها لنا في شكل أكثر من ممتاز ولك مني و كل من قرأ حرف مما كتبت دعوات صادقة نرجو بأن يتقبلها منا رب العالمين وتكون دعواتنا لك عن ظهر الغيب من نصيبك ولك الشكر الجزيل وزادك الله نوراً وعلماً ورزقك أحسن ما في الدنيا الرزق الحلال والولد الصالح والزوجة الصالحة واعطاك كل ما في الجنة ولك سلامي أخوك احمد فخر الدين

  • 2 weeks later...
قام بنشر (معدل)
السلام عليكم ورحمة الله وبركاته

:clapping:

تم بحمد الله انتهاء هذه السلسة التي تألفت من ستة عشر مثالا مشروحا وأتمنى أن تكونو قد استفدتم منها

وإلى لقاء أخر مع سلسلة جديدة أستودعكم الله الذي لا تضيع ودائعه

ملاحظة مهمة : للمرة الخامسة والأخيرة أطلب من المشرفين فضلا تعديل اسم الموضوع إلى سلسلة الأمثلة المشروحة بدل من سلسة الأمثلة المشروحة.

كما وأطلب فضلا تحويل هذا الموضوع إلى قسم الأرشيف :ث: الأمثلة والتطبيقات

محبكم محب العلم

والحمد لله رب العالمين
تم تعديل بواسطه محب العلم
  • 2 weeks later...
قام بنشر (معدل)

بارك الله فيك اخي محب العلم وجزاك خير الجزاء

تم تعديل عنوان المشاركة وبإذن الله سيتم العمل على تحويل هذه السلسلة الرائعة الى ملف وورد وايضاً ملف آخر بصيغة Pdf

وسيتم وضعها في آخر السلسلة .

كل الشكر والتقدير لك على مجهوداتك الرائعة ونسأل الله ان يجعل ذلك في موازين حسناتك

تم تعديل بواسطه yousef
  • 3 weeks later...
  • 2 weeks later...
  • 2 weeks later...
  • 1 month later...
قام بنشر

جزاك الله خيرا على هذا العلم الوفير وجعله الله فى ميزان حسناتك يوم القيامه

ولكن اخى عندى سؤال ارجو منك شرح طريقه عمله

كيف استطيع عمل فلترة بالكومبو بوكس على مستويين بمعنى لو افترضنا ان هناك مدن ثم داخل المدن الاحياء ثم داخل الاحياء الشوارع

ففى اول كومبو يتم الفلترة بالمدن فتحدث فلترة جزئيه داخل الكومبو بوكس الثانى وايضا باقى البيانات ثم من الكومبو بوكس الثانى نختار الاحياء فتحدث فلترة ثانيه فى البيانات

لقد وجدت مثالا فى المنتدى يوضح ذلك بطريقه اخرى ولكن لم يتم شرحه فارجو منك ان توضح لنا كيفيه القيام بهذا الامر خطوة خطوة ولك جزيل الاجر والثواب ان شاء الله

واتمنى ان يكون سؤالى هذا مفيد للاخرين ان شاء الله

  • 1 month later...
قام بنشر

السلام عليكم ورحمة الله وبركاته

أخي العزيز

بارك الله فيك يا أخي وجعل كل هذ الجهد العظيم في ميزان حسانتك

أخوك أبو حسين

  • 7 months later...
قام بنشر

اخي في الله محب العلم

السلام عليكم ورحمة الله وبركاته وبعد

زادك الله تقا وعلما وجعل ذلك في ميزان حسناتك وصدقة جارية الى يوم القيامة

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information