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

Ahmos

الخبراء
  • Posts

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

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

  • Days Won

    3

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

  1. ممكن تتأكد من مساحة قاعدة البيانات وبعد كدا تجرب تعمل ضغط واصلاح من هنا
  2. ممكن تقولي قاعدة البيانات فيها كام سجل وكمان في كام سجل اتنقل للخانة الجديدة ووقف فين وعموما الدالة ممكن تستخدمها من خلال إستعلام تحديث ابعتلي المعلومات وان شاء الله اعدل علي الملف لما اكون قدام الجهاز
  3. هل من الممكن ان هناك بعض الخانات الفارغة في العمود NASS ؟
  4. أخي الكريم قمت بإضافة بعض الأعمدة لتسجيل الجزء الذي تم اقتطاعه من النص في حالة التطابق الملف بالمرفق 😁 في خانة allFoundMNO يتم تسجيل جميع النتائج المقتطعة اما في خانات الـ MNO يتم تسجيل فقط ما تم مطابقته وللعلم في هذا الكود حتي اعالج قيم المواضع المتأخرة افترضت ان الجزء المقتطع لن يتضمن اسم كتاب أخر حتي اتجنب البحث بأسماء الكتب الأخرى داخل الجزء المقتطع فما أقوم به هو البحث عن و( او و ( ويتم استبدالها باسم الكتاب و( لذا ان كنت تملك أمثلة لتجربة مثل هذه الحالات حتي نتبين الأمر واذا كنت ترغب بتعديل آلية البحث فلا أمانع فأنت المعني باختيار الأفضل والأنسب Smart_Search_Pages_V8.zip
  5. دائماً أترك النص الأساسي بدون تغير لأنه المرجع فقد قمت بعمل عمود أخر باسم (modifiedNass) ولكني تابعت التجارب عليه بغرض إستخراج الكتب وليس البحث النسخة بالمرفقات بها التعديل المطلوب "إن شاء الله" تم تعديل البحث ليتم داخل عمود النص الجديد كما تم إضافة زر لإعداد النص الجديد بانتظار تجربتك أخي الكريم Smart_Search_Pages_V7.zip
  6. هل يمكن مشاركة مثل هذه الأمثلة في قاعدة البيانات الأخيرة وإذا أمكنك إضافة المزيد من الكتب لقائمة الكتب وإذا كان هناك احتمال لإضافة بدائل أخرى لأسماء الكتب فيمكنك إضافة أعمدة لإضافتها للكود
  7. بعض التعديلات البسيطة ظهرت مع بعد إجراء بعض التجارب وهي لمعالجة النص الناتج كوجود سطر فارغ زائد علامات لا فائدة منها لذا تم إضافة بعض الأكواد لمعالجة مثل هذه الحالات Smart_Search_Pages_V6.zip
  8. تم عمل تعديلات بسيطة الملف بالمرفق مثال قبل وبعد إضافة كتاب Smart_Search_Pages_V5.zip
  9. أخي الكريم بارك الله فيك لقد قمت ببعض التعديلات ومن أثرها سرعة استخراج الكتب الملف بالمرفقات إجابةً علي أسألتك 1- الدالة تعتمد علي الاسم والرقم فهناك دالتين تعمل علي تجهيز النص نتكلم الان عن البحث باسم الكتاب ورقم الصفحة الدالة الاولي تقوم بقص النص من اول اسم الكتاب إلي الرقم المراد البحث عنه ومن ثم تعمل الدالة الثاني علي مطابقة النمط ولنحسم هذا الأمر يمكنك تجربة اسم غريب داخل جدول BOOKS فستجد انه لم يعد هناك نتائج للبحث ومن قبل كان هناك نتائج مثال : وبما أن دالة الاستخراج تستخدم نمط مطابقة مشابه فهي أيضاً تعتمد علي اسم الكتاب ولذلك الكتب التي لم يتم استخراجها ذلك بسبب عدم وجود اسم الكتاب في جدول BOOKSLIST للعلم دالة استخراج الكتب لا تبحث بالأرقام تعتمد فقط علي أسماء الكتب فالدالة تقوم أولا بعمل قائمة بأسماء الكتب وبدائلها من الجدول BOOKSLIST ثم نذهب بهذه القائمة علي كل نص ونبحث عن الاسم ثم نطابق نمط بعد الاسم لنستخرج الأرقام والاقواس وهكذا ولذلك إن لم يكن اسم الكتاب موجود في جدول أسماء الكتب فلن يتم استخراجه مازلت أحاول العمل علي فكرة استخراج المواضع المتأخرة والان أقوم باستخراجها بشكل منفصل إلي انا اصل الي طريقة سريعة لربطهم بأسماء الكتب التابعة لهم أسئل الله التوفيق والسداد لك ولي أخي الكريم بالنسبة لي سوف أسجل رد جديد حين أصل الي حل او تحديث جديد إن شاء الله بالنسبة لك لا تتردد أخي الكريم في طلب او مناقشة أي تعديل اللهم لك الحمد كله والشكر كله بالتوفيق Smart_Search_Pages_V4.zip
  10. الحمد لله والشكر لله بالتوفيق لو أمكن مشاركتها للتجربة
  11. السلام عليكم ورحمة الله وبركاته أخي الكريم لقد قمت بإضافة التعديل للبحث داخل النص عن اسم الكتاب أولاً ولم تتغير النتيجة كما أن الدالة بالفعل تعتمد في البحث عن اسم الكتاب ومع ذلك سأحاول ان اتحقق مرة أخرى إليك النسخة الجديدة في المرفقات وبها تم عمل الدالة المسؤولة عن استخراج الكتب وهي بالأساس تعتمد علي عدد أسماء الكتب المدخلة فقد أضفت اسم كتاب أسد الغابة حتي يظهر بالنتائج قد تأخذ بعض الوقت ولكن إذا كانت مفيدة فهي تستحق الحمد لله ولا حول ولا قوة إلا بالله Smart_Search_Pages_V3.zip فقط بقي أمر واحد وهو معالجة المواضع المتأخرة الحل المقترح في ذهني سيجعل الدالة تعمل لوقت طويل سأحاول التفكير مرة أخرى والله المستعان
  12. تفضلي أستاذة / حنــان الملف بالمرفق جميع الاكواد المضافة والمعدلة داخل مديول (New_Functions_Subs) الصورة : بعد القص : بعد تعديل المقاس : Cropping_Images_V1.zip
  13. لو محتاجه تعمليها بدون التعديل علي واجهة البرنامج ممكن نعملها لكن في تفاصيل لازم نجاوب عليها 1- الـ Sub_Form بيفتح باستعلام معني كدا ان محتوي الفورم نفسة فالغالب هيتغير كل مرة 2- فالحالة دي هنحتاج نميز كل سجل هل تم طباعته ام لا ودي ممكن نوصلها " إن شاء الله " نضيف عمود في الجدول 3- وممكن نضيف عمود كمان عشان عدد مرات الطباعة 4- هل هنحتاج نضيف حد أقصي وأين سنضيفه في الكود أم في الواجهة ؟ محتاج أعرف احتياجك بالظبط وإن شاء الله ربنا يوفقنا ونوصل للمطلوب الحمد لله والشكر لله بالتوفيق
  14. الملف المعدل بالمرفقــات *ملحوظة أكواد الطباعة الموجودة خـاصة بطابعة الـ SUB_FORM في حال كان هناك تقرير ستختلف أكواد الطباعة Safaa_New.accdb
  15. اللي فهمته 1- سيتم عمل اسكان لورقة 2- تريدي قص هذه الصورة لاستبعاد الأجزاء الغير مرغوب بها 3- تغير مقاس هذه الصورة فيما يخص النقطة رقم 2 - إذا أمكن مشاركة صورة للتجربة - حسب تصوري يجب أولاً معرفة جودة هذه الصورة حتي نتمكن من حساب البكسلز ومعرفة كيفية حساب الجزء المستبعد ثم قص الصورة فيما يخص النقطة رقم 3 فهمت من الصور ان المقاس المرغوب هو 8.5 * 11 بوصة(انش) وليس سم *ملحوظة هذا المقاس ليس A4 إنما US Letter Size A4 > 8.3 * 11.7 بوصلة A4 > 21 * 29.7 سم
  16. السلام عليكم ورحمة الله وبركاته الأستاذة صفاء يمكنك إضافة الكود التالي في الحدث عند النقر او في Public sub واستدعائه Dim msgResponse As VbMsgBoxResult Dim totalRecords As Integer Dim totalSeeReport As Integer Dim totalNotEmptyResult As Integer Dim totalEmptyResult As Integer Dim tableName As String tableName = "test_order_tbl" totalRecords = DCount("*", tableName) If totalRecords = 0 Then MsgBox "There are no records in Table : " & tableName, vbCritical + vbOKOnly, "Error : No Records" Exit Sub End If totalSeeReport = DCount("[see_report]", tableName, "[see_report]=false") totalNotEmptyResult = DCount("[see_report]", "test_order_tbl", "[see_report]=false and not isnull([result])") totalEmptyResult = DCount("[see_report]", "test_order_tbl", "[see_report]=false and isnull([result])") If totalSeeReport = totalEmptyResult Then MsgBox "No need To Print this Report", vbInformation + vbOKOnly, "No Need To Print" Exit Sub ElseIf totalSeeReport = totalNotEmptyResult Then ' Here you shuold add the print code to print all records Debug.Print "Report Printed" Else msgResponse = MsgBox("Only Some Results Exist" & vbCrLf _ & "Do you want to Print The report ?", vbQuestion + vbYesNo, "Do You want to Print ?") If msgResponse = vbYes Then ' Here you shuold add the print code to print all records Debug.Print "Report Printed" Else Debug.Print "Report will not be Printed" End If End If اما بخصوص هل تم طباعته من قبل وحتي لا نضيف أي شي لواجهة البرنامج فاقتراح إضافة عمود بالجدول او اثنين 1- نعم او لا إذا تم الطباعة 2- لعدد مرات الطباعة إذا كان هذا الاقتراح مناسب فيمكنك التعديل علي الملف ومشاركته مرة أخرى وإن شاء الله سأضيف الاكواد اللازمة لتحديثه
  17. الدالة بالفعل تبحث باسم الكتاب والرقم إذا امكنك تزويدي بمكتبة كبيرة او واحدة تضمن بعض الأمثلة كما ان فكرة استبدال الاسم بالفعل فكرة ممتازة اذا كنت تملك قاعدة بهذه الأسماء وبدائلها فيمكن العمل علي دالة تقوم بهذا الاستبدال كما يمكن أيضاً إعداد نص أخر سوف أقوم "إن شاء الله" باستبدال الاسم بوضعه داخل علامات مميزة مثال الأربعين في مناقب أمهات المؤمنين يصبح (BN) الأربعين في مناقب أمهات المؤمنين (BN) بشرط ان هذه العلامة لا توجد بالاحاديث وبهذه الطريقة يمكن عمل دالة تستخرج جميع الاحاديث داخل النص 1- عمل دالة لاستبدال جميع بدائل الأسماء لتوحيد الاسم داخل النص 2- استبدال (ص 3- يجب معالجة المواضع المتأخر بإيجاد طريقة لاستبدال و( باسم الحديث الذي يأتي قبلها 4- عمل دالة تتبع النمط التالي (BN) كلام (BN) مسافة او أي فواصل ( { وهكذا ثم ارقام ثم إلي أخر رقم او ) وبهذه الطريقة سيكون لدينا جميع الاحاديث داخل هذا النص ومن ثم يمكن التفكير في طريقة للعمل عليها وتحليلها بالتفكير فالنقطة رقم 3 فيمكن إن شاء الله عمل دالة تبحث قبل الـ و( حتي تصل إلي (BN) ثم تستبدل أسأل الله التوفيق والسداد
  18. الحمد لله والشكر لله أخي الكريم التعديل علي رأس الدالة يعني التعديل علي القيم الافتراضية فقط بمعني وضع كلمة Optional تجعل هذا الجزء أختياري وإذا وضعت له قيمة فتصبح هذه هي القيمة الافتراضية فمثلاً الدالة التي اشرت اليها تطلب 6 معلومات 4 لن تعمل بدونهم و2 اختياري وقد تم وضع قيمتهم الافتراضية إذا استخدمتها بدون المقاطع الاختيارية فتعتمد القيمة الافتراضية مثال إذا قمت بعمل دالة لجمع رقمين function sumTwoNums(num1 as integer,optional num2 as integer = 5) as integer هنا يلزم إدخال قيمة الرقم الأول num1 اما الرقم الثاني num2 فاختياري وفي حالة لم يتم إدخاله يعتبر موجود بقيمته الافتراضية 5 ويمكن وضع قيم اختيارية داخل الدالة بدون تحديد قيمتها الافتراضية function sumTwoNums(num1 as integer,optional num2 as integer ) as integer ولكل طريقة استخدامها كما ان هذه الدالة ليست هي المستخدمة داخل الكود بل هذه لان هذه الدالة تعود بـ True في حالة وجود تطابق او False اما الدالة الأخرى فتعود بقيم التطابق وإذا اردت التعديل فداخل الكود (nssjSmartSearch_byPage) هنا ------------------------------------- فكرتك حلوة وذكية ربنا يوفقك ويبارك فيك
  19. الأستاذة / حنان الأخوة الكرام تحية طيبة وبعد ،،، كما فهمت المطلوب هو دالة لتغير مقاس الصورة الدالة المستخدمة هي WIA_ResizeImage وهذه الدالة تقوم بتغير أبعاد الصورة بـ البكسل PIXEL والبكسلز تتغير بثلاث عوامل الطول والعرض والجودة لذا يجب العلم ان عند تحويل المقاس إلي 8.5 سم × 11 سم يجب أن يتم تحديد أيضاً الجودة المطلوبة والصور التالية توضح الأمر والان نأتي الي الأكواد 1- الاكواد المساعدة للتحويل من MM / CM / INCH إلي PIXELS يجب وضعها في بداية مديول جديد Option Explicit Public Enum convertFrom cm mm inch End Enum Public Enum qualityRes q72PPI = 72 q96PPI = 96 q150PPI = 150 q200PPI = 200 q300PPI = 300 End Enum Public Function ConvertToPixels(Value As Double, unit As convertFrom, resolution As qualityRes) As Double Dim inches As Double Dim finalResolution As Double If Value < 0 Then Debug.Print "ConvertToPixels", "Measurement value must be non-negative." ConvertToPixels = 0 Exit Function End If Select Case unit Case convertFrom.cm inches = Value / 2.54 Case convertFrom.mm inches = Value / 25.4 Case convertFrom.inch inches = Value Case Else Debug.Print "ConvertToPixels", "Invalid unit" ConvertToPixels = 0 Exit Function End Select finalResolution = resolution ConvertToPixels = inches * finalResolution End Function كما يمكن استخدام هذا الموقع للتحويل https://www.aspect-ratios.com/pixel-calculator/ كود التجربة Sub test_ChangeImageSize() Dim sourceImgPath As String Dim targetImgPath As String Dim imgWidth As Double Dim imgHight As Double Dim pxlWidth As Long Dim pxlHight As Long Dim keepAspectRatio As Boolean Dim overWrtieTargetFile As Boolean sourceImgPath = "C:\Users\user\Downloads\Compressed\Cropping an Image With Controll Print v.1\Images\4130001.jpg" targetImgPath = "C:\Users\user\Downloads\Compressed\Cropping an Image With Controll Print v.1\Images\4130001_2.jpg" imgWidth = 8.5 imgHight = 11 keepAspectRatio = False overWrtieTargetFile = True pxlWidth = Round(ConvertToPixels(imgWidth, cm, q300PPI), 0) pxlHight = Round(ConvertToPixels(imgHight, cm, q300PPI), 0) If WIA_ResizeImage(sourceImgPath, targetImgPath, pxlWidth, pxlHight, keepAspectRatio, overWrtieTargetFile) Then Debug.Print "Your Image Resized Successfully" Else Debug.Print "Something Went Wrong !" End If End Sub هذا الإختيار للحفاظ علي تناسق ابعاد الصورة وبالطبع انم لم تكن الابعاد المستخدمة متناسقة فستختلف النتيجة لذا تم عمله هكذا حتي تخرج الصورة بالأبعاد المحددة keepAspectRatio = False وهذا الاختيار للكتابة فوق الملف الجديد إذا كان موجود بالفعل overWrtieTargetFile = True بالتوفيق
  20. تفضل أخي الكريم الملف مع التطبيق علي الكود الأساسي والبحث باسم من خلال النموذج يمكنك التجربة وفي انتظار وملاحظاتك وتعديلاتك بالتوفيق Smart_Search_Pages_V2.zip
  21. اخي الكريم لم يتم تطبيق هذا التحديث علي الكود الاساسي فقط تم التعديل علي الدالة ويوجد كود لاختبارها وهو ( Sub Test_isBookInTextPageNum() وانا في انتظار أن تقوم بالتجربة ومن ثم تخبرني او نتناقش في اي البدائل أفضل ليتم تطبيقه
  22. أبدأ من حيث انتهيت الدالة الان تطابق وتبحث عن رقم الصفحة قبل او بعد الـ - يمكن ان نجعل الدالة تطابق النتائج القريبة فقط أي بعد الجزء و الفاصل فقد كنت أفكر في هذا الأمر والحمد لله تم التعديل علي الدالة إليك الدالة الجديدة ومثال عليها Public Function isBookInTextPageNum(ByVal fullText As String, _ ByVal BookName As String, _ ByVal partNum As String, _ ByVal pageNum As String, _ Optional exactPartOnly As Boolean = True, _ Optional Nearest As Boolean = True) As Boolean On Error GoTo ErrorHandler Dim regex As Object Dim matches As Object Dim match As Object Dim pattern As String Set regex = CreateObject("VBScript.RegExp") If exactPartOnly Then If Nearest Then pattern = "(?:" & BookName & "\s*[|_/\\ -]*\s*[\s*|'\(\[\{""]*" & partNum & "\s*[;¡`,|_/\\ -]*\s*[;¡`,|'\(\[\{""]*" & pageNum & ")" Else pattern = "(?:" & BookName & "\s*[|_/\\ -]*\s*[\s*|'\(\[\{""]*" & partNum & "\s*[;¡`,\d|_/\\ -]*\s*[;¡`,\d|'\(\[\{""]*" & pageNum & ")" End If Else If Nearest Then pattern = "(?:" & BookName & "\s*[|_/\\ -]*\s*[\s*|'\(\[\{""]*" & partNum & "\s*[;¡`,|_/\\ -]*\s*[;¡`,|'\(\[\{""]*" & pageNum & "\s*[|_/\\ -]*\s*[|'\)\(\[\{""]*" & ")" Else pattern = "(?:" & BookName & "\s*[|_/\\ -]*\s*[\s*|'\(\[\{""]*" & partNum & "\s*[;¡`,\d|_/\\ -]*\s*[;¡`,\d|'\(\[\{""]*" & pageNum & "\s*[\d|_/\\ -]*\s*[|'\)\(\[\{""]*" & ")" End If End If With regex .Global = False .MultiLine = True .IgnoreCase = False .pattern = pattern End With Set matches = regex.Execute(fullText) If Not matches Is Nothing And matches.count > 0 Then ' Debug.Print "Book(s) found in text:" ' For Each match In matches ' Debug.Print "Found : " & match.Value ' Next isBookInTextPageNum = True Else isBookInTextPageNum = False End If CleanAndExit: If Not regex Is Nothing Then Set regex = Nothing If Not matches Is Nothing Then Set matches = Nothing Exit Function ErrorHandler: Debug.Print "Error: " & Err.Description isBookInTextPageNum = False Resume CleanAndExit End Function إذا أردت طباعة النتائج وقت الاختبار فقط قم بتفعيل هذا الجزء داخل الدالة بحذف علامة ' ' Debug.Print "Book(s) found in text:" ' For Each match In matches ' Debug.Print "Found : " & match.Value ' Next الان كود التجربة والنتائج Sub Test_isBookInTextPageNum() Dim fullText As String Dim BookName As String Dim partNum As String Dim pageNum As String Dim result As Collection Dim match As Variant fullText = "The text includes book names and parts such as: bookName (1 \ 100 - 200 , 100-140), bookName (2 \ 150)." BookName = "bookName" partNum = "1" pageNum = "100" Debug.Print "------------------------------------" Debug.Print isBookInTextPageNum(fullText, BookName, partNum, pageNum, True, True) Debug.Print "------------------------------------" Debug.Print isBookInTextPageNum(fullText, BookName, partNum, pageNum, False, True) Debug.Print "------------------------------------" Debug.Print isBookInTextPageNum(fullText, BookName, partNum, pageNum, True, False) Debug.Print "------------------------------------" Debug.Print isBookInTextPageNum(fullText, BookName, partNum, pageNum, False, False) Debug.Print "------------------------------------" End Sub الان النتائج هي: ------------------------------------ Book(s) found in text: Found : bookName (1 \ 100 True ------------------------------------ Book(s) found in text: Found : bookName (1 \ 100 - True ------------------------------------ Book(s) found in text: Found : bookName (1 \ 100 - 200 , 100 True ------------------------------------ Book(s) found in text: Found : bookName (1 \ 100 - 200 , 100-140) True ------------------------------------ فقد قمت بإضافة للدالة تتيح الاختيار بين أربع احتمالات باستخدامهم معاً Optional exactPartOnly As Boolean = True هذا يخبر الدالة ان تقف عن وجود تطابق ام تكمل حتي أخر ( Optional Nearest As Boolean = True وهذا يخبرها ان تقف عند أقرب نتيجة ام تكمل لو أمكنك التجربة بالمثال السابق وتغير الأرقام وتخبرني أي اختيار نستخدم وللعلم إذا قمت بتعديلات التالية ستجد ان الدالة تعود بجميع النتائج المطابقة من داخل النص وهذا لن يفيد في طريقة الاستخدام الحالية ولكن يمكن استخدامها لاحقاً داخل الدالة نعدل التالي With regex .Global = True .MultiLine = True .IgnoreCase = False .pattern = pattern End With تم تغير من .Global = False إلي .Global = True والان نذهب للمثال ونعدل النص إلي fullText = "The text includes book names and parts such as: bookName (1 \ 100 - 200 , 100-140), bookName (1 \ 100)." ونكمل حديثنا بعد تجربة أخرى إن شاء الله
  23. السلام عليكم ورحمة الله وبركاته بسم الله الرحمن الرحيم وبه نستعين أخي الكريم فضلاً قم بتجربة الملف المرفق لدي بعض الأسئلة 1- فيما يخص الـ allFoundMNO فقد لا يتم تسجيلهم جميعاً وذلك لسبب كما في هذه الصورة ستجد ان نتائج البحث 5 ولكن الأرقام التي تم تسجيلها تختلف وذلك لان في هذا الجزء من الكود إذا وجد نتيجة مطابقة يتوقف عن البحث وإذا اردنا ان لا يتوقف حتي نسجل كل النتائج علينا ان نأخذ في الاعتبار - الوقت - هل نريد ان يتم تسجيل اول نتيجة مطابقة او أخر نتيجة في foundMNO وهو يحمل القيمة التي سيتم وضعها في MNO 2- عند المراجعة وجدت هذه الحالة وأردت السؤال عنها الأمر هنا ان اسم الكتاب مختلف فاذا كان الاسم الذي تم استخدامه في اول بحث هو الأربعين للبكري فستظهر النتيجة الاولي فقط أقصد انه لن يتم رصد بدائل كما ان آلية البحث تعتمد أن الخلية في العمود MNO تكون فارغه فاذا كان هناك نتيجة مسجلة فلن تبحث باسم الكتاب الموجود في BookName2 1- في انتظار مراجعتك وملاحظاتك وكيف تريد ان يتم تعديل آلية البحث حتي توفر لك أفضل نتيجة ممكنة 2- هل تملك الصفحات كاملة داخل قاعدة البيانات ؟ بالتوفيق Smart_Search_Pages_V1.zip
  24. إن شاء الله الأمر ميسر وسيفتح الله لنا ولكن أحاول ان استوضح منك لمعرفة الحالات التي قد نوجهها في المثال الذي ذكرته فكيف يحدث هذا و 132 و133 ارقام صفحات و 33 و 34 أيضاً سؤال رقم الصفة الموجود بالملف هو دائماً الرقم الأول صح ؟ مثل 132 و 33 آلية البحث التي أفكر بها بعد اسم الكتاب مسافات او لا ( او لا مسافات او لا ثم رقم الجزء ثم مسافات او لا ثم فاصل / سؤال هل يتغير الفاصل او هو دائمة / ثم مسافات او لا ثم رقم الصفحة فاذا كان رقم الصفحة الذي سنبحث عنها هو دائماً الرقم الأول بعد الجزء والفاصل وسوف نعتمد هذه الطريقة إن شاء الله ولذلك اريد استبدال و( باسم الكتاب حتي نستطيع إتباع نمط محدد
×
×
  • اضف...

Important Information