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

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

قام بنشر

السلام عليكم 

 

عيدكم مبارك وايامكم سعيدة ان شاء الله.

 

كان الطلب: نريد التصوير ، وتقطيع الصورة من خلال نموذج اكسس ،

والجواب كان "استوديوهات مسقط" ، بكل ما للاستوديو من ادوات 🙂

 

عمل البرنامج ، وبدون الدخول في التفاصيل ، والدروس ستكون في التفاصيل :

  1. تختار من البداية اذا كنت تريد استعمال كاميرا كانون Canon EOS (كاميرا واحدة او كاميرتين) ، او تستخدم ويب كام WebCam (استعملنا 4k ولكننا لم نكن راضين عن جودة الصور لإستخدامها في الهوية ، نعم ممكن استعمالها للهويات المؤقتة).
  2. عند ادخال رقم الموظف ، يأتي البرنامج بالصورة القديمة للموظف (قد يعطيك الموظف رقمه الوظيفي بالخطأ ، فمن مقارنة صورته القديم بشكله الان تستطيع ان تعرف اذا كان هو نفس الموظف) ،
  3. اذا كان هذا اول استخدام للتصوير (الانارة ، وضبط عدسة الكاميرا لوضوح الصورة ، او تقريب الصورة) ، فنقوم بعمله وملاحظة صورة الموظف من نافذة التصوير في الاكسس.
  4. نقوم بالنقر على الزر "التقط صورة من كانون" او "التقط صورة من ويب كام".
  5. في النموذج نرى الصورة التي تم التقاطها الان.
  6. نستخدم المربع الاحمر في ضبط مقاسات الصورة ، أ. يدويا عن طريق تحريك المربع او توسيعه من الاطراف او الزوايا ليلائم الحجم الذي نريد قص الصورة ،
  7. اما اذا اردنا من اكسس ان يقوم بتضيط مقاسات المربع تلقائيا (وهو الافضل والاسرع) ، فلمرة واحدة ، يجب علينا النقر على زر "نموذج الادوات" ، ثم ننقر على زر "اختيار لون الخلفية" ، مما سيعطينا ايقونة اختيار اللون ، فننقر بها على لون الخلفية (اعلى الرأس). ثم نمسك مفتاح Ctrl على الكيبورد وننقر على اي مكان في الوجه. و 95% من الوقت ، لا نحتاج الى عمل تعديل يدوي على المربع.
  8. عندما يكون المربع في المكان الصحيح ، انقر على زر "قص الصورة" ، فيقوم الاكسس باستبدال الصورة الجديدة مكان القديمة.
  9. بهذه الطريقة ، يتم تصوير وقص صورة الموظف في اقل من دقيقة واحدة ، وببساطة.

 

ستكون هناك سلسلة من الدروس التعليمية في كيفية التعامل مع الصور في الاكسس ، هنا في هذا الموضوع ، وحتى يكون الموضوع متسلسل في افكاره ، سيكون هذا الموضوع مغلق للتعليقات.

اما التعليقات والاسئلة فستكون في الموضوع التالي ان شاء الله

 

 

جعفر

 

 

.

 

والتصوير كان بهذه الكاميرات

Canon_MarkII.jpg.3f46720c241cd025193bfaf4ad4dc21d.jpg

.

Creative_WebCam.jpg.054fdbcf998e8433fc392b326f213f3b.jpg

  • Thanks 1
قام بنشر

1. حجم الصور

 

صحيح ان الاكسس يتعامل مع حجم الصورة ، ولكن حجم الصور له تأثير على عمل البرنامج ، ليس فقط في بطئ البرنامج ، وانما في فعاليته (نعم اعرف هذا الكلام غريب ، ولكن الفيديو رقم 3 في الاسفل يثبت هذه النقطة).

 

دائما اعمل تصغير لحجم الصورة ليتناسب مع حجم الشاشة ، سواء للنموذج او التقرير ، والافضل ان تكون الصورة اكبر من بحوالي 20%-30% من حجم الكائن في النموذج/التقرير حتى يعطي صورة ادق.

اذا لاحظنا الصورة التالية :

التصوير من الكاميرا = 5616x3744 بكسل

حجم شاشتي = 1680x1050 بكسل ، اي حوالي 33% من الحجم الاصلي

ووضعت شعار المنتدى في الشاشة ، وكائن الصورة حجمه 350x200 بكسل. ومع الاسف الشديد ، فقد رأيت برامج بحيث استخدم المبرمج صورة بحجم 4333x4333 هنا !!

 

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

وللعلم ، فالاكسس مو من البرامج التي تتعامل مع الصور بشكل سلسل ، وليس الاسوء.

 

صحيح ان حجم الصورة ادناه BG_Sizes2.JPG=11.7MB ، ولكن عند فتح الصور المضغوطة بجميع انواعها (مثلا jpg او png) ، فحجمها يكون كما لو كانت بصيغة BMP ، والصورة ادناه تكون بحجم 60MB . ولكن للعلم ، فعند فتح اي صورة ، فالكمبيوتر يفك ضغط الصور ويتعامل معها على انها BMP !!

BG_Sizes2.JPG.59ebe7ee4d95649d2d0a3b69bd396ef3.JPG

.

1. اداء الكمبيوتر بدون صورة في الخلفية:

1.No_BG.gif.f7e31e0b663c6f3c0dd2ad0a633e8f4d.gif

.

2. اداء الكمبيوتر باستخدام صورة صغيرة في الخلفية:

2.BG_Small.gif.3d6dd77a31e511bd80113e95cd916814.gif

.

3. اداء الكمبيوتر باستخدام صورة كبيرة في الخلفية:

3.BG_Big.gif.91f09bdf42769b168dd795e4d2aa3863.gif

.

لاحظ فرق الاداء.

 

جعفر

  • Moosak pinned this topic
قام بنشر

اللي استغربت منه هو ، لما عملت تحويل لوضع النموذج ، بدلا من يسار الى يمين ، عملته من اليمين الى اليسار ، واذا بالمربع الاحمر ما صارت يعمل كما يجب !!

1.Left_to_Right2.gif.8401dd5b852808f8e286364d955f8173.gif

قام بنشر

2. تحريك الكائنات في النموذج

 

هناك عدة طرق لتحريك الكائن ، ولكنها جميعا تعتمد على الحدث/الاحداث التالية:

للكائن:

image.png.210f9c532bada0458ba7baac72156204.png

.

او حدث القسم اللي فيه الكائن ، والكائن هنا في قسم التفصيل Detail

image.png.98ad27d39be4f95e8128e97b66071fea.png

.

ولكن من الخطأ استعمال الحدث للنموذج ، فالكائن موجود في قسم :

image.png.4036607ddcd99cac8ec6953bd09c72a8.png

.

 

اول عمل قمت به (اعتقد في سنة 2005) كان على مثل هذا النموذج ، وفيه ملصق (مع اضافة المربع الان) .

لاحظ انك تستطيع تحريك الملصق بمسكه من اي مكان في الكائن ،

ولكن المربع الاجوف تستطيع تحريكه عند مسك حوافه/اطرافه فقط

2.Basic_Move.gif.f6fef524f6c1fb091c78009b85088a50.gif

.

ولما غيرنا خلفية المربع من شفاف (اجوف) الى خلفية عادية ، استطعنا تحريك المربع بمسكه من اي مكان

2.Basic_Move2.gif.db5d4dec2794e45afd0bdcf445065671.gif

.

الكود الذي يمكننا من التحريك الملصق هو التالي ، واحد اهم الاسطر في الكود هو اول سطر (Dim lblDrag_X As Long, lblDrag_y As Long) ، بحيث هذه القيم تكون مخزنه لكل مرة يتحرك فيها الملصق

Option Compare Database
Option Explicit

    Dim lblDrag_X As Long, lblDrag_y As Long
'

Private Sub lblDrag_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

On Error GoTo err_lblDrag_MouseMove
Static InitX As Single
Static InitY As Single

If Button = acLeftButton Then
    If InitY <> 0 And InitX <> 0 Then
        lblDrag.Top = (Y - InitY) + lblDrag.Top
        lblDrag.Left = (X - InitX) + lblDrag.Left
    Else
        InitX = X
        InitY = Y
    End If
Else
   InitX = 0
   InitY = 0
End If

    lblDrag_X = lblDrag.Top
    lblDrag_y = lblDrag.Left


lblMouseMove_Resume:
Exit Sub

err_lblDrag_MouseMove:

If Err.Number = 2100 Then
    Resume lblMouseMove_Resume
Else
    MsgBox Err.Number
End If

End Sub

.

2.Basic_Move.mdb

.

 

ولما زاد عدد حقول النص (كانت تجينا مناقصات ولازم نعبئ المناقصات على اوراق الشركة ، يعني سعر كل مادة يجب تضبيطها حسب مكانها في ورقة المناقصة ، مع كتابة ملاحظاتنا حسب نوع المنتج) . وكان لابد من توسيع الحقل ، فاستعملت مفتاح الشفت (او Ctrl) مع الاسهم (يمين - يسار - اعلى - اسفل) 

3.Group.gif.906ee7a7d3cceeedf573b93addadb622.gif

.

اصبح الكود اعلاه هو الاساس في تحريك حقول النص بجعله في دالة (في وحدة نمطية في مشروعي الاخير) ، ودالة اخرى لتوسيع الحقول ، اما مناداة هذه الدوال فكانت من حدث كل كائن على حدة:

Private Sub Form_Current()

'   Load the position and the size of the 38 TextBoxes

    Me.Drag01.Top = [Drag01_PositionY]
    Me.Drag01.Left = [Drag01_PositionX]
    Me.Drag01.Width = [Drag01_Width]
    Me.Drag01.Height = [Drag01_Height]

    Me.Drag02.Top = [Drag02_PositionY]
.....
    end sub


  
  
Private Sub Drag01_KeyDown(KeyCode As Integer, Shift As Integer)

    Call KeyMe(KeyCode, Shift, ActiveControl, iWidth, iHeight)
    [Drag01_Width] = iWidth
    [Drag01_Height] = iHeight

End Sub

Private Sub Drag01_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)

    Call DragMe(Button, Shift, x, Y, ActiveControl, PosX, PosY)
    [Drag01_PositionY] = PosY
    [Drag01_PositionX] = PosX

End Sub

  
  
  ثم الدوال
Public Sub DragMe(Button As Integer, Shift As Integer, x As Single, Y As Single, Drag As Control, PosX, PosY)
' Drag position

Static InitX As Single
Static InitY As Single

If Button = acLeftButton Then
    If InitY <> 0 And InitX <> 0 Then
        Drag.Top = (Y - InitY) + Drag.Top
        Drag.Left = (x - InitX) + Drag.Left
    Else
        InitX = x
        InitY = Y
    End If
Else
   InitX = 0
   InitY = 0
End If

    PosX = Drag.Left
    PosY = Drag.Top

    
End Sub

Public Sub KeyMe(KeyCode As Integer, Shift As Integer, Drag As Control, iWidth, iHeight)

'Typical key down event handler :
' Right Arrow = Increase the Width
' Left Arrow  = Reduce the Width
' Down Arrow  = Increase the Height
' Up Arrow    = Decrease the Height
   
   Select Case KeyCode
       Case 37           'Left arrow
            Drag.Width = Drag.Width - 72
            
       Case 39           'Right arrow
            Drag.Width = Drag.Width + 72
  
       Case 38           'Up arrow
            Drag.Height = Drag.Height - (1440 * 0.1667)
            
       Case 40           'Down arrow
            Drag.Height = Drag.Height + (1440 * 0.1667)
            
   End Select
   
    iWidth = Drag.Width
    iHeight = Drag.Height

End Sub  

.

3.Group.mdb

.

ومع تعديل بسيط حتى يقبل التنسيق في حقول النص للاكسس 2007 فما فوق

Drag_Drop_Locations.accdb

.

 

والان بعد ان عرفنا كيف نحرك المربع ، سنتحدث عن :

  1. طريقة تحريك اطرافه افقيا وعموديا ،
  2. تغيير مؤشر الفأرة حسب مكان المؤشر.

 

هنا سأشير الى الفكرة ، واترككم مع البرنامج:

  • من طول او عرض اي ضلع ، 0-25% و 75-100% يكون المؤشر لتحريك المريع. يعني اذا طول الضلع 10 ، اذن من 0-2.5 و من 7.5-10 يكون المؤشر لتحريك المربع.
  • اما من 26-74% يكون لتحريك الضلع نفسه (من حوالي 3-7) ، وعليه يتغير المؤشر.
  • اساس الكود هنا هو نفس الموجود في اول المشاركة هذه ، ومنه تم التوسع حسب الحاجة.

4.Size_Move.gif.11b62beb588838dae06aa883d6b88984.gif

.

4.Size_Move.accdb

.

 

وبعد تجارب كثيرة ومختلفة ، اتضح ان استعمال الاحداث اعلاه لكائن المربع لا تفي بالغرض لمشروعي ، والسبب هو ان الحدث يبدأ بالعمل عندما يكون المؤشر على احد اضلع المربع ، بينما لا يمكن الاستفادة من منتصف المربع ، فعليه ، تم تحويل الكود الى حدث قسم التفصيل Details ، ومنها بدأ العمل بالتبلور بصورة مرضية 🙂

 

الذكاء الاصطناعي كان وبالا/مشكلة عليّ في هذا المشروع ، وذلك لشح البيانات عن مثل هذا العمل في الانترنت ، فكنت اضطر الى عمل الكود الاساسي لضلع واحد ، ومن ثم الطلب منه بعمل باقي الاضلاع ، او تقييده في عمل الكود بين اسطر معينة من الكود.

 

جعفر

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

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

Important Information