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

Foksh

الخبراء
  • Posts

    2,359
  • تاريخ الانضمام

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

  • Days Won

    85

كل منشورات العضو Foksh

  1. يا صفاء ، الفورم الأول الحدث بعد التحديث ، الفورم التاني الحدث عند التغيير لقيمة مربعات النص الغير منضمة ،، وبالنبة للنقطة التانية ، غيري نوع المتغير Integer إلى Double . جربي واديني خبر
  2. أنا مش فاهم ايه اللي انتي عايزاه بالظبط 😅 !!!!!! تقدري تخفيهم وتخلي مقاساتهم 0 ( طول وعرض ) . وعلى فكره ، الطريقتين شغالات ولكن كل وحدة في حدث مختلف 😁
  3. على العموم ، من خلال تجربة سابقة لي في أحد برامجي ، جرب هذه الفكرة التي تتيح لك اختيار العنصر الذي تريد تحريكه ( مربع نص ، زر ، كومبوبوكس ) .... إلخ . بدايةً سنقوم بإنشاء مديول عام ولنفترض اسمه Drag_Drop وسيحتوي على هذا الكود البسيط :- Option Compare Database Option Explicit Public DragControl As Control Public XOffset As Single Public YOffset As Single Public Sub StartDrag(ctrl As Control, X As Single, Y As Single) Set DragControl = ctrl XOffset = X YOffset = Y End Sub Public Sub Dragging(X As Single, Y As Single) If Not DragControl Is Nothing Then DragControl.Left = DragControl.Left + (X - XOffset) DragControl.Top = DragControl.Top + (Y - YOffset) End If End Sub Public Sub EndDrag() Set DragControl = Nothing End Sub للتوضيح والشرح للمديول :- المتغير DragControl هو متغير من نوع Control يتم فيه تخزين العنصر الذي يتم سحبه حاليًا . المتغيران XOffset و YOffset هما من نوع Single وظيفتهما تخزن إحداثيات الماوس عند بداية عملية السحب . الدالة StartDrag التي ستعيد بدء عملية السحب للعنصر المحدد . حيث أنها تستقبل ثلاث معاملات [ ctrl (العنصر الذي يتم سحبه)، X و Y (إحداثيات الماوس في نقطة النقر) ] . الدالة Dragging التي تستخدم أثناء جر العنصر . حيث ستقوم بتحديث موقع DragControl (العنصر المحدد للسحب) بناءً على إحداثيات الماوس الحالية . وستستخدم XOffset و YOffset لضمان تحديث العنصر بالشكل الصحيح مع تحريك الماوس . الدالة EndDrag التي سوف تنهي عملية السحب بتفريغ قيمة DragControl ، مما يعني أنه لم يعد هناك عنصر يتم تحريكه . سنحتاج الجدول ControlPositions يتم تخزين قيم الموقع والإحداثيات لكل عنصر داخل أي نموذج . وسنحتاج إلى الحقول التالية ( ID و FormName و ControlName و ControlLeft و ControlTop ) . وهي بعد الحقل ID ترقيم تلقائي ( حقل لإسم النموذج ، وحقل لاسم العنصر داخل هذا النموذج ، وحقلين للإحداثيات ( اليسار والأعلى ) لكل عنصر . الآن في النموذج الذي سيتم التنفيذ عليه ؛ نقوم بوضع هذه الأكواد ( حجز المتغيرات والثوابت ، والإحداث عن الاغلاق والفتح ، والتحريك للماوس ) للنموذج فقط .. Option Compare Database Option Explicit Public DragControl As Control Public XOffset As Single Public YOffset As Single Public Sub StartDrag(ctrl As Control, X As Single, Y As Single) Set DragControl = ctrl XOffset = X YOffset = Y End Sub Public Sub Dragging(X As Single, Y As Single) If Not DragControl Is Nothing Then DragControl.Left = DragControl.Left + (X - XOffset) DragControl.Top = DragControl.Top + (Y - YOffset) UpdateControlPosition DragControl End If End Sub Public Sub EndDrag() Set DragControl = Nothing End Sub Private Sub Form_Load() Dim db As DAO.Database Dim rs As DAO.Recordset Dim strSQL As String Dim ctrl As Control Set db = CurrentDb Set rs = db.OpenRecordset("ControlPositions", dbOpenDynaset) Do While Not rs.EOF For Each ctrl In Me.Controls If ctrl.Name = rs!ControlName Then ctrl.Left = rs!ControlLeft ctrl.Top = rs!ControlTop Exit For End If Next ctrl rs.MoveNext Loop rs.Close Set rs = Nothing Set db = Nothing End Sub Private Sub Form_Close() Dim db As DAO.Database Dim rs As DAO.Recordset Dim strSQL As String Dim ctrl As Control Set db = CurrentDb Set rs = db.OpenRecordset("ControlPositions", dbOpenDynaset) strSQL = "DELETE * FROM ControlPositions WHERE FormName='" & Me.Name & "'" db.Execute strSQL, dbFailOnError For Each ctrl In Me.Controls If TypeOf ctrl Is Control Then strSQL = "INSERT INTO ControlPositions (FormName, ControlName, ControlLeft, ControlTop) " & _ "VALUES ('" & Me.Name & "', '" & ctrl.Name & "', " & ctrl.Left & ", " & ctrl.Top & ")" db.Execute strSQL, dbFailOnError End If Next ctrl rs.Close Set rs = Nothing Set db = Nothing End Sub Private Sub UpdateControlPosition(ctrl As Control) Dim db As DAO.Database Dim rs As DAO.Recordset Dim strSQL As String Set db = CurrentDb Set rs = db.OpenRecordset("ControlPositions", dbOpenDynaset) strSQL = "SELECT * FROM ControlPositions WHERE FormName = '" & Me.Name & "' AND ControlName = '" & ctrl.Name & "'" If Not rs.EOF Then rs.Edit rs.Fields("ControlLeft").Value = ctrl.Left rs.Fields("ControlTop").Value = ctrl.Top rs.Update Else rs.AddNew rs.Fields("FormName").Value = Me.Name rs.Fields("ControlName").Value = ctrl.Name rs.Fields("ControlLeft").Value = ctrl.Left rs.Fields("ControlTop").Value = ctrl.Top rs.Update End If rs.Close Set rs = Nothing Set db = Nothing End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Not Me.ActiveControl Is Nothing Then StartDrag Me.ActiveControl, X, Y End If End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then Dragging X, Y End If End Sub Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) EndDrag End Sub الآن نأتي للأحداث الخاصة بالعناصر التي نرغب في منح المستخدم حرية تغيير مواقعها . وسأبدأ بالتنفيذ على ( مربع نص TextBox1 و زر Command10 ) فقط ، والباقي مجرد تكرار مع تغيير الأسماء للعناصر . Private Sub TextBox1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Form_MouseDown Button, Shift, X, Y End Sub Private Sub TextBox1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Form_MouseMove Button, Shift, X, Y End Sub Private Sub TextBox1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Form_MouseUp Button, Shift, X, Y End Sub Private Sub Command10_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Form_MouseDown Button, Shift, X, Y End Sub Private Sub Command10_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Form_MouseMove Button, Shift, X, Y End Sub Private Sub Command10_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Form_MouseUp Button, Shift, X, Y UpdateControlPosition Me.ActiveControl End Sub وهذا المرفق تنفيذ ما تم شرحه سابقاً Move And Drops.accdb
  4. أخي شريف ، عندك كود !!! أين الكود ؟؟؟؟؟؟ المرفق السابق ملف MDE أي لا يمكن الوصول إلى الأكواد أو طريقة عرض التصميم !!!!!!!!!!!! وإذا كان المقصد من كلمة متشفرة = محمية بكلمة مرور فهذا شيء آخر يختلف عن ملف مقفل Accde أو MDE . على العموم انت تريد موضوع جديد من البداية وليس تعديل على الكود لعدم وجوده أساساً . بالنسبة لي سأرى ما يمكن فعله وأتابع معك في هذه الفكرة
  5. عندك طريقتين للحل ، اختاري اللي يعجبك calc.accdb
  6. بدايةً ارجو منك اخي الكريم @شريف كونكت الإلتزام بقوانين المنتدى ومن ضمنها وصف المشكلة في العنوان ، ثم ارفاق ملف حتى لو الكود مشفر 🤗
  7. الجملتين عكس بعض يا @safaa salem5 وليه تلزمي نفسك بالحدث عند التغيير ؟؟؟ مجرد فكرة ، جربي الحدث بعد التحديث للحقلين Private Sub volume_AfterUpdate() Me.total = Nz(Me.volume, 0) * Nz(Me.conc, 1) End Sub Private Sub conc_AfterUpdate() Me.total = Nz(Me.volume, 0) * Nz(Me.conc, 1) End Sub مجرد فكرة 😅
  8. أهلاً وسهلاً بك اخي الكريم @feth بداية للتفريق بين الباركود ، ورمز الإستجابة السريعة QR . باعتقادي أن الباركود لن يحمل كمية الحروف والأرقام التي ستكون في الفاتورة ، على عكس رمز الـ QR وسبب هذه الملاحظة هو انني استخدمت رمز الـ QR في أحد برامجي ( نظام الحضور والإنصراف ). على العموم حالياً لست أمام جهاز كمبيوتر ولكن تنفيذ فكرتك بإذن الله أمر بسيط.
  9. نعم صحيح ، فعلاً لا أحد يعلم ما الفائدة التي ينتظرها صاحب الموضوع من اخفاء هذا التنبيه وليس الفائدة من مربع الحوار ( رسالة جاري الطباعة ) 😁 فعلاً الويندوز سيحتاج لفرض صلاحيات من المستخدم ليتم تنفيذ أحد الطلبات التي تختص بنظام الويندوز ..
  10. شكراً لك أخي الحبيب @ahmed draz على لطفك وكلماتك الطيبة .. المنتدى عامر بالمحبة الموصولة بين أعضائه 🥰 . ونتمنى أن نكون عند حسن الظن 💐
  11. ما الهدف من الفكرة المطلوبة ؟؟
  12. اخي الغالي ، لا حاجة لاختيار افضل اجابة إلا اذا حصلت على الحل لمشكلتك .. حسناً لنوسع الفكرة بشكل أوسع ، سنتعامل مع مكتبة API لتعطيل رسائل النظام . أولاً انشاء مديول جديد وسنضع به هذا الكود البسيط ( يعمل على النواتين 32 و 64 ) :- Option Compare Database Option Explicit #If VBA7 Then ' 64-bit declarations Private Declare PtrSafe Function LockWindowUpdate Lib "user32" (ByVal hwndLock As LongPtr) As Long #Else ' 32-bit declarations Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long #End If Sub DisableScreenUpdates() LockWindowUpdate Application.hWndAccessApp End Sub Sub EnableScreenUpdates() LockWindowUpdate 0 End Sub ثم عند حدث الطباعة نستدعيه بهذا الشكل :- DisableScreenUpdates DoCmd.OpenReport "اسم_التقرير", acViewNormal EnableScreenUpdates أيضاً قيد التجربة لأني لا املك طابعة في الوقت الحالي
  13. ليس هناك اي احراج اخي الكريم @Zooro1 أبداً ,, في الواقع انا شاركت من عند الموضوع اللي بيتكلم عن وقت محدد اذا لم يتم تحريك الماوس فيه يتم اغلاق النموذج أو اظهار رسالة وانت تعدل حسب حاجتك للحدث عند انقضاء الوقت ، أما موضوع الصور ده فهو لم يظهر عندي من الأساس ولا اقم بمتابعته للأسف .. أما موضوع اخفاء العناصر في النموذج سهل جداً . في الكود اللي ارسلته لك في حدث عند التحميل سيتم فحص الجدول الذي أشرت اليه اذا كان هناك اي سجلات فيتم اظهار العناصر في النموذج الحالي . واذا لم يكون هناك اي سجلات ( الجدول فارغ ) فيتم اخفاء جميع العناصر في الجدول . admin.accdb جرب احذف سجلات الجدول وارجع افتح النموذج وشوف
  14. أخي الكريم @الوااااثق ، بدايةً أهلاً وسهلاً بك في عالمنا المتواضع في هذا المنتدى . ثانياً حتى لو امكانياتك بسيطة في الآكسيس فلا بد لك من وضع حجر الأساس في مشروعك بإنشائك للجداول على الأقل . وللتوجيه من وجهة نظري اتبع ما يلي :- الإبتعاد عن تسمية الحقول بمسميات عربية أثناء تصميم الجداول . لا تستخدم رموز مثل ( $ و % و # و @ ..... الخ ) أو مسافات في أسماء الحقول كمثال ( Student Name ) فالأفضل لك كمثال إما ( Student_Name ) أو ( StudentName ) لا تستخدم أسماء للحقول في الجدول تكون من الثوابت في لغات البرمجة مثل ( Name , Date , From , To ) .... الخ لأنها ستجعل العمل مربك أثناء كتابتك للإستعلامات أو الأكواد . اهتم بأنواع الحقول ( رقمي ، نصي ، تاريخ ، ترقيم تلقائي ... الخ ) بشكل سليم أثناء التصميم . يجب ان يكون لديك حقل مفتاح أساسي أو غير مكرر ليسهل لك ربط الجداول والسجلات ببعضها البعض . ثالثاً ستجد جميع في المنتدى ( حسب وقتهم طبعاً ) قد ساعدك ولو بمعلومة بسيطة تكون لك حل لمشكلة أو جواباً لتساؤلاتك .
  15. ليس لي تجربة في الموضوع لعدم حاجتي له على ما أعتقد ولا أعلم الفائدة من هذه الخطوة .. على العموم هل جربت اخفاء رسائل التحذير قبل أمر الطباعة :- DoCmd.SetWarnings False ثم أمر الطباعة الخاص بك ( حسب مشروعك ) .. ثم إعادة تفعيل الرسائل التحذيرية :- DoCmd.SetWarnings True
  16. استخدم هذا الكود في حدث عند التحميل للنموذج ، بحيث اذا كان الجدول فارغ يتم اخفاء جميع العناصر والمكونات في النموذج الحالي .. Private Sub Form_Load() Dim rs As DAO.Recordset Dim ctrl As Control Set rs = CurrentDb.OpenRecordset("SELECT * FROM Images_T") If rs.RecordCount = 0 Then For Each ctrl In Me.Controls ctrl.Visible = False Next ctrl End If rs.Close Set rs = Nothing End Sub مثال بسيط Clock Sub Form.accdb
  17. بالعكس انتبهت لها معلمي الفاضل @ابوخليل ، لكن المغزى هو انه سيتم حفظ المسار في جداول النظام حسب آخر جهاز تم الحفظ فيه ، وعليه فعند نقل المشروع الى جهاز آخر فسيختلف المسار المخزن في جداول النظام ، ولن تتم عملية الربط إلا بشكل يدوي من داخل قاعدة البيانات. طبعاً إلا إذا تم الحفظ من مكان عام كـ جعل قاعدة بيانات الجداول في القرص D مثلاً لذا فإنه عند تقسيم قاعدة البيانات لا بد من نموذج او بمعنى أدق ( كود ) يقوم بمهمة الربط باختيار قاعدة بيانات الجداول من خلال الكود. أيضاً دمج كلمة المرور في الكود ذات اهمية لأنه لا أعتقد ان المصمم سيعطي كلمة مرور الجداول للمستخدم كونه في النهاية يهدف الى حمايتها من الكشف لما فيها من بيانات . هل تصوري صحيح ، أم انها أطراف أحلام !!!
  18. بما أنها منفصلة كقاعدة بيانات خلفية اذاً وجب ان يتم إدراج كود الربط في النموذج الرئيسي الأول في قاعدة بيانات النماذج ، وادخال كلمة السر في المتغير بدلاً من XXXX . هنا سنهرب من الحفرة لنقع في المطب 😅 اذا كنت تريد التقسيم فاستمر على ما سبق ، أما إذا لم تكن ترغب في فصل الجداول عن النماذج فسيكون لديك قاعدة بيانات رئيسية واحدة ( تضم النماذج والجداول والاستعلامات... الخ ) بصيغة Accde بعد الإنتهاء من جميع تعديلاتك . والقاعدة الوسيط التي تحدثنا عنها سابقاً ( فقط ) ولا حاجة لك بقاعدة بيانات للجداول حينها أتمنى ان تكون قد توضحت الفكرة الآن 🤗
  19. توضحت الفكرة ، قد يكون الأمر قد اختلط علي ، على العموم جرب وأخبرنا 😉
  20. بعد اذن معلمي الفاضل @ابوخليل ، اللي فهمته من كلام أخي @الحلبي هو ان قاعدة بيانات الجداول منفصلة عن قاعدة بيانات النماذج , ولهذا السبب تم استكمال الموضوع لإعادة ربط الجداول بالقاعدة الأمامية .. إلا إذا كان التوجه الى أن تكون الجداول في قاعدة واحدة مع النماذج .. هنا يختلف الحوار
×
×
  • اضف...

Important Information