اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

سؤال في : التركيز SetFocus حال فتح البرنامج مع اقلاع وندوز


ابوخليل

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

اخواني الكرام ، السلام عليكم

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

مثلا برنامج حضور  بواسطة قارىء البطاقة

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

المشكلة :

ان التركيز احيانا  وفي بعض الاجهزة يكون خارج الفورم (على شريط المهام) مما يضطر معه الى النقر على الحقل بواسطة الفأرة

السؤال :

انا استخدم  في نهاية  حدث عند تحميل الفورم العبارة التالية :

SendKeys "{BS}", False
Me.id.SetFocus

من اجل نقل التركيز  الى الفورم ثم الى حقل id 

ولكن اكسس لا يقبل السطر الأول

فهل من حل  أو   بديل  ؟

db1.rar

  • Like 1
رابط هذا التعليق
شارك

لتوضيح المشكلة والمطلوب  عمليا :

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

من اجل يكون التركيز على شريط المهام

الآن ما الطريقة للانتقال الى النموذج بدون استخدام  الفأرة

 

بالضبط هذا ما يحدث عندي  عند فتح البرنامج واريد كود يعيد التركيز الى الفورم

 

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

  • Like 1
رابط هذا التعليق
شارك

وعليكم السلام اخوي ابو خليل:smile:

 

عادة اذا اردنا ان نضع التركيز على حقل في نموذج آخر ، فإننا يجب ان نضع التركيز على النموذج اولا ، ثم التركيز على الحقل ،

واذا اردنا ان نضع التركيز على حقل في نموذج فرعي ، فإننا يجب ان نضع التركيز على النموذج اولا ، ثم النموذج الفرعي ، ثم التركيز على الحقل.

 

وبشوف مرفقك الآن:smile:

 

جعفر

  • Like 1
رابط هذا التعليق
شارك

2 ساعات مضت, ابوخليل said:

لتوضيح المشكلة والمطلوب  عمليا :

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

من اجل يكون التركيز على شريط المهام

الآن ما الطريقة للانتقال الى النموذج بدون استخدام  الفأرة

 

بالضبط هذا ما يحدث عندي  عند فتح البرنامج واريد كود يعيد التركيز الى الفورم

 

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

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

DoCmd.Close: DoCmd.OpenForm "نموذج1"

بس على حسب طبيعة عمل الفورم انا غير متأكد هل هتنفعك الطريقة ام لا

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

 

Forms![äãæÐÌ1].SetFocus
Me.id.SetFocus

 

db2.rar

تم تعديل بواسطه Amr Ashraf
  • Like 1
رابط هذا التعليق
شارك

السلام عليكم

 

وبعد البحث ، والتجربة:

استعمل هذا الكود في وحدة نمطية:

Option Compare Database
Option Explicit

#If VBA7 Then
    Private Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hWnd As LongPtr) As LongPtr
    Private hWnd As LongPtr
#Else
    Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
    Public hWnd As Long
#End If

Public Function Activate_This_AccessApp() As Boolean
    'Brings the DB to the front of all open windows
    Call SetForegroundWindow(Application.hWndAccessApp)
End Function


Public Function Activate_Another_AccessApp() As Boolean
    'Brings the DB to the front of all open windows
    Dim appTarget As Access.Application
    Set appTarget = GetObject(CurrentDb.Name)
    ActivateAccessApp = Not SetForegroundWindow(appTarget.hWndAccessApp) = 0
    Set appTarget = Nothing
End Function

 

ثم ننادي هذه الوحدة النمطية هكذا:

Private Sub Form_Load()

  Call Activate_This_AccessApp

  DoCmd.Maximize
  SendKeys "{BS}", False
  Me.SetFocus
  Me.id.SetFocus

End Sub

 

جعفر

883.Bring_Access_to_Front.mdb.zip

  • Like 3
رابط هذا التعليق
شارك

16 ساعات مضت, ابوخليل said:

من اجل نقل التركيز  الى الفورم ثم الى حقل id 

12 ساعات مضت, jjafferr said:

عادة اذا اردنا ان نضع التركيز على حقل في نموذج آخر ، فإننا يجب ان نضع التركيز على النموذج اولا ، ثم التركيز على الحقل ،

واذا اردنا ان نضع التركيز على حقل في نموذج فرعي ، فإننا يجب ان نضع التركيز على النموذج اولا ، ثم النموذج الفرعي ، ثم التركيز على الحقل.

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

Form_نموذج1.id.SetFocus

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

Capture.PNG.bf2afc111be978f1ed1c1684e1cc662a.PNG

  • Like 1
رابط هذا التعليق
شارك

جزاكم الله خيرا احبتي  وشكرا على المساعدة

17 ساعات مضت, Amr Ashraf said:

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

فكرة منطقية   :smile:  

وجربت ولم يستجب للحدث  ولم ينتقل التركيز

15 ساعات مضت, Shivan Rekany said:

انا انزلت المرفق لكن بعد لا اعرف وين المشكلة لان عندي كل شيء تمام

انا ذكرت في مشاركتي الثانية :

اقتباس

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

اي ان اكسس يفتح مع بداية التشغيل   ولكن الحاصل ان وندز لديه مهمة اخرى لم تنتهي بعد

علما اني  ازلت جميع البرامج التي تعمل مع بدء التشغيل ما عدا برنامجي

16 ساعات مضت, jjafferr said:

السلام عليكم

وبعد البحث ، والتجربة:

استعمل هذا الكود في وحدة نمطية:

للاسف SendKeys "{BS}", False   لم يقبلها اكسس ولا اعلم هل للاصدار  دخل في ذلك

لذا  الغيتها واكتفيت بالوحدة النمطية  32 بت  مع كود التركيز  :

 

Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
    Public hWnd As Long
Public Function Activate_This_AccessApp() As Boolean
    'Brings the DB to the front of all open windows
    Call SetForegroundWindow(Application.hWndAccessApp)
End Function
Private Sub Form_Load()
Call Activate_This_AccessApp
Me.SetFocus
Me.id.SetFocus
End Sub

مع الانتباه لنقطة مهمة وهي وضع علامة على : تأمين شريط المهام

والحمد لله تحقق المطلوب   

الشكر لاساتذتنا الفضلاء ؛ جعفر  ..  و شفان  .. و عمرو

  • Like 1
رابط هذا التعليق
شارك

الحمدلله انك توصلت للمطلوب:smile:

 

الامر SendKeys فيه الكثير من المشاكل ، منها انه يطفئ زر Num Lock في الكيبورد ، وحتى اذا ذاكرتي ما تخونني ، في الوندوز Vista تم ايقافه عن العمل ،

وهناك برنامج يقوم بعمل هذا الامر وزيادة ، اسمه AutoIt وميزته انه سهل البرمجة ويمكن التحكم به عن طريق command line ، ويمكنه تصنّع ضغط الزر (مثل SendKeys) وحركة الماوس.

https://www.autoitscript.com/site/autoit/

 

في الكود ، واذا اردت استخدام الامر SendKeys جرب تغيير مكان الاسطر ، هكذا:

Private Sub Form_Load()

  DoCmd.Maximize
  SendKeys "{BS}", False

  Call Activate_This_AccessApp

  Me.SetFocus
  Me.id.SetFocus

End Sub

 

جعفر

  • Like 1
رابط هذا التعليق
شارك

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