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

أبو إبراهيم الغامدي

أوفيسنا
  • Posts

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

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

  • Days Won

    13

مشاركات المكتوبه بواسطه أبو إبراهيم الغامدي

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

    في 20‏/6‏/2023 at 19:15, النجاشي said:

    اريد عند البحث بحقل البحث يظلل لي كامل السجل 

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

    وإذا أردنا أن نظلل السجلات التي تتضمن المعلومات المطلوبة، فهذا يعني أن السجلات جميعها سوف تظلل! وهذا لا يحقق المطلوب..

    البحث في البيانات: يعني أن تكون جميع البيانات معروضة وعند البحث يقف المؤشر على السجل الذي فيه البيانات..

    أرجو أن تحدد متطلباتك بصورة أكثر وضوحا  منذ البداية حتى لا ندخل في دوامة الأسئلة المتلاحقة 😉

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

    أهلا بك..

    3 ساعات مضت, at_aziz said:

    ماهو الحل المناسب   لجعل الصور تظهر في جميع الاجهزة على الشبكة 

    في الشفرة التالية عدل الدليل الموصل للصور  إلى الدليل الموصل للسيرفر

    Function WorkerCard(F As Form)
      Dim RS As dao.Recordset
      Dim ImgFile As String
      Dim H As String
    
      Set RS = CurrentDb.OpenRecordset("select * From WorkerSubQ where " _
                                      & "[Depart Id]=" & Nz(F.cboDepart, True))
      If RS.RecordCount = 0 Then Exit Function
      Do Until RS.EOF
        ImgFile = CurrentProject.Path & "\" & RS!Worker & ".jpg"   '... الدليل هنا يشير إلى قاعدة البيانات الواجهة
        H = H & "<div class='card'>"
        H = H & "<div class='container'>"
        H = H & "<a href=#ID:" & RS!WorkerID & "><img src='" & ImgFile & "'></a>"
        H = H & "<h3><b>" & RS!Worker & "</b></h3>"
        H = H & "<p>" & RS!Depart & "</p>"
        H = H & "</div>"  ' end of container
        H = H & "</div>"  ' end of card
      RS.MoveNext
      Loop
      WorkerCard = H
      Set RS = Nothing
    End Function

     

     

    3 ساعات مضت, at_aziz said:

    وايضا نقدر نضيف صور للموظف من اي جهاز على الشبكه مرتبط بقاعدة البيانات على السيرفر

    لم توضح لي الطريقة التي تستخدمها في إضافة الصور.. وفي تصوري أسهل طريقة أن تعمل  Map Driver للسيرفر على كل الأجهزة ومن ثم تضع الصورة في مجلد الصورة برقم الموظف..

    لن يكون باستطاعتي مساعدتك بالقدر الكافي لأنه يوجد لدي بيئة مماثلة لبئية السيرفر.. 

     

    تنبيه للجميع..

    في المرات القادمة أرجو فتح مشاركة جديدة مع الإشارة إلى الموضوع السابق لكي يتمكن من يجيب على مشاركتك بأفضل إجابة خاصة به 😉🤑

    • Thanks 1
  3. 9 ساعات مضت, Mohameddd200300 said:

    سلام عليكم ورحمة الله له لديكم ملف او كود vba  لتحويل ملف او صورة ال تشفير base64  احتاجه  ضروري جدا وشكرا لكم

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

    الإجرائان التاليان للتشفير، وفك التشفير

    Sub EncodeBinaryFileToBase64(BinaryFileName As String, Base64FileName As String)
    
       Dim XML, Node, InputFile, OutputFile, XPath
       Dim FSO, Output, InStream, ReadBytes, Base64Encode
       XPath = CurrentProject.Path & "\"
       InputFile = XPath & BinaryFileName
       OutputFile = XPath & Base64FileName
       
       Set InStream = CreateObject("ADODB.Stream")
       InStream.Open
       InStream.Type = 1 'TypeBinary
       InStream.LoadFromFile (InputFile)
       ReadBytes = InStream.Read()
       InStream.Close
       
       Set XML = CreateObject("Msxml2.DOMDocument")
       Set Node = XML.createElement("base64")
       Node.DataType = "bin.base64"
       Node.nodeTypedValue = ReadBytes
       Base64Encode = Node.Text
       
       Set FSO = CreateObject("Scripting.Filesystemobject")
       Set Output = FSO.CreateTextFile(OutputFile, 1)
       Output.Write Base64Encode
       Output.Close
    End Sub
    
    
    Sub DecodeBase64ToBinaryFile(Base64FileName As String, BinaryFileName As String)
       
       Dim InputFile, OutputFile, XPath, Contents
       Dim FSO, XML, Node, BinaryStream, XInput
       
       XPath = CurrentProject.Path & "\"
       
       InputFile = XPath & Base64FileName
       OutputFile = XPath & BinaryFileName
       
       Set FSO = CreateObject("Scripting.Filesystemobject")
       
       Set XInput = FSO.OpenTextFile(InputFile, 1)
       Contents = XInput.ReadAll()
       XInput.Close
         
       Set XML = CreateObject("Msxml2.DOMDocument")
       Set Node = XML.createElement("base64")
       Node.DataType = "bin.base64"
       Node.Text = Contents
       
       Set BinaryStream = CreateObject("ADODB.Stream")
       BinaryStream.Type = 1 'adTypeBinary
       BinaryStream.Open
       BinaryStream.Write Node.nodeTypedValue
       BinaryStream.SaveToFile OutputFile
    End Sub
    

     

    Base64.accdb

    • Like 1
  4. أهلا بك @Moosak

    أشكرك على ثناءك العطر.. لكن لا تبالغ 😊 

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

    سنحتاج لتطوير هذه النقطة إن شاء الله والبحث في موضوع المشاركة هو مطلب كبير أيضا لأن أغلب مواضيع البحث إجاباتها في التعقيبات وليس العناوين فقط .. 🙂

    أقول لك بصدق؛ إن الأفكار كثرت عليّ، وما أدري ما الذي أقدم منها فقلت أبدأ بالأيسر، ثم أتناقش معكم ماهو الأفضل والأنسب.. بعد أن أستعرض معكم مفاتيح البحث التي يوفرها الموقع.

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

    وهناك ملاحظة أخرى .. مربع البحث يستجلب البيانات ويضيفها للجدول وعند البحث بكلمة أخرى لا يفلتر النتائج حسب البحث الجديد بل يضيفها لما سبق ..

    وبارك الله جهودك الطيبة 🙂 

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

    • Like 3
    • Thanks 1
  5. السلام عليكم 

    أهلا بكم...

    هذه مشاركة بسيط ضمن هذا العنوان العريض..

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

    البحث في عناوين المشاركات فقط.. 

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

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

    إليكم المشاركة..

    SearchInOfficena.accdb

    • Like 2
  6. 36 دقائق مضت, ابوخليل said:

    رأيي التنبيه الصوتي غير مجدي .. لانه عرضه للغفلة والنسيان من المستخدم

    الأولى ايجاد طريقة ملزمة للمتابعة والتنفيذ

    يمكن ذلك بجعل النموذج في وضع المشروط

  7. 17 ساعات مضت, iyad mohamad said:

    فبرنامجي بسيط بحيث بعدما ان انهي كل قاعدة البيانات اريد تقسيم تلك القاعدة إلى جدول رئيسي اضعه في مجلد مشاركة ونماذج اوزعها للمدير والمحاسب وأمين الصندوق وقسم الموارد البشرية بحيث يكونو مرتبطين بذلك الجدول المشترك وهذا كل شيئ

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

    إذا لم يكن لديك بئية مستخدمين فهذا يعني أن معرفات ويندوز هي الحل الأنسب لك..

    لماذا يتطلب الأمر بيئة مستخدمين؟ لأنه وبكل بساطة لا يمكن أن يستخدم البرنامج مجهول! ولا أن ترسل الرسائل إليه!!

    نأتي إلى أحد المسائل الفنية:

    هل الرسائل تحتاج إلى تأكيد الاستلام؟ وهل يلزم إشعار المرسِل باستلام رسالته بتنبيه راجع؟

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

     

    فأنت ترى ياعزيزي أن الاستمرار في المشاركة يتطلب بعض النقاش حتى نصل إلى متطلباتك، ويتطلب أن تساهم أنت في البناء! لا أن تكون مستهلكاً فقط!

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

    لذا أرجو منك أن تكون متفاعلا، وتقوم ببناء قاعدة بيانات فيها متطلباتك حتى أتمكن مساعدتك، لأني وبكل احترام؛ لا يمكن أن أذهب إلى مشاركات الأعضاء وأستثمراها في تحقيق متطلباتك!   

     

  8. في 1‏/6‏/2023 at 00:47, iyad mohamad said:

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

    هذا ينبني على قاعدة البيانات التي لديك!

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

    وبما أنك تعمل على شبكة نتوقع أن يكون لديك بئية مستخدمين، إما على مستوى الشبكة، وإما على مستوى قاعدة البيانات..

    فهل ستفصح لنا عن الطريقة التي تستخدمها في إدارة صلاحية المستخدمين، أم تبقها سراً؟!

  9. 10 دقائق مضت, iyad mohamad said:

    الاستاذ الكبير صاحب الفضل العظيم @kkhalifa1960 الذي لم يتوانى ابدا عن الرد عن اي سؤال سئلته كل الشكر لشخصكم الكريم

    لقد حاولت في تجربة الطريقة التي اعطيتني اياها التي لم تنجح معي لربما يكون الخطأ من عندي 

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

    واسف على الاطالة

    إذن أزل التقييم كأفضل إجابة ودع النقاش يستمر حتى تنتهي أطماعك 😉

    • Like 2
  10. 4 دقائق مضت, iyad mohamad said:

    شكرا استاذي الكريم لقد نجحت الطريقة بارسال تنبيه صوتي بين الحواسيب على الشبكة

    أهلا بك أياد.. وشكرا على التقييم

    لكن مازال هناك مسائل فنية تحتاج إلى نقاش

    وأيضا وجود عيبٍ في الشفرة بحاجة إلى إصلاح 

    • Like 1
  11. أهلا بكم..

    للمراسلة في بيئة مشتركة؛ يجب أن يأسس لهذه المراسلات جدول بيانات يوضع في قاعدة البيانات الخلفية. هذا أمر متعارف عليه ولا جدال فيه. لكن يبقى السؤال كيف نصل إلى معرف المرسل إليه؟ وكيف نشعره بوجود رسائل تخصه؟

    من أسهل الطرق للوصول إلى معرف منضبط للمرسل والمرسل إليه: هو استخدام معرف ويندوز.. يمكن الوصول إلى هذا المعرف في أكسس باستخدم التابع ()Environ. بهذه الطريقة

    Public Function UserName()
        UserName = Environ("UserName")
    End Function

    وإرسال الرسائل واستقبالها بحاجة إلى ثلاثة عناصر...

    جدول البيانات..

    Screenshot2023-05-29091826.jpg.536916503464588522e5d0965a85e63e.jpg

     

    نموذج معالجة الرسائل..

    Screenshot2023-05-29092117.jpg.d7977c2245e358b34a868cbb486d91b1.jpg

    وأيضا نموذج عرض الرسائل..

    Screenshot2023-05-29092154.jpg.63b565e24536cdee96942d872879cf23.jpg

     

    مما يجب التنبيه عليه هو أن نموذج عرض الرسائل يجب أن يُفتح في وضع (التخفي) مباشرة مع النموذج الرئيسي 

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

    ** هناك مسائل فنية في تكوين الشفرة سوف أناقشها مع الزملاء إن شاء الله..

     

    لتجربة المثال المرفق..

    جعلت نموذج معالجة الرسائل هو النموج الرئيسي وستلاحظ أن معرفك في ويندوز ظهر تلقائيا في حقل [Sender ID]

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

    قم بفتح النموذج الرئسي (نموذج معالجة الرسائل) في كلا القاعدتين، ومن ثم قم بإرسالة رسالة لمعرفك (أدخل معرفك في حقل [Receiver ID]) من أحد القاعدتين ستلاحظ أن نموذج عرض الرسائل ظهر في كلا القاعدتين وذلك لأن معرف المرسل والمرسل إليه واحد..

    أدخل رسالة أخرى من القاعدة الثانية ولاتنس إدخال معرف المرسل إليه (معرفك) ستلاحظ أن الرسالة ظهرت أيضا في كلا القاعدتين..

     

    تنبيه..

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

    .. آمل أن تحوز هذه المشار على رضاكم..

    !! أعمل على Office-64

    Messanger.zip

    • Like 2
  12. أهلا بك..

    7 ساعات مضت, figo82eg said:

    مثل زر pageup و pagedown

    يمكن استخدام الشفرة التالية في حدث النموذج KeyDown

    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
        Static I As Integer, PgCnt As Integer
        PgCnt = Me.MyTabs.Pages.Count - 1
        
        Select Case KeyCode
            Case Is = 34
                If I <= 0 Then
                    Me.MyTabs = 0
                Else
                    I = I - 1
                    Me.MyTabs = I
                End If
                
            Case Is = 33
                If I >= PgCnt Then
                    Me.MyTabs = PgCnt
                Else
                    I = I + 1
                    Me.MyTabs = I
                End If
    
        End Select
        
        Debug.Print KeyCode
    
    End Sub
    

    TabCtrlNav.zip

    • Like 1
  13. 17 ساعات مضت, بلال اليامين said:

    السلام عليكم

    عند فتح البرنامج يظهر لي خطأ

    ااااااااااااااااا.JPG

    هذا الإجراء متعلق بالنموذج، نقلته بالخطأ إلى الوحدة النمطية..

    فضلا، قم بإعادته إلى النموذج فقط...

  14. 2 ساعات مضت, at_aziz said:

    ومازلنا بانتظار استاذنا الغالي @أبو إبراهيم الغامدي

    إن شاء الله لن أخيبك، وسوف أعمل على هذا ما اتسع له وقت..

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

    سوف أقوم في قابل الأيام؛ بعد توفيق الله ومشيئته بتحسن العمل لكي يعمل على مستعرض الويب بالكامل..

    Photo.zip 

     

    • Like 2
    • Thanks 3
  15. 20 دقائق مضت, at_aziz said:

    والحقيقه انا اللي كان يهمني  اني امسك رقم الموظف واسمه عند الضغط على الصوره 

    ويظهر في نموذج اخر

    او يظهر في الاسفل في النموذج الاساسي

    بحيث اني اقدر اربط خيار التقييم برقمه الموظف

    اما باقي الامور الاخرى  ماعندي بها مشكله

    لاني للحين مااشتغلت على البرنامج الاساسي حتى اعرف الطريقة على هذا المثال وانقلها لملف المشروع الاساسي

    سأعمل على تحقيق هذه المطالب بأسهل الطرق... إن شاء الله

    • Thanks 1
  16. 31 دقائق مضت, at_aziz said:

    والزائر اللذي تعامل مع الموظف  يختار صورته لانه احيانا مايعرف اسم الموظف ثم يفتح له نموذج عند الظغط على الصوره فيه بيانات التقييم  وبيانات الموظف اسمه ورقمه  وبعدها يقوم بتقييم الموظف اللي اختاره  

    الآن وضحت الصورة!

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

    إذا يوجد لديك قاعدة بيانات مصغرة بالبيانات المطلوب تمثيلها، فأنت تصنع معروفاََ 

  17. أهلا @ابوخليل

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

    هذا السطر  يجلب من الصفحة شرط وجود الجدول مسبقا في قاعدة البيانات

    لا أعتقد أن هذه العبارة صحيحة، والسطر التالي يوضح المقصود

    DoCmd.TransferText acImportHTML ,,InputBox("plase Enter Table Name"),currentproject.Path & "\0125.html",true,"0125"

    DoCmd.TransferText acImportHTML ما هو إلا نهج مغلف لنفس الإجراء المقدم في إجابتي السابقة! وهي تعليمية أكثر منها إجابة، والنهبج المشار إليه سهل وبسيط!

    كما لا يفوتني أن  أشكرك علي عتب المحب المغلف بهذه الإلماحة..😇 

    • Like 1
  18. أهلا @محمد احمد لطفى

    الشفرة التالية تفي بالغرض إن شاء الله..

    Private Sub أمر0_Click()
    On Error GoTo ERR_CODES
       
       Dim HTML_FILE_NAME As String
       Dim HTML_TITLE As String
       Dim TABLE_NAME As String
       Dim SQL As String
       
       '-- ASSIGNING VALUES TO SQL STATMENT VARIABLES
       Const HTML_SPECIFICATION As String = " [HTML IMPORT;HDR=YES;] "
       HTML_FILE_NAME = CurrentProject.Path & "\" & "0125.HTML" '.. THE HTML FILE IS THE DATABASE
       HTML_TITLE = "0125" '.. THE HTML TABLE NAME IS THE HTML TITLE
       
    CREATE_TABLE_SQL:
       '-- ASSIGNING TABLE NAME USING INPUTBOX
       TABLE_NAME = InputBox(Err.Description & " Plase Enter New Table Name.", _
       "New Table Name", , Me.WindowWidth / 2, Me.WindowHeight / 2)
       If Len(TABLE_NAME) = 0 Then
          GoTo EXIT_SUB
       End If
       
       '-- CREATE SQL STATMENT
       SQL = ""
       SQL = SQL & " SELECT * INTO " & TABLE_NAME
       SQL = SQL & " FROM " & HTML_TITLE
       SQL = SQL & " IN'" & HTML_FILE_NAME & "'"
       SQL = SQL & HTML_SPECIFICATION
       
       '-- EXECUTE SQL STATEMENT TO CREATE TABLE
       CurrentDb.Execute SQL
       Application.RefreshDatabaseWindow
    
    EXIT_SUB:
       Exit Sub
    
    ERR_CODES:
       If Err.Number = 3010 Then
          GoTo CREATE_TABLE_SQL
       Else
          MsgBox Err.Number & vbNewLine & Err.Description
       End If
    End Sub

    IMPORT_HTML_TABLE.zip

    • Like 3
    • Thanks 2
  19. وعليكم السلام ورحمة الله

    في 17‏/12‏/2022 at 16:16, النجاشي said:

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

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

    طباعه المرفقات.accdb

    • Like 1
  20. وعليكم السلام رحمة الله 

    أهلا بك @النجاشي

    في 14‏/12‏/2022 at 19:36, النجاشي said:

    اذا كان عندي عده مجلدات فرعيه  متغيره بداخل المجلد (src) كيف بيكون الكود    XPath = CurrentProject.path & "\src\"

    أجريت تعديلا على بعض الإجراءات..

    وأنشأت لك وظيفة تقوم بالبحث عن اسم الملف أبتداءً من الدليل الرئيسي إلى أدنى مستوىً من الأدلة الفرعية. فإن كان الملف موجودا؛ أعادة اسم الملف مع الدليل..

    الوظيفة مع التعديلات

    Public Function XPath()
          XPath = CurrentProject.Path & "\src\"
    End Function
    
    Public Function FSO() As FileSystemObject
       Set FSO = New FileSystemObject
    End Function
    
    Public Function GetFileDirectory(MainPath As Object, Optional FileName As Variant)
       Dim OFIL As Scripting.File, OFILS As Scripting.Files
       Dim OMFD As Scripting.Folder, OSFD As Scripting.Folder
       Static XFileName As String, FilePath   '.. Static Declaration reserved value when function recoll
       
       '-- get filename in first time call and reserved value
       If Not IsMissing(FileName) Then
        XFileName = FileName
       End If
       
       '-- loop for subfolders in his parent folder
       For Each OSFD In MainPath.SubFolders
          
          Set OMFD = FSO.GetFolder(OSFD.Path)
          Set OFILS = OSFD.Files
          
          '-- loop for file in each folder
          For Each OFIL In OFILS
             If OFIL.Name = XFileName Then
                FilePath = OFIL.Path
                GoTo TheEnd
             End If
          Next
          '-- Function recoll himself with subfolder
          GetFileDirectory OSFD
       Next
    TheEnd:
       '-- Function return filepath if file found
       GetFileDirectory = FilePath
    End Function

     

    اظهار المرفقات .zip

    • Like 2
    • Thanks 1
  21. 15 دقائق مضت, النجاشي said:

    استاذي الفاضل على مايبدو انه في شي ناقص في الجهاز ياليت ترفق رابط الأكروبات ريدر محمل في جهازك

    https://get.adobe.com/reader/

    عند التثبيت يظهر لك مربع حوار طلب الإذن باقتران أكروبات بمتصفح ويندوز.. وافق على الطلب

×
×
  • اضف...

Important Information