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

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

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

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

في طور تحسين الأداة الجديدة ( لم يعلن عنها بعد ) ، للتعامل مع الأكواد التي تعمل على 32 ولا تعمل على 64 ، ما زال العمل جاري على تحسين أداء الأداة ، بحيث من خلال النقاش المفتوح نأتي للوصول الى أفضل أداء ونتيجة .

مرفق صورة توضيحية للوضع الحالي للأداة ، مع طرح مثال لكود قبل وبعد التحويل الناتج من الأداة . 

 

Animation.gif.8751a6b08c2d9aacadc504bcf4df567e.gif

الكود الذي تمت التجربة عليه كمثال ( لا الحصر ) :-

Option Compare Database
Option Explicit
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As _
Any) As Long

Public Const WM_SETREDRAW = &HB
Public Sub FillChildren(twTree As MSComctllib.TreeView, rst As dao.Recordset, _
            ByVal nChild As MSComctllib.nodX, _
            strParentField As String, strIDField As String, _
            strTextField As String, Optional strTextField2 As Variant, Optional strTextField3 As Variant, Optional strTextField4 As Variant, Optional strTextField5 As Variant, _
            Optional strKeyPrefix As String, _
            Optional varImage As Variant, _
            Optional varImageRst As Variant, _
            Optional fBold As Boolean)
On Local Error GoTo FillChildren_Err

    Dim strCriteria As String, IMAGE As Variant, strPrefix As String, strText As String, newnodx As MSComctllib.nodX

    If strKeyPrefix = "" Then
        strPrefix = "a"
    Else
        strPrefix = strKeyPrefix
    End If

    If Mid(nChild.key, 2) = "0" Then
        strCriteria = BuildCriteria(strParentField, rst.Fields(strParentField).Type, "=" & Mid(nChild.key, 2) & " or is null")
    Else
        strCriteria = BuildCriteria(strParentField, rst.Fields(strParentField).Type, "=" & Mid(nChild.key, 2))
    End If
    rst.FindFirst strCriteria
    Do Until rst.NoMatch
        strText = Nz(rst(strTextField), " ")
        If Not IsMissing(strTextField2) Then strText = strText & (" " + rst(strTextField2))
        If Not IsMissing(strTextField3) Then strText = strText & (" " + rst(strTextField3))
        If Not IsMissing(strTextField4) Then strText = strText & (" " + rst(strTextField4))
        If Not IsMissing(strTextField5) Then strText = strText & (" " + rst(strTextField5))
        If Not IsMissing(varImageRst) Then
            IMAGE = rst(varImageRst)
        End If
        If (Not IsMissing(varImage)) And (Len(Nz(IMAGE)) = 0) Then
            IMAGE = varImage
        End If
        IMAGE = Nz(IMAGE, "Default")
        Set newnodx = twTree.Nodes.Add(nChild, tvwChild, strPrefix & rst(strIDField), strText, IMAGE)
        rst.FindNext strCriteria
    Loop

FillChildren_End:
On Error Resume Next
    Exit Sub

FillChildren_Err:
    Select Case Err.Number
        Case 35601, 35603
            'Image not found!!!
            IMAGE = "FlagDefault"

            Resume
        Case 35602
            'key not unique!!!
            Set newnodx = twTree.Nodes(strPrefix & rst(strIDField))
            Resume Next
        Case Else
            MsgBox "Error in FillChildren!!! " & Err.Number & Err.Description
            Stop
            Resume
    End Select
End Sub

 

النتيجة من الأداة بعد التحسينات والتعديلات :-

'Code converted to 64-bit compatibility By Foksh ( Officena.Net )
'Generated on: 2025-05-23 15:22:26
'Tool version:  Ver : 1.0

Option Compare Database
Option Explicit

#If VBA7 Then
    Public Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As LongPtr, ByVal wParam As Long, lParam As 
 Any) As Long
#Else
    Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
 (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As 
 Any) As Long

#End If

Public Const WM_SETREDRAW = &HB


Public Sub FillChildren(twTree As MSComctllib.TreeView, rst As dao.Recordset, _

            ByVal nChild As MSComctllib.nodX, _

            strParentField As String, strIDField As String, _

            strTextField As String, Optional strTextField2 As Variant, Optional strTextField3 As Variant, Optional strTextField4 As Variant, Optional strTextField5 As Variant, _

            Optional strKeyPrefix As String, _

            Optional varImage As Variant, _

            Optional varImageRst As Variant, _

            Optional fBold As Boolean)

On Local Error GoTo FillChildren_Err



    Dim strCriteria As String, IMAGE As Variant, strPrefix As String, strText As String, newnodx As MSComctllib.nodX



    If strKeyPrefix = "" Then

        strPrefix = "a"

    Else

        strPrefix = strKeyPrefix

    End If



    If Mid(nChild.key, 2) = "0" Then

        strCriteria = BuildCriteria(strParentField, rst.Fields(strParentField).Type, "=" & Mid(nChild.key, 2) & " or is null")

    Else

        strCriteria = BuildCriteria(strParentField, rst.Fields(strParentField).Type, "=" & Mid(nChild.key, 2))

    End If

    rst.FindFirst strCriteria

    Do Until rst.NoMatch

        strText = Nz(rst(strTextField), " ")

        If Not IsMissing(strTextField2) Then strText = strText & (" " + rst(strTextField2))

        If Not IsMissing(strTextField3) Then strText = strText & (" " + rst(strTextField3))

        If Not IsMissing(strTextField4) Then strText = strText & (" " + rst(strTextField4))

        If Not IsMissing(strTextField5) Then strText = strText & (" " + rst(strTextField5))

        If Not IsMissing(varImageRst) Then

            IMAGE = rst(varImageRst)

        End If

        If (Not IsMissing(varImage)) And (Len(Nz(IMAGE)) = 0) Then

            IMAGE = varImage

        End If

        IMAGE = Nz(IMAGE, "Default")

        Set newnodx = twTree.Nodes.Add(nChild, tvwChild, strPrefix & rst(strIDField), strText, IMAGE)

        rst.FindNext strCriteria

    Loop



FillChildren_End:

On Error Resume Next

    Exit Sub



FillChildren_Err:

    Select Case Err.Number

        Case 35601, 35603

            'Image not found!!!

            IMAGE = "FlagDefault"



            Resume

        Case 35602

            'key not unique!!!

            Set newnodx = twTree.Nodes(strPrefix & rst(strIDField))

            Resume Next

        Case Else

            MsgBox "Error in FillChildren!!! " & Err.Number & Err.Description

            Stop

            Resume

    End Select

End Sub

 

 

باب النقاش مفتوح لأي تعليقات وتوضيحات وتحديثات للجميع ..

الأداة حصرية وليس لها أي أساس في أي موقع أجنبي أو عربي ( فقط في أوفيسنا :clapping: )

 

*ملاحظة :-

الدعوة للنقاش لا تقتصر على من لديه خبرة في آكسيس فقط .

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

نحن نتكاتف هنا لنتشارك معرفتنا وعلمنا الذي علمنا إياه الله - ولا علم إلا علمه . لذا متأملاً منهم خصوصاً مشاركتنا أفكارهم :yes: .

 

V01.png.06a3ca25edff96ffbc9be5f56630c461.png

image.png.c7c1cc449dbf625b7fa791f32984c11c.png

image.png.b043a5d615a160123976cc92dd27b259.png

 

💥 الإداة بواجهتين ( عربي - انجليزي ) والرسائل والردود حسب كل لغة :smile: 

 

64.png.ed935d1c50d719737c9d83b5c0811df8.png   Pan.png.45f9842494a6aa7226fe95cd4691ae06.png 32.png.7629f9fbaca1030d9178855e280abd0c.png

Code Converter x64.zip85.95 kB · 8 downloads    Pan.png.45f9842494a6aa7226fe95cd4691ae06.png    Code Converter x32.zip80.96 kB · 5 downloads

 

طبعاً ، أتمنى ممن يرغب بتجربة الأداة بأول إصدار لها ، أن يزودني بالنتيجة التي قام بها على الكود ، بحيث :-

  1. ينشر في رده الكود الأصل ( الذي قام بتجربته ) ، والكود الناتج ( بعد تحويله من الأداة ) لتعم الفائدة ولمعرفة الأخطاء التي قد تحدث
    ( ولا شك أن الأداة تحتوي أخطاء كثيرة ، ولكن لإجراءاتكم بالإفادة ) .
  2. إن كان يملك الكود الصحيح والمنطقي ( الذي يعمل على النواتين ) ، فشاكراً له تزويدنا به للمقارنة .

 

Code Converter x32.zip80.96 kB · 5 downloads Code Converter x64.zip85.95 kB · 8 downloads

تم تعديل بواسطه Moosak
إضافة آخر التحديثات للموضوع الرئيسي 🙂
  • Like 2
قام بنشر
3 ساعات مضت, Foksh said:

الدعوة للنقاش لا تقتصر على من لديه خبرة في آكسيس فقط .

وعليكم السلام ورحمة الله وبركاته
اشارك برأي من باب المشاركة ولست خبيرا ,,,,, لأنك انت من طلب من غير الخبراء المشاركة 😃

عن تعديل الكود اعتقد يجب النظر في كل المتغيرات والدوال مثلا هناك دوال تحتاج الى تعديل للعمل في بيئة 64 bit مثل :::::::::::::::

1. FindWindow
2. GetWindowLong / SetWindowLong
3. GetTickCount
4. ShellExecute
5. Sleep
6. GetSystemMetrics
7. GetCursorPos
8. OpenProcess
9. CreateFile

                                                                          والله اعلم

  • Like 1
قام بنشر

اداة مهمة تختصر الوقت والجهد ..

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

وكما يقولون .. كل شيء بوقته حلو

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

وعليكم السلام

 

اهلا اخي فادي 🙂

اهم شيء في هذا الموضوع، هو الرجوع الى تعليمات مايكروسوفت في التعامل مع دوال نواة 64 بت ، في الرابط التالي: https://www.microsoft.com/en-us/download/details.aspx?id=9970

ملف النص في الرابط اعلاه يعطيك تفاصيل الدالة على نواة 64 بت.

 

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

image.png.4de31c318332826e7f8f957994316034.png

والمسألة لا تتوقف عند هذا السطر فقط، فهناك دوال معقدة تحتاج الى استعمال if# في دالتي الخاصة.

 

 

رجاء قراءة الموضوعين التاليين ، فطريقة العمل تختلفان ، وفيهما بعض الامثلة المختلفة:

.

.

 

 

  • Like 1
قام بنشر

اعتقد بعد هذه الكوكبة من علمائنا الافاضل ..... وفي هذا الموضوع المهم والحيوي واقتراب موعد عدم اثراء أي برامج تعتمد عى 32 بت ...... وحتى تحصين برامجنا التي نعمل عليها .

لابد من مناقشتها وهنا فرصة عظيمة لذلك . ولكي تتم المناقشة لابد من مشاركة مهندسنا (أبو جودي) الذي نأمل أن يشاركنا في هذا الطرح . تحياتي للجميع .:fff:

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

  

8 ساعات مضت, ناقل said:

وعليكم السلام ورحمة الله وبركاته
اشارك برأي من باب المشاركة ولست خبيرا ,,,,, لأنك انت من طلب من غير الخبراء المشاركة 😃

أهلا بأخي @ناقل ، يسعدني مرورك وتعقيبك على الموضوع ، رغم انك تسرعت في الحكم علي 😁😁

بالعكس ، أساتذتي الخبراء من المستهدفين بالمشاركة في هذا النقاش ( طبعاً مع احترامي الكامل لحرية ابداء الرأي ) ، انظر ..

11 ساعات مضت, Foksh said:

هم معنيين خصوصاً بالمشاركة وإبداء الرأي

 

وتعقيباً على ما أسلفت تالياً :-

8 ساعات مضت, ناقل said:

عن تعديل الكود اعتقد يجب النظر في كل المتغيرات والدوال مثلا هناك دوال تحتاج الى تعديل للعمل في بيئة 64 bit مثل :::::::::::::::

1. FindWindow
2. GetWindowLong / SetWindowLong
3. GetTickCount
4. ShellExecute
5. Sleep
6. GetSystemMetrics
7. GetCursorPos
8. OpenProcess
9. CreateFile

ففي الحسبان ان شاء الله ، ولكن الصورة والفكرة السابقة من الإصدار الأول للتجارب الأولى لجمع التعليقات والمعلومات التي نستفيد منها ..

 

 

 

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

اداة مهمة تختصر الوقت والجهد ..

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

وكما يقولون .. كل شيء بوقته حلو

معلمي الفاضل @ابوخليل ، أُسعد بمشاركتكم ، واتمنى أن أصل في النهاية إلى أداة تحقق الجزء الأكبر من فكرتها وهدفها ..

بانتظار توجيهاتكم وإفاداتكم وتصويبكم لي لطرق تسهم في إنجاح المشروع ..

 

 

 

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

اهلا اخي فادي 🙂

اهم شيء في هذا الموضوع، هو الرجوع الى تعليمات مايكروسوفت في التعامل مع دوال نواة 64 بت ، في الرابط التالي: https://www.microsoft.com/en-us/download/details.aspx?id=9970

ملف النص في الرابط اعلاه يعطيك تفاصيل الدالة على نواة 64 بت.

معلمي الفاضل @jjafferr ، يسعدني توجيهكم لي بهذه الروابط ، وانا فعلاً قد قرأتها بشكل غير مفصل ، ولكن قراءتي لها كانت محاولة لرسم خطواتي التي سأبدأ بها ، وطبعاً لا بد من تغيير اتجاهي في الوقت الحالي واتجاه بوصلتي ، طبعاً بهدف البدء بخطوات صحيحة تالياً ..

 

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

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

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

 

 

 

 

4 ساعات مضت, kkhalifa1960 said:

اعتقد بعد هذه الكوكبة من علمائنا الافاضل ..... وفي هذا الموضوع المهم والحيوي واقتراب موعد عدم اثراء أي برامج تعتمد عى 32 بت ...... وحتى تحصين برامجنا التي نعمل عليها .

 

أخي الأستاذ @kkhalifa1960 ، يسعدني تعليقكم ومروركم ، وإثراءكم وملاحظتكم كثيراً .. ونأمل أن نتعرف على أفكاركم لاحقاً باحثين عن سبيل واسع الأفق لتحقيق المطلوب .

أما فيما يخص هذا الجزء ..

4 ساعات مضت, kkhalifa1960 said:

ولكي تتم المناقشة لابد من مشاركة مهندسنا (أبو جودي) الذي نأمل أن يشاركنا في هذا الطرح .

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

 

 

أشكر لكم جميعاً مروركم :wub:

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

تم تعديل بواسطه Foksh
قام بنشر
4 دقائق مضت, Foksh said:

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

اخي الفاضل انا لم اتسرع ولم احكم عليك .... ولكني حكمت على نفسي باني لست خبير ... وفعلا انا تلميذ لكم اخي الفاضل ... المقامات محفوظة

  • Like 1
قام بنشر
3 دقائق مضت, ناقل said:

ولكني حكمت على نفسي باني لست خبير ... وفعلا انا تلميذ لكم اخي الفاضل ... المقامات محفوظة

من تواضع لله رفعه ، وانت من الأساتذة الذين لهم بصماتهم وأسلوبهم :wub: 

  • Thanks 1
قام بنشر

أولاً  :- تمنياتي لأستاذنا ابوجودي الشفاء العاجل باذن الله .

ثانياً :- 

📌 هذا مرجع دوال VBA المتوافقة مع النواتين (32 بت و64 بت)

هذا المرجع يحتوي على جميع الدوال الشائعة التي يمكن استخدامها في VBA داخل Access، مع دعم للنواتين 32 بت و64 بت باستخدام #If VBA7 Then.

🔹 1- دوال استدعاء Windows API

#If VBA7 Then
    Public Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As LongPtr, ByVal wParam As Long, lParam As Any) As Long
#Else
    Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
#End If
  • SendMessage – إرسال رسائل للنوافذ داخل النظام.

  • PostMessage – إرسال رسائل غير متزامنة.

  • FindWindow – العثور على نافذة بناءً على عنوانها.

  • ShowWindow – التحكم في عرض أو إخفاء النافذة.

  • GetSystemMetrics – الحصول على معلومات حول إعدادات النظام.

🔹 2- دوال التعامل مع الملفات

#If VBA7 Then
    Public Declare PtrSafe Function CopyFile Lib "kernel32" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
#Else
    Public Declare Function CopyFile Lib "kernel32" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
#End If
  • CopyFile – نسخ ملف من موقع إلى آخر.

  • DeleteFile – حذف ملف معين.

  • FindFirstFile – البحث عن أول ملف يتطابق مع نمط معين.

  • FindNextFile – البحث عن الملفات التالية بنفس النمط.

🔹 3- دوال النظام (System Functions)

#If VBA7 Then
    Public Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
#Else
    Public Declare Function GetTickCount Lib "kernel32" () As Long
#End If
  • GetTickCount – الحصول على عدد الثواني منذ تشغيل النظام.

  • GetWindowsDirectory – استرجاع مسار مجلد Windows.

  • GetSystemMetrics – استرجاع بيانات عن إعدادات النظام.

🔹 4- دوال إضافية مفيدة

#If VBA7 Then
    Public Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As Any) As Long
#Else
    Public Declare Function GetCursorPos Lib "user32" (lpPoint As Any) As Long
#End If

 

  • GetCursorPos – الحصول على موقع مؤشر الفأرة.

  • SetCursorPos – تعيين موقع جديد لمؤشر الفأرة.

  • GetActiveWindow – استرجاع النافذة النشطة حاليًا.

  • GetDesktopWindow – استرجاع نافذة سطح المكتب الرئيسية.

 

 

  • Like 1
قام بنشر (معدل)
10 دقائق مضت, kkhalifa1960 said:

📌 هذا مرجع دوال VBA المتوافقة مع النواتين (32 بت و64 بت)

 

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

 

طبعاً ومعلومة مهمة بالنسبة لي ، أن الأداة ستحمل اسم فريق المنتدى / قسم آكسيس كاملاً لدعمهم الوفير في المعلومات .. :smile:

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

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

اشكر الاستاذ المهندس Foksh  والشكر موصول لكل من شارك في إثراء هذا الموضوع بعلمه

وجهده وذهنه من الأساتذة الكبار في مجال البرمجة وتعليل البيانات ... ولست منهم ولكني مجرد هاوٍ 

... والذي اصبح حتمياً الخوض فيه والحصول على مخرجات فنية رائعة كما عودتمونا

فلله دركم .. ونحن من علمكم ننتهل

زادكم الله من علمه وفضله 

  • Like 1
قام بنشر
4 ساعات مضت, jjafferr said:

الموقع التالي فيه روابط وفيها برنامج اكسس ممكن الاستفادة منه (البرنامج للبيع، بس يمكنك انزاله بلاش) :

https://isladogs.co.uk/32-64-bit-conversion/index.html

 

 

بارك الله بكم معلمنا الفاضل وأستاذي الجليل ,,

قيّمة جداً وثمينة مراجعك التي تشير إليها في مشاركاتك ، وهي ليست بقيمة و نُبل أخلاقكم وعلمكم  :wub:

 

 

4 ساعات مضت, عاشق_الرقي said:

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

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

أشكرك أخي على مشاعرك وكلامك اللطيف ، :wub: :fff:

قام بنشر

أفكار لامعة أخي فادي @Foksh 😊👌🌷 .. لك أجمل تحية 😊🌹

ما أجمل هذي الأدوات اللي تسهل العمل وتضع الحلول الجذرية لأغلب المشاكل اللي تواجهنا ..

............

بصراحة أحاول أحشر نفسي في الموضوع لكن ما عندي شي أضيفة بعد ملاحظات فطاحلة الأكسس هنا 😅🖐

لذلك سألتزم المتابعة والاستفادة وجني الثمار بعد نضجها إن شاء الله 😄🌹🌟🌷

  • Like 1
قام بنشر
15 ساعات مضت, Moosak said:

أفكار لامعة أخي فادي @Foksh 😊👌🌷 .. لك أجمل تحية 😊🌹

ما أجمل هذي الأدوات اللي تسهل العمل وتضع الحلول الجذرية لأغلب المشاكل اللي تواجهنا ..

............

بصراحة أحاول أحشر نفسي في الموضوع لكن ما عندي شي أضيفة بعد ملاحظات فطاحلة الأكسس هنا 😅🖐

لذلك سألتزم المتابعة والاستفادة وجني الثمار بعد نضجها إن شاء الله 😄🌹🌟🌷

أهلاً بك مهندسنا الغالي 💐

بالعكس ، قد تكون الكلمات القليلة تحمل في طياتها معاني وفوائد كبيرة 😇 .

 

جاري حالياً العمل على إصدار النسخة الأولى معدلةً ، وسيتم طرحها قريباً ( غير مفتوحة المصدر ) - للتجارب فقط لحين الخلاص من أكثر المشاكل التي أواجهها في إنشاء مرونة بالنتيجة 😅 .

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

cooltext483251013536387.png.824472667ef1a1f9d14c2b70eb9398c9.png

دوال تعمل على نواة 32 فقط ، غير تلك التي في المشاركات السابقة ، للتجارب الشبه نهائية على الإصدار الأول من الأداة .

مع ارفاق الكود الموافق له في 64 بالشكل الصحيح والمنطقي .

تم تعديل بواسطه Foksh
اضافة عبارة
قام بنشر (معدل)

V01.png.06a3ca25edff96ffbc9be5f56630c461.png

image.png.c7c1cc449dbf625b7fa791f32984c11c.png

image.png.b043a5d615a160123976cc92dd27b259.png

 

💥 الإداة بواجهتين ( عربي - انجليزي ) والرسائل والردود حسب كل لغة :smile: 

 

64.png.ed935d1c50d719737c9d83b5c0811df8.png   Pan.png.45f9842494a6aa7226fe95cd4691ae06.png 32.png.7629f9fbaca1030d9178855e280abd0c.png

Code Converter x64.zip    Pan.png.45f9842494a6aa7226fe95cd4691ae06.png    Code Converter x32.zip

 

طبعاً ، أتمنى ممن يرغب بتجربة الأداة بأول إصدار لها ، أن يزودني بالنتيجة التي قام بها على الكود ، بحيث :-

  1. ينشر في رده الكود الأصل ( الذي قام بتجربته ) ، والكود الناتج ( بعد تحويله من الأداة ) لتعم الفائدة ولمعرفة الأخطاء التي قد تحدث
    ( ولا شك أن الأداة تحتوي أخطاء كثيرة ، ولكن لإجراءاتكم بالإفادة ) .
  2. إن كان يملك الكود الصحيح والمنطقي ( الذي يعمل على النواتين ) ، فشاكراً له تزويدنا به للمقارنة .

 

Code Converter x32.zip Code Converter x64.zip

تم تعديل بواسطه Foksh
تنسيق الموضوع
  • Like 1
قام بنشر (معدل)

cooltext483441471967649.png.13ee3cc1e5b43d0c5fbf72119274c3ad.png

large.Sooon.png.176a883d2ef932a161eb0d85

 

📌 مقدمة عن الأداة :-

أقدم لكم أداة متقدمة لتحويل أكواد API في آكسيس من الإصدارات القديمة والحديثة ، لتكون متوافقة مع أنظمة 64-bit مع الحفاظ على التوافق مع أنظمة 32-bit . هذه الأداة تم تطويرها خصيصاً لمطوري ومبرمجي قواعد البيانات الذين يعانون من مشاكل التوافق عند الترقية إلى إصدارات أوفيس 64-bit .

 

🎯 المشكلة التي تحلها الأداة :-

مع إصدار أوفيس 64-bit ، تغيرت بنية المؤشرات والأنواع الخاصة بمناولة النوافذ (Handles) من Long (32-bit) إلى LongPtr (64-bit) . هذا التغيير جعل معظم إعلانات API القديمة غير صالحة للعمل على الإصدارات الجديدة ، مما يتطلب تعديلها يدوياً لها .

 

Dot.pngما الجديد في التحديث الجديد ؟

 

small.Blue-check.png.685b9b4d755a1579b52 ميزات الأداة الرئيسية والمحدثة :-

  1. تحويل تلقائي للإعلانات :- تقوم بتحويل إعلانات API من صيغة 32-bit إلى صيغة مزدوجة ( 32 و 64 ) متوافقة مع كلا النظامين .
  2. دعم أنواع البيانات الخاصة :- تدعم الأنواع المعرفة من المستخدم (User-Defined Types) مثل RECT , POINTAPI وغيرها .
  3. تحليل ذكي للكود :- تتعرف على المتغيرات التي تحتاج تحويلاً وتعدلها تلقائياً .
  4. حفظ التوافق مع الإصدارات القديمة :- تحافظ على عمل الكود على أنظمة 32-bit أثناء إضافة دعم 64-bit .
  5. واجهة سهلة الاستخدام :- توفر واجهة بسيطة لتحويل الأكواد بنقرة واحدة .

 

small.Blue-check.png.685b9b4d755a1579b52 كيف تعمل الأداة ؟

  • تعتمد الأداة على عدة خطوات ذكية لتحليل الكود وإجراء التحويل :-

    1. تحليل الإعلانات :- تفحص كل إعلانات API لتحديد ما إذا كانت تحتاج إلى تعديل أم لا !!!

    2. تحديد أنواع البيانات :- تتعرف على المتغيرات من نوع Long التي تمثل مؤشرات أو مقابض (Handles) بشكل تلقائي وذكي .

    3. إنشاء كود مشروط :- تولد كوداً يستخدم التعليمة الشرطية #If VBA7 And Win64 Then للتفريق بين النظامين .

    4. الحفاظ على الهيكل الأصلي :- تحافظ على التعليقات والتنسيق الأصلي للكود قدر الإمكان . ( باللغة الإنجليزية حالياً) .

 

small.Blue-check.png.685b9b4d755a1579b52 أنواع API التي تتعامل معها الأداة :-

تتعامل الأداة مع مجموعة واسعة من إعلانات API ، بما في ذلك :-

  • إدارة النوافذ (User32.dll)
  1. FindWindow, GetWindow, SetWindowPos
  2. SendMessage, PostMessage
  3. GetWindowRect, GetWindowText
  • إدارة الذاكرة والعمليات (Kernel32.dll)
  1. VirtualAlloc, VirtualFree
  2. OpenProcess, CreateProcess
  3. GetModuleHandle, GetProcAddress
  • إدارة التسجيل (Advapi32.dll)
  1. RegOpenKey, RegCreateKey
  2. RegQueryValue, RegSetValue
  • إدارة واجهة المستخدم
  1. CreateDC, CreateCompatibleDC
  2. SelectObject, DeleteObject

 

small.Blue-check.png.685b9b4d755a1579b52 الخصائص الفنية للأداة :-

  • الدقة في التحويل :- تتعرف الأداة على السياقات المختلفة للمتغيرات من نوع Long لتحديد ما إذا كانت تمثل مقابض تحتاج للتحويل .
  • دعم اللغات :- تدعم الواجهة اللغتين العربية والإنجليزية .
  • التحقق من الأخطاء :- تحتوي على آلية للتحقق من الأخطاء المحتملة أثناء التحويل .
  • التعامل مع الاستثناءات :- تتعرف على الدوال التي لا تحتاج للتحويل مثل GetVersion وGetTickCount .

 

 

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

ماشاء الله عليك باش مهندس @Foksh 🙂🌹

اللي أجمل من التنفيذ هو الفكرة نفسها .. فتح الله عليك 😊
 

مبدأيا وأول تجربة للأداة .. شوف أنت واحكم بنفسك 😁:
 

' --------------------------<<  المصدر  >>----------------------

Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

' --------------------------<<  النــاتج  >>----------------------

'===================================================
' API Code Converter for Dual Compatibility (32-bit & 64-bit)
' Developed By Foksh (Officena.Net)
' Generated on: 2025-05-29 08:45:50
' Tool version:  v1.2
'===================================================

#If VBA7 And Win64 Then
    ' 64-bit declarations
    Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
#Else
    ' 32-bit declarations
    Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
#End If

 

حاسس أنه ماشي تغير في دالة ال API :rol:
أو فيه شي ناقص (PetrSafe) مثلا  ؟؟!! 🤔

وللفائدة هذي مكتبات كبيرة لأكواد ال API ممكن تستفيد منها :
https://binaryworld.net/Main/Api.aspx?L=3
http://vbnet.mvps.org/

  • Like 1
قام بنشر

التجربة الثانية :

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
  ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As _
  Long
Private Const KEYEVENTF_KEYUP = &H2


' Get the current state of the NumLock key

Function GetNumLockKey() As Boolean
  GetNumLockKey = GetKeyState(vbKeyNumlock)
End Function


Sub SetNumLockKey(ByVal newState As Boolean)
  ' if the current state must be changed
  If CBool(GetKeyState(vbKeyNumlock)) <> newState Then
    ' programmatically press and release the NumLock key
    keybd_event vbKeyNumlock, 0, 0, 0
    keybd_event vbKeyNumlock, 0, KEYEVENTF_KEYUP, 0
  End If
End Sub

والناتج :

'===================================================
' API Code Converter for Dual Compatibility (32-bit & 64-bit)
' Developed By Foksh (Officena.Net)
' Generated on: 2025-05-29 09:11:57
' Tool version:  v1.2
'===================================================

Private Const KEYEVENTF_KEYUP = &H2

#If VBA7 And Win64 Then
    ' 64-bit declarations
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
  ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As _
  Long
#Else
    ' 32-bit declarations
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
  ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As _
  Long
#End If

:rol:

أولا : ما أضاف الدوال  GetNumLockKey   و    SetNumLockKey   في الناتج تماما ..!

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

image.png.5bf62abf407166e239d8d3f2f7f66ff3.png

  • Like 1
قام بنشر
2 ساعات مضت, Moosak said:

اللي أجمل من التنفيذ هو الفكرة نفسها .. فتح الله عليك 😊

ولأجمل هو تشريفكم لنا بملاحظاتكم ومروركم العطر .. بارك الله فيكم ، وهي ما زالت في طور التحديث :jump:

2 ساعات مضت, Moosak said:

مبدأيا وأول تجربة للأداة .. شوف أنت واحكم بنفسك 😁:

كلامك سليم ، وكانت من ضمن الاحتمالات التي مررت بها ، ولكن لله الحمد تم إضافة التعديل وأصبحت النتيجة لأول تجربة لك =

'===================================================
' API Code Converter for Dual Compatibility (32-bit & 64-bit)
' Developed By Foksh (Officena.Net)
' Generated on: 2025-05-29 10:34:09
' Tool version:  v1.3
'===================================================

#If VBA7 And Win64 Then
    ' 64-bit declarations
    Public Declare PtrSafe Function CopyFile Lib "kernel32" Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
#Else
    ' 32-bit declarations
    Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA"(ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long)As Long 
#End If

لمتابعتكم إن كانت النتيجة صحيحة ..

 

2 ساعات مضت, Moosak said:

وللفائدة هذي مكتبات كبيرة لأكواد ال API ممكن تستفيد منها :

جزاااكم الله خيراً تم الاطلاع واكتساب الفائدة :yes: .

 

والتجربة الثانية ، بعد التحديثات الحالية كانت نتيجتها =

'===================================================
' API Code Converter for Dual Compatibility (32-bit & 64-bit)
' Developed By Foksh (Officena.Net)
' Generated on: 2025-05-29 10:37:15
' Tool version:  v1.3
'===================================================

Private Const KEYEVENTF_KEYUP = &H2

' Get the current state of the NumLock key

Function GetNumLockKey() As Boolean
  GetNumLockKey = GetKeyState(vbKeyNumlock)
End Function

Sub SetNumLockKey(ByVal newState As Boolean)
  ' if the current state must be changed
  If CBool(GetKeyState(vbKeyNumlock)) <> newState Then
    ' programmatically press and release the NumLock key
    keybd_event vbKeyNumlock, 0, 0, 0
    keybd_event vbKeyNumlock, 0, KEYEVENTF_KEYUP, 0
  End If
End Sub

#If VBA7 And Win64 Then
    ' 64-bit declarations
    Private Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, _ ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Private Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Long
#Else
    ' 32-bit declarations
    Private Declare Sub keybd_event Lib "user32"(ByVal bVk As Byte, _ ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Private Declare Function GetKeyState Lib "user32"(ByVal nVirtKey As Long)As _ Long 
#End If

هل توافق المطلوب أم لا ؟؟

 

2 ساعات مضت, Moosak said:

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

 

هذه النقطة كنت قد سهوت عنها من كثرة التجارب ، وكنت اعتمد القص بدلاً من النسخ 😅 .
سيتم اعادة الكود للنسخ بدلاً من القص .

  • Like 1
قام بنشر

سلمت الأنامل ياصاحب اللمسات الذهبية 😊:fff:

بعد التعديل المشكل الأول :

image.png.02ebeb66cec5640fc6c7e75e3512a455.png

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

image.png.7b097c56edeef8d1fb673bdf9dd432c3.png

قام بنشر (معدل)
1 ساعه مضت, Moosak said:

سلمت الأنامل ياصاحب اللمسات الذهبية 😊:fff:

بعد التعديل المشكل الأول :

image.png.02ebeb66cec5640fc6c7e75e3512a455.png

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

image.png.7b097c56edeef8d1fb673bdf9dd432c3.png

جميل جداً ..

 

ستتم المتابعة

تم تعديل بواسطه Foksh

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.

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

×
×
  • اضف...

Important Information