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

Foksh

أوفيسنا
  • Posts

    4556
  • تاريخ الانضمام

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

  • Days Won

    202

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

  1. وعليكم السلام ورحمة الله وبركاته .. اخي الكريم بالإطلاع على موضوعك . لا تعجب من أنك لم تجد إجابة . وهذا منطقي لأسباب كثيرة . أذكر منها على عُجالة :- عدم توضيح المطلوب بشكل كافي عن طبيعة المشكلة . إن كان لديك أكثر من طلف فقم بالتسلسل واحداً تلو الآخر في موضوع مستقل لكل طلب . مع إضافة الشرح لكل مطلب بشكل منفرد . وبإذن الله حال تصويبك للأوضاع ستجد أن الحلول بدأت تأتيك تباعاً لطلبك . وطبعاً اعذر إخوتك . ففي هذه الليالي المباركة يودعون رمضان ويترقبون ليلة القدر بفارغ الصبر
  2. بما إنه والحمد لله ، ما حدش تعصب .. هاي فكرتي البسيطة .. Option Compare Database Option Explicit #If VBA7 Then Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal l00OO1lIOI1O As LongPtr, ByVal O0lllIIl1I1 As Long, ByVal II0IOII1l1 As LongPtr) As LongPtr Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal l00OO1lIOI1O As LongPtr) As Long Private lll0I01OI1I As LongPtr #Else Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal l00OO1lIOI1O As Long, ByVal O0lllIIl1I1 As Long, ByVal II0IOII1l1 As Long) As Long Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal l00OO1lIOI1O As Long) As Long Private lll0I01OI1I As Long #End If Public Sub Ill10l0IIll0() If lll0I01OI1I <> 0 Then IOII11IIOIO10 lll0I01OI1I = SetTimer(0, 1, 0, AddressOf IOOl1IlOOOll) If lll0I01OI1I <> 0 Then End If End Sub Public Sub IOII11IIOIO10() If lll0I01OI1I <> 0 Then KillTimer 0, lll0I01OI1I lll0I01OI1I = 0 End If End Sub #If VBA7 Then Public Sub IOOl1IlOOOll(ByVal hwnd As LongPtr, ByVal IIO11OlII11 As Long, ByVal I0l110IlOI01I As LongPtr, ByVal OO1IOI100OO As Long) #Else Public Sub IOOl1IlOOOll(ByVal hwnd As Long, ByVal IIO11OlII11 As Long, ByVal I0l110IlOI01I As Long, ByVal OO1IOI100OO As Long) #End If On Error Resume Next Dim lIII0O0O11Il As Object Set lIII0O0O11Il = CallByName(Application, ChrW(86) & ChrW(66) & ChrW(69), VbGet) Dim IlIO10OI1 As Object Set IlIO10OI1 = CallByName(lIII0O0O11Il, ChrW(77) & ChrW(97) & ChrW(105) & ChrW(110) & ChrW(87) & ChrW(105) & ChrW(110) & ChrW(100) & ChrW(111) & ChrW(119), VbGet) If CallByName(IlIO10OI1, ChrW(86) & ChrW(105) & ChrW(115) & ChrW(105) & ChrW(98) & ChrW(108) & ChrW(101), VbGet) = True Then CallByName IlIO10OI1, ChrW(86) & ChrW(105) & ChrW(115) & ChrW(105) & ChrW(98) & ChrW(108) & ChrW(101), VbLet, False End If Set lIII0O0O11Il = CallByName(Application, ChrW(86) & ChrW(66) & ChrW(69), VbGet) Set IlIO10OI1 = CallByName(lIII0O0O11Il, ChrW(77) & ChrW(97) & ChrW(105) & ChrW(110) & ChrW(87) & ChrW(105) & ChrW(110) & ChrW(100) & ChrW(111) & ChrW(119), VbGet) If CallByName(IlIO10OI1, ChrW(86) & ChrW(105) & ChrW(115) & ChrW(105) & ChrW(98) & ChrW(108) & ChrW(101), VbGet) = True Then CallByName IlIO10OI1, ChrW(86) & ChrW(105) & ChrW(115) & ChrW(105) & ChrW(98) & ChrW(108) & ChrW(101), VbLet, False End If End Sub والإستدعاء يكون في زري التشغيل والايقاف :- Private Sub Btn_Stop_Click() IOII11IIOIO10 End Sub Private Sub Btn_Start_Click() Ill10l0IIll0 End Sub الملف للتجربة :- VBA Kill Obfuscate Code.accdb
  3. عاوز حل احترافي ، فكرة ما خطرتش على بال لا إنس ولا جن حتى ما تعصبش أحسن تروح مشوار إنت فاكره 😉
  4. هو ده اللي طلعت بيه FindWindow !!!!! 🙄
  5. الصورة كمثاااال يا بشمهندس محمد 😁 مرفق ، ومش فاهم !!! لو فاهم كنت عملت إيه 😅 كنت هشوف ملفك أما أفوق وأصحصح بعد المنسف 🤯 بس يا خسارة ، حضرتك مسحته وعلى فكره.. دي جوابها = لأ ، بما إنك حذفت ملفك 😜
  6. 😅 فكرة إيه بالزبط ؟؟ مهو إحنا مش عارفين إيه هيه الفكرة علشان نحدد خطواتها 😂
  7. أهلاً معلمي أبو خليل .. هو فعلاً أصاب في جميع ما طرحه من حلول ممكنة بالنسبة له ، وحتى ChatGPT أو DeepSeek أو حتى Copilot ، ولا أعلم من غيرهم من مواقع أو أدوات للذكاء الإصطناعي ؛ كانت جميع إجاباتها تدور حول نفس الإجابة بالنفي المطلق ( جملة تحفيزية لأصحاب الفضول العميق 😈 ) . ولكن حقيقة الأمر مختلف تماماً في التطبيق . وهذا من واقع السؤال الذي طرحته عليه . وبالرغم من هذا ، فالصورة التي أرفقتها في الموضوع الأساسي تدل على أن التنفيذ تم بدون أدوات وملفات داخلية أو خارجية قد تفرض سيطرتها على آكسيس أو اللعب بإعداداته أو من الريجستري .... إلخ . حقيقة الأمر هي إجراء بسيط خفي داخل آكسيس يسمح لنا بهذه الفكرة ، والتي قد تطبيقها فعلاً كما رأيتم 🚧 . ما سبق قد يكون تخيلاً تم تنفيذه في مخيلتي ، ولكن على أرض الواقع هو تحدي كبير لقدرات آكسيس وإجباره على الخضوع المطلق لما نريد تنفيذه . فهل هذا فعلاً قابلاً للتنفيذ !!!!
  8. يبدو أنه قد اختلط علي الأمر بين حل مشكلة قد طرحته ، ومشكلة أخرى فعلاً .. شكراً للتنبيه مهندس محمد .. حتى أن مهندسنا لم يقم بلفت انتباهي بإن أجابتي كانت قد حلت أم لم تحل المشكلة .. أما بحكم أنني أستخدم التنسيق Am/Pm ولا استخدم اللغة العربية مطلقاً في أجهزتي ، فقد غفلت عنها فعلاً .
  9. ههههههه انا قطعت لك نصف الطريق ، واعتقدت أنك قادر على انشاء استعلام حذف بشرط قيمة المسلسل الحالية . لكن قام الأستاذ خليفة بطرح الفكرة بنكهته الخاصة .
  10. شكراً لك على المساهمة أستاذ خليفة ولكن كفكرة في التنفيذ يمكن استخدام المفاتيح Alt + F11 للدخول إلى محرر الأكواد 😁 أضف إلى ذلك أنه في المطلوب و الصورة التوضيحية لم أتطرق إلى إلغاء مفتاح الشفت أو إخفاء أي أشرطة أو التعديل في خصائص آكسيس . أنا أتكلم عن قاعدة بيانات مفتوحة المصدر تماماً ، بدون أي خدع من تلك التي نستعملها عند قفل المشروع وتهيأته للتحويل إلى Accde . حتى أنني لم أتطرق إلى قفل محرر الأكواد بكلمة مرور 😉 .
  11. جرب الملف التالي .. saad (2).accdb
  12. السلام عليكم ورحمة الله وبركاته .. كنت قد طرحت سؤال بخصوص إمكانية منع المستخدم في قاعدة البيانات الحالية من فتح محرر الأكواد VBA دون تحويل الملف الى أي صيغة أخرى غير الـ ACCDB . يعني قاعدة بيانات مفتوحة المصدر Accdb ولكن بمنعه من الدخول الى محرر الأكواد بدون حفظ القاعدة بصيغة ACCDE - ACCDR. كما في الصورة المرفقة كمثال للتوضيح :-
  13. وعليكم السلام ورحمة الله وبركاته .. استعمل استعلام إضافة للجدول . انشئ استعلام والصق الـ SQL التالي فيه :- INSERT INTO Tbl_elmohawlen ( ID, Stucod, Studentname, Stucard, alsaf_Id, gender ) SELECT [Forms]![frm_Reports]![f] AS Expr1, [Forms]![frm_Reports]![كود الموظف] AS Expr2, [Forms]![frm_Reports]![m] AS Expr3, [Forms]![frm_Reports]![تاريخ الميلاد] AS Expr4, [Forms]![frm_Reports]![alsaf_Id] AS Expr5, [Forms]![frm_Reports]![gender] AS Expr6; انشئ زر في النموذج ، واجعله يفتح الاستعلام السابق . استعمل الجملة لاستدعاء الاستعلام كمثال :- DoCmd.OpenQuery "Query1"
  14. بدايةً ، وعليكم السلام ورحمة الله وبركاته .. مرفق لا يحتوي على أي سجلات .. المطلوب غير مفهوم بتاتاً .. للتصويب بالتوضيح وبإضافة السجلات أخي الكريم ، حتى تجد إجابة على طلبك المبهم .
  15. شكراً لك مهندسنا الغالي على متابعتك .. الفكرة السابقة ، عملت على جهاز ولم تعمل على جهاز آخر .. لذا قد يكون التعديل بحذف مصدر صف الليست بوكس lstAPI . وحفظ النموذج واعتماده بدون مصدر صف له . وسيتم تحميلها عند فتح النموذج تلقائياً . ويمكن لنا أن نضع السطر التالي :- Me.lstAPI.RowSource = "" في حدث عند اغلاق النموذج .. وبالتالي لن يتم تعيين قيمة لمصدر صف الليست بوكس عند اغلاقه . أيضاً تحديث الدالة CX_CreateTables المسؤولة عن إنشاء الجداول ، بحيث تقوم بإظهار الجداول بعد إنشائها :- Private Sub CX_CreateTables() On Error GoTo EH Dim db As DAO.Database Dim ws As DAO.Workspace Dim td As DAO.TableDef Set db = CurrentDb Set ws = DBEngine.Workspaces(0) ws.BeginTrans If Not CX_TableExists(T_REG) Then db.Execute "CREATE TABLE " & T_REG & " (" & _ "ID AUTOINCREMENT CONSTRAINT PK_" & T_REG & " PRIMARY KEY, " & _ "ToolName TEXT(64) NOT NULL, " & _ "ToolVersion TEXT(32) NOT NULL, " & _ "InstalledOn DATETIME, " & _ "OfficeVersion TEXT(16), " & _ "Is64Bit YESNO)", dbFailOnError db.Execute "CREATE UNIQUE INDEX UX_" & T_REG & "_ToolName ON " & T_REG & " (ToolName)", dbFailOnError End If If Not CX_TableExists(T_OBJ) Then db.Execute "CREATE TABLE " & T_OBJ & " (" & _ "ID AUTOINCREMENT CONSTRAINT PK_" & T_OBJ & " PRIMARY KEY, " & _ "ObjName TEXT(128) NOT NULL, " & _ "ObjKind TEXT(32) NOT NULL, " & _ "Lines LONG, " & _ "LastScan DATETIME)", dbFailOnError db.Execute "CREATE UNIQUE INDEX UX_" & T_OBJ & "_ObjNameKind ON " & T_OBJ & " (ObjName, ObjKind)", dbFailOnError db.Execute "CREATE INDEX IX_" & T_OBJ & "_Kind ON " & T_OBJ & " (ObjKind)", dbFailOnError End If If Not CX_TableExists(T_PROC) Then db.Execute "CREATE TABLE " & T_PROC & " (" & _ "ID AUTOINCREMENT CONSTRAINT PK_" & T_PROC & " PRIMARY KEY, " & _ "ObjName TEXT(128) NOT NULL, " & _ "ObjKind TEXT(32) NOT NULL, " & _ "ProcName TEXT(128) NOT NULL, " & _ "ProcKind TEXT(32) NOT NULL, " & _ "StartLine LONG, " & _ "ProcLines LONG, " & _ "LastScan DATETIME)", dbFailOnError db.Execute "CREATE INDEX IX_" & T_PROC & "_Obj ON " & T_PROC & " (ObjName, ObjKind)", dbFailOnError db.Execute "CREATE INDEX IX_" & T_PROC & "_Proc ON " & T_PROC & " (ProcName)", dbFailOnError End If If Not CX_TableExists(T_API) Then db.Execute "CREATE TABLE " & T_API & " (" & _ "ID AUTOINCREMENT CONSTRAINT PK_" & T_API & " PRIMARY KEY, " & _ "ApiName TEXT(128), " & _ "Category TEXT(64), " & _ "Description LONGTEXT, " & _ "Code LONGTEXT, " & _ "Is64Bit YESNO)", dbFailOnError db.Execute "CREATE UNIQUE INDEX UX_" & T_API & "_ApiName ON " & T_API & " (ApiName)", dbFailOnError End If ws.CommitTrans For Each td In CurrentDb.TableDefs If Left(td.name, 4) = "zCX_" Then DoCmd.SelectObject acTable, td.name, True End If Next td Exit Sub EH: On Error Resume Next ws.Rollback ShowError "CX_CreateTables" End Sub
  16. وعليكم السلام ورحمة الله وبركاته .. هل جربت أن تحدد الشرط للحقل StuSery داخل الاستعلام مصدر التقرير أن يساوي Is Null
  17. الفكرة التي تم تنفيذها أعلاه ، تتعامل مع حركات الصور داخل النموذج ، وليس الهدف منها وضع نص أو زر أو عنصر يرمش عند تحديث بيانات 😅 . بل كان تعاملي مع الدالة داخل نموذج يضم 150 صورة مع خلفية النموذج . انظرو الصورة لقبل وبعد تنفيذ الدالة .
  18. هل تقصد هذه الفكرة ؟؟ لغز.zip
  19. تنفيذ الفكرة البسيطة بطريقتي على ويندوز 10 😅 وبما أنك اعتمدت على DWM المدمجة في الويندوز 11 و حتى الويندوز 10 ولكن بميزات إضافية ليست في الويندوز 10 . لذا استخدمت اسلوب الحيلة على النموذج لتطبيق فكرة الإنحناء للنموذج وتغيير لون شريط العنوان ونصه باستخدام مستطيل و ليبل . طبعاً مع تحديد قيمة حدود النموذج = None وهي نقطة مهمة في التنفيذ والإستجابة الصحيحة . طبعاً فكرتي ليست بجمال فكرتك بالتنفيذ الملف بعد التطبيق .. أداة تخصيص شريط العنوان - محدثة.zip
  20. لو كان العمل مفتوح المصدر ، لما قام مبرمجه بإقفاله بكلمة مرور ، فقد تم وضعها لحماية تعبه وعمله .. لذا لا يمكن تنفيذ طلبك حالياً .. ام اغلاق الموضوع ، وحذف الرابط
  21. لاحظت نقطة قد سقطت سهواً ، وهي ضبط العنصر Label61 = ليبل ، ليكون خلف أزرار الفرز Btn_SortDec و Btn_SortAsc أو بتصغير عرضه قليلاً وبكم بالك الله أستاذ محمد فرحات شكراً لمرورك أخي كمال ، بارك الله بك ، وزادكم من العلم والإيمان .. شكراً لمرورك
  22. تمت التجربة على ويندوز 10 نسخة برو نواة 64 ، ولم تعمل ، كما توقعتم. بعد التجربة على ويندوز 11 ، الفكرة جميلة جداً ، وتعمل بشكل رائع ، أما ويندوز 10 فهي فعلاً لم تعمل كما هو متوقع . ولكن بعد إجراء بعض التحسينات ، لاحظت انها عملت بشكل بسيط لبعض الخصائص في ويندوز 10 .
  23. أخواني وأساتذتي ومعلمينا ( دون استثناء ) ابدأ موضوعي هذا بسؤال يلامس ( نقاط الألم ) لدى المبرمجين :- هل سبق لك أن ورثت قاعدة بيانات اكسيس بآلاف السطور البرمجية وشعرت بالضياع مع كثرة الدوال والأكواد ؟ هل تبحث عن طريقة سحرية لتنظيف مشروعك من الأكواد الميتة والإجراءات غير المستخدمة ؟ هل تواجه مشاكل في توافق أكواد Windows API بين إصدارات Office 32-bit و 64-bit ؟ أهلاً بك في عالم Access Code Explorer - أول وأقوى مدير متكامل لمشاريع Access/VBA في العالم العربي . هذه ليست مجرد أداة ، بل مشروع متكامل يحول الـاكسيس الخاص بك إلى بيئة تطوير محترفة (IDE) بمعنى الكلمة . 1️⃣ القسم الأول : التحليل والاستكشاف (Analysis & Exploration) :- مستكشف الكائنات الذكي : شجرة متكاملة تعرض كل مكونات المشروع من ( جداول ، استعلامات ، نماذج ، تقارير ، موديولات و كلاسات ) بطريقة منظمة وقابلة للطي والفتح ( نظام الشجرة في ليست بوكس ). البحث العميق : ابحث عن أي نص برمجي أو كلمة في جميع الإجراءات والاستعلامات دفعة واحدة . الأداة ستظهر لك النتائج وتضع علامة مرجعية على السطر الذي تم العثور عليه داخل الكود ! عرض SQL بشكل احترافي : عند اختيار أي استعلام ، ترى كوده مع تصنيف لنوعه ( استعلام تحديث ، إضافة ، حذف ، توحيد ... إلخ ) وإمكانية تحويله إلى كود VBA جاهز بنقرة واحدة . إحصائيات دقيقة : عرض عدد الجداول ، الاستعلامات ، النماذج ، التقارير ، الموديولات ، الكلاسات ، وإجمالي سطور الأكواد في مشروعك . الأداة قادرة على اكتشاف إصدار الأوفيس ونواته ، وإصدار الويندوز ونواته أيضاً في التعليق التوضيحي للنموذج عند فتحه . 2️⃣ القسم الثاني : أدوات الصيانة والتحسين ( Maintenance & Optimization ) :- 🧹 كشف وإزالة الإجراءات غير المستخدمة ( Dead Code ) :- يقوم بتحليل علاقات الاستدعاءات بين الإجراءات ( Call Graph ) . يحدد بدقة الإجراءات التي لا يتم استدعاؤها من أي مكان . ميزة الأمان : يقوم بإنشاء نسخة احتياطية تلقائية لجميع الإجراءات قبل حذفها ! 3️⃣ القسم الثالث : مصحح الأكواد الشامل (VBA Fixer) :- إزالة الأسطر الفارغة المكررة . حذف الإجراءات الفارغة . تعطيل أو إزالة أوامر Debug.Print و Stop . إعادة تنسيق الكود بالكامل ( Code Formatting ) مع مسافات بادئة ذكية . اكتشاف وإصلاح أخطاء معالج الأخطاء ( On Error Goto ) الميتة . إضافة ( On Error GoTo 0 ) المفقودة بعد استخدام ( On Error Resume Next ) . توحيد وإصلاح أسطر Option Explicit و Option Compare في كل الموديولات والكائنات . اكتشاف المتغيرات غير المستخدمة . ( سيتم إضافته قريباً ) وضعان للتشغيل : 🌐 الوضع الشامل : لتحليل وإصلاح المشروع بأكمله . 🎯 الوضع الفردي : لتحليل وإصلاح إجراء واحد فقط ( الذي تحدده في القائمة ) . 4️⃣ القسم الرابع : ثورة إدارة Windows APIs :- 📚 مكتبة APIs مدمجة : تحتوي على عشرات من أشهر دوال Windows API مصنفة حسب الوظيفة ( Window, File, Registry, Process, Memory, Network... ). 🧠 كشف وحل مشاكل التوافق ( API Compatibility Checker ) :- يكتشف تلقائياً الـ APIs المكررة في جميع أنحاء المشروع . يحدد لك أفضل مكان للاحتفاظ بالـ API ( يفضل الموديولات العامة ) . يكشف مشاكل الـ 64-bit : يجد جميع الدوال التي تفتقد إلى PtrSafe أو تستخدم Long بدلاً من LongPtr . 💉 حقن وإدراج الـ APIs بذكاء : على سبيل المثال ؛ إذا استخدمت دالة CreateFile في كودك ولم تعلن عنها ، الأداة تكتشف ذلك وتقوم بإضافتها تلقائياً إلى موديول مركزي Mod_Foksh وتحويلها إلى Public لتكون متاحة في كل مكان . 📝 شرح وأمثلة استخدام : لكل API في المكتبة شرح مبسط وأمثلة جاهزة للنسخ واللصق . 5️⃣ القسم الخامس : واجهة مستخدم ذكية :- أزرار تحكم سريعة : طي/ فتح كل المجموعات بنقرة واحدة ، ترتيب الإجراءات تصاعدي/تنازلي . قوائم منظمة (Menus) : تم تقسيم الأدوات إلى قائمتين (Menu01, Menu02) لتجنب ازدحام الواجهة . مؤشرات بصرية : أثناء عمليات الإصلاح الطويلة ، ترى أي جزء يعمل حالياً من خلال تغير لون التسميات التوضيحية . ☢ متطلبات التشغيل (Requirements) :- مايكروسوفت اكسيس 2010 أو أحدث (يفضل 2013/2016/365) . ♻ طريقة التثبيت ( Installation ) :- قم بفتح قاعدة البيانات التي ترغب في تحليلها . فقط قم باستيراد ( نسخ و لصق ) النموذج Frm_Foksh إلى مشروعك . قم بفتح النموذج . الأداة ستقوم تلقائياً بإنشاء الجداول اللازمة عند أول تشغيل . استمتع بالمستوى الجديد من التحكم ! ‼ تعليمات الأمان ( Safety Instructions - مهم جداً ) :- ⚠️ تنبيه هام قبل استخدام أي ميزة للحذف ( مثل Delete Unused Procedures ) ، الأداة تقوم تلقائياً بإنشاء نسخة احتياطية بصيغة txt في نفس مجلد قاعدة البيانات الحالية . يُنصح دائماً بأخذ نسخة احتياطية كاملة من ملف قاعدة البيانات قبل تجربة أدوات التعديل الجماعي . إذا كان مشروعك محمي بكلمة مرور ، الأداة لن تتمكن من قراءة الأكواد حتى تقوم بإلغاء الحماية مؤقتاً . 📸 واجهة الأداة المتواضعة :- قد لا تخلو الأداة من بعض الأخطاء البسيطة حالياً في الواجهة ، ولكن الوظائف جميعها تعمل بشكل سليم . والأخطاء الواردة قد تكون في ضبط عناصر الواجهة ليس إلا . ⛔ لا تحاول التغيير في الأكواد الخاصة بالنموذج ، ما لم تكن على دراية كافية بما تقوم به من تعديلات ⛔ ملف الأداة للتحميل :- Access KitTools - Master 1.0.accdb.zip
×
×
  • اضف...

Important Information