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

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

قام بنشر

01.png.527721e335791220626cc940aee3d3ef.png

أخواني وأساتذتي ومعلمينا ( دون استثناء )

بعد المعاناة التي تواجه كل مبرمج أو هاوي أو محترف في التعامل مع الصور داخل آكسيس ، بوجود الترميش أو الوميض . وكنت قد طرحت تساؤلاً حول آلية تجنب هذه المشكلة عند تعامل آكسيس مع الصور داخل النماذج الحركية . خرجت بهذه الفكرة البسيطة والتي آمل أن تكون الحل الشافي لهذه المعضلة - كما عودناكم دائماً - بإيجاد الحل السحري لها .

 

الفكرة تم ترجمتها بأسلوب بسيط بحيث نجعل النموذج يقوم برسم الأحداث دفعة واحدة بدلاً من رسم كل حركة بشكل منفصل أثناء التعامل مع الصور .

 

Return.png.8f6df0d380e0a3056fed63d89fe36923.png الدالة المستخدمة :-

'**********************************************
'***                                        ***
'***   FFFFFF   OOO   KK KK    SSSS  HH  HH ***
'***   FF      O   O  KK KK   SS     HH  HH ***
'***   FFFFF   O   O  KKK      SS    HHHHHH ***
'***   FF      O   O  KK KK     SS   HH  HH ***
'***   FF       OOO   KK  KK  SSSSS  HH  HH ***
'***                                        ***
'********* Anti Flicker By Foksh 2026 *********

Option Compare Database
Option Explicit

#If VBA7 Then
    Private Declare PtrSafe Function GetWindowLongPtr Lib "user32" Alias "GetWindowLongPtrA" _
        (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr

    Private Declare PtrSafe Function SetWindowLongPtr Lib "user32" Alias "SetWindowLongPtrA" _
        (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr

    Private Declare PtrSafe Function SetWindowPos Lib "user32" _
        (ByVal hWnd As LongPtr, ByVal hWndInsertAfter As LongPtr, _
         ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _
         ByVal uFlags As Long) As Long
#Else
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
        (ByVal hWnd As Long, ByVal nIndex As Long) As Long

    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
        (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

    Private Declare Function SetWindowPos Lib "user32" _
        (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _
         ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _
         ByVal uFlags As Long) As Long
#End If

Private Const GWL_EXSTYLE As Long = -20
Private Const WS_EX_COMPOSITED As Long = &H2000000

Private Const SWP_NOMOVE As Long = &H2
Private Const SWP_NOSIZE As Long = &H1
Private Const SWP_NOZORDER As Long = &H4
Private Const SWP_FRAMECHANGED As Long = &H20

Public Sub Form_SetComposited(ByVal frm As Access.Form, ByVal EnableIt As Boolean)
    On Error Resume Next

#If VBA7 Then
    Dim h As LongPtr: h = frm.hWnd
    Dim ex As LongPtr: ex = GetWindowLongPtr(h, GWL_EXSTYLE)

    If EnableIt Then
        If (ex And WS_EX_COMPOSITED) = 0 Then
            Call SetWindowLongPtr(h, GWL_EXSTYLE, (ex Or WS_EX_COMPOSITED))
        End If
    Else
        If (ex And WS_EX_COMPOSITED) <> 0 Then
            Call SetWindowLongPtr(h, GWL_EXSTYLE, (ex And Not WS_EX_COMPOSITED))
        End If
    End If

    Call SetWindowPos(h, 0, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER Or SWP_FRAMECHANGED)
#Else
    Dim h32 As Long: h32 = frm.hWnd
    Dim ex32 As Long: ex32 = GetWindowLong(h32, GWL_EXSTYLE)

    If EnableIt Then
        If (ex32 And WS_EX_COMPOSITED) = 0 Then
            Call SetWindowLong(h32, GWL_EXSTYLE, (ex32 Or WS_EX_COMPOSITED))
        End If
    Else
        If (ex32 And WS_EX_COMPOSITED) <> 0 Then
            Call SetWindowLong(h32, GWL_EXSTYLE, (ex32 And Not WS_EX_COMPOSITED))
        End If
    End If

    Call SetWindowPos(h32, 0, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER Or SWP_FRAMECHANGED)
#End If

End Sub

 

Return.png.8f6df0d380e0a3056fed63d89fe36923.png مع ترك المساحة بالتفعيل أو التعطيل حسب الحاجة .

بحيث يتم الاستدعاء لها في حدث عند التحميل للنموذج بهذا الأسلوب البسيط :-

Form_SetComposited Me, True

Return.png.8f6df0d380e0a3056fed63d89fe36923.png أو التعطيل بهذا الشكل :-

Form_SetComposited Me, False

 

Return.png.8f6df0d380e0a3056fed63d89fe36923.png الملف مفتوح المصدر . لمن يرغب بالتجربة على مشروعه ، فضلاً وكرماً منه بإخباري بالنتيجة أن كانت ناجحة أم لا . علماً أنه تم استخدام الفكرة نفسها في إنشاء لعبة الأونو في هذا الموضوع مسبقاً ، والنتيجة كما شاهدتموها في أداء اللعبة والتعامل مع الصور بشكل دقيق لتخرج اللعبة كتجربة دون أي ترميش أو وميض عند حركة الصور داخل النماذج .

 

Anti Flicker.accdb

انشئ حساب جديد او قم بتسجيل دخولك لتتمكن من اضافه تعليق جديد

يجب ان تكون عضوا لدينا لتتمكن من التعليق

انشئ حساب جديد

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

سجل حساب جديد

تسجيل دخول

هل تمتلك حساب بالفعل ؟ سجل دخولك من هنا.

سجل دخولك الان
×
×
  • اضف...

Important Information