• تذكرني؟
  •  
     


    الاهداءات
    ( سمى من : سوريا أطيب سلام معطر بمسك وعنبر وحب كبير لاهل جاسم الغوالي )     ( من : من سوريا كيفكم يا اعضاء وتحية كبيرة للغالي ايهاب )     ( من : الشيخ مسكين ولك شو ايهابو وينك بالكويت ولا بسورية ابعثلي ارقامك برسالة خاصة )     ( من : من الامارات كل عام وانتم بخيروالف تحية للاخ ايهاب ومبروك عودة المنتدى بحلته الجميلة )     ( semo من : ksa كل عام وانتو بخــــير يااحلا منتدى ... وكل عام وانتوبخير يا احلا شعب جاسم الغوالي )     ( من : سوريا حمد لله على السلامة أخي أبو جمال و شكرا على جهودك على عودة منتدانا الغالي )     ( m.dneifat من : الكويت احلى واجمل تحية لاحلى شباب جاسم وكل عام وانتم بخير بمناسبة عيد الاضحى المبارك ومشكور خيي ابو الجود على هالمنتدى الحلو )     ( m.dneifat من : الكويت الحمد لله على السلامة ابو الجود لا تواخذنا منشان الله كنت بدي ودعك بس اتاخرت انت , سلم ع الجميع )     ( khalel من : السويد اهدء الى ايهاب واهالي جاسم خليل النصار )     ( m.dneifat من : الكويت الاهداء خاص لاهالي جاسم الحلوين الطيبين اللي ما في منهم واحلى شباب اياد عسكر واحمد عسكر ومالك السهو ;) )     ( m.dneifat من : الكويت انشاء الله الف مبروك يا ابو الجود الخطوبة والديزاين الجديد , تهري وتجدد )     ( nalmtawa من : الكويت تحية طيبة لأهالي جاسم وخاصة والدي العزيز الأستاذ القدير : جمعة المطاوع أبو ناصر :yes: والوالدة الغالية وزوجتي وأولادي وأخواني ماهر وشاهر ومحمد :lol: مع حبي وأشواقي ناصر ** )     ( من : ســــــــتتوريا مبروك عودة المنتدى وشو هالتصميم الحلو يا ايهابووووووووو )     ( nalmtawa من : سوريا جاسم تحياتي لكل الأخوة المدرسين بجاسم وأخص بالذكر والدي الأستاذ جمعة مطاوع :roll: وحسان المحمد وعماد الحاج علي وياسر عسكر ومحمود الملحم وزهير الدعاس وعاطف السيبراني ونضال قويدر وعواد العبيد :lol: )     ( nalmtawa من : سوريا جاسم تحياتي لكل أهالي جاسم وأخص بالاهداء والدي الاستاذ القدير : جمعة المطاوع أبو ناصر : وأحلى مدرس بجاسم... وتحية للوالدة الغالية وزوجتي وأولادي وأخواني ماهر وشاهر ...** )     ( من : سوريا تحياتي الى الغالي والصديق العزيز الفاضل ايهاب غزال ;) )     ( ايهاب الغزال من : سوريا مشكور يا اخ هاشم انت غالي والله والك وحشة الله يرحم ايام الجامعة كانت ايام حلوة معك :D )     ( من : ســــــــــــــــوريا وبكل اعتزاز مبروك عودة المنتدى أخ ايهاب وعقبال نشوف باقس الاخوى الاعضاء ;) )     ( مأمون من : نور المأمون :) خالي الغالي مشتاقينلكم كثير كثير سلامي لجدي وجدتي واخوالي وخالاتي )     ( ايهاب الغزال من : سوريا هلا وغلا بنور الأمورة الغالية ;) )     ( مأمون من : نور الدعاس مرحبا ياخالي الغالي شلونك انشالله بخير مشتاقلك كثير اني والماما والبابا سلامي لكم جميعا :) )     ( مأمون من : السعوديه مرحبا اخي ايهاب الف الف مبروك وبالرفاه والبنين انشالله .... اختك ام نور )     ( مأمون من : السعوديه مرحبا يا خالي ايهاب والف مبروك انشالله والله يرزقك باولاد حلوين وفهمانين مثلي ... بنت اختك المحبه لك نور مأمون الدعاس )     ( مأمون من : السعوديه السلام عليكم الف الف مبروك الخطوبه يا استاذ ايهاب وبالرفاه والبنين انشالله ..... صهرك الدكتور مأمون )     ( السمراء من : الجزائر لو علمت الدار بمن زارها فرحت واستبشرت ثم باست موضع القدمين وأنشدت بلسان الحال قائلةً اهلا وسهلاً بأهل الجود والكرم أهــــــــــــــــــلا ً وسهــــــــــــــــلا )     ( مصطفى من : العراق :roll: احيي جميع المشتركين في المنتدى :roll: )     ( ghazal من : syria ألف ألف مبروووووووووووك على انطلاق منتدانا الغالي بحلته الجديدة و شكر خاص للأخ ايهاب على الجهد المبذول (محمد غزال) :yes: )     ( ايهاب الغزال من : سوريا مراحب بالجميع :D )     ( من : سوريا الحمدلله على عودة منتدانا الغالي مشكووور !!!!يا أستاذ ايهاب )     ( من : سوريا الحمدللع على عودة المنتدى وان شاء الله منشوفه من احلى المنتديات :D )    



     
     
    معلومات الكاتب
    03-20-2006 10:58 صباحا
    المعلومات
    اللقب
    الرتبة
    rating
    الصورة الرمزية

    البيانات
    رقم العضوية 1
    الحالة
    المشاركات 705
    الدولة سوريــــــــــــا
    الجنس
    الزيارات 660
    الدعوات 3
    قوة السمعة 0
    موقعي زيارة موقعي





    تعلم API من خلال شرح دوال API مدعماً بالأمثلة

    API – Windows Application Programming Interface
    سأشرح في هذه الفقرة API بصورة عامة. أن الفائدة من أستخدام دوالAPI لسببين هما الأول نستطيع أنجاز قسم أشياء لاتستطيع لغة VB أنجازها، والثاني تستطيع تنفيذ بعض الأشياء أسرع من تنفيذها ب VB .
    أستخدام API :
    هناك أربعة خطوات لأستخدام دوال API
    1- حدد أي برنامج فرعي تريد أن تستخدمه
    هنالك دوال عديدة ل API وهي موضحة في Help الموجود في VB6.0 .
    2- حدد هوية أو نوع البيانات التي ترغب بتمريرها الى البرنامج الفرعي . والعبارة TYPE تقوم بعملية التمرير.
    3- تثبيت أو تعريغ Declare البرنامج الفرعي بأستخدام العبارة Declare ، للعلم API هو ليس جزء من لغة VB لهذا السبب تستخدم عبارة Declare لغرض أخبار VB أين يستطيع أن يجد هذه الدوال. والصيغة لعبارة التثبيت هي:
    Declare Sub name lib "lib" [ Alias, "alias"] (arguments)
    Declare Function name Lib "Lib" [Alias, "alias"] (arguments) As type
    name : هو أسم الدالة التي تحددها
    lib : موقع وجود المكتبة library وعلى سبيل المثال أسم المكتبة gdi32 ، kernel32 ، user32 ،....ألخ
    alias :هي أسم الدلالة حيث يتم عن طريقها تعريف البرنامج الفرعي أو الدالة في المكتبة
    arguments : هي أسم المتغيرات المستقلة المستخدمة من قبل دالة API التي تعرف بعبارة TYPE .
    type : نوع المتغير المرجع لدالة API .
    تمرير المتغيرات المستقلة Arguments :
    لغة VB بصورة أساسية تمرر المتغيرات أستناداً الى المرجع ، أي بمعنى VB تمرر عناويين الذاكرة المخزونة فيها هذه المتغيرات يدلاً من تمرير قيمة المتغيير ، فلهاذا سنلاحظ كثيراً أستخدام ByVal وذلك لتغيير أسلوب التمرير للتمرير بقيمة المتغيير.
    الجزم strings :
    عند تمرير الحزم يجب أن تمرر باسلوب التمرير بالقيمة دائماً أي أستخدام ByVal
    القيم Null :
    عند عدم تثبيت قيمة المتغيير الحزمي فأن حالة API ستمرر القيمة البدائية Null بدلاً عن أنه فارغ . وهناك شئ أخر يجب عمله قبل تعريف دوال API المستخدمة مع الحزم وهو تعريف حجم الحيز الخاص بالحزمة عن طريق أستخدام DIM ، مثال DIM txt As String * 256 .
    المناولة Handles :
    كثير من دوال API تستخدم المناولة في برنامجها الفرعي لتمثيل عناصرها. ومنها مناولة التي تشير للويندوز HWND ، مناول الصور HBITMAP ومناولة تحديد الجهاز HDC .......ألخ. المناولات هي لاشئ سوى أنها أعداد صحيحة تمثل العنصر وعند أستخدامها من قبل دالة API يجب تعريفها على أنها ByVal Long وهي فقط أرقام وليست لها معنى أذا أستعملت خارج الجالة.
    4- أستدعاء الدالة أو البرنامج الفرعي call routine :
    بعد الأنتهاء من تعريف المحتويات أو البيانات يجب تثبيت دالة API ويتم أستدعائها كما تستدعى أي دالة أعتيادية في VB .

    ومن خلال الأمثلة سأحاول شرح معظم دوال API الأكثر أستعمالاً والتي سوف تستفاد منها في تطوير برامجك.
    المثال الأول : جعل الفورم ذات شفافية . من الممكن أنكم لاحظتم من لديه نظام التشغيل ويندوز 2000 و XP أنها تمتلك بعض النوافذ تمتلك شفافية تستطيع من خلالها رؤية ماموجود تحتها. لذا غي هذا المثال سأبرمج هذه الخاصية بأستعمال دوال API مع شرح كل دالة .
    سيتكون البرنامج من فورم أسمه frmMain يتكون من عنصريين HScrollBar أسمه scrTransparancy و Label أسمه lblStatus ، أما الموجل Modules أسمه modTransparant
    الدوال المستخدمة:
    SetLayeredWindowAttributes : دالة تستخدم لأعداد عدم الشفافية والألوان الرئيسية للويندوز ذات الطبقات.

    Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
    hwnd
    مناولة إلى النافذةِ ذات الطبقاتِ. أي صفّفَ النافذةَ المَخْلُوقةُ بتَحديد WS_EX_LAYERED متى َخْلقُ النافذةَ بدالة CreateWindowEx أَو بوضع WS_EX_LAYERED عن طريق SetWindowLong بعد خُلِق النافذةِ .
    crKey
    تركيب Colorref الذي يُحدّدُ مفتاحَ لونِ الشفافيةَ لكي يُستَعملَ متى يَعدُّ النافذةَ ذات الطبقاتَ. كُلّ نقاط الشاشة تصَبغ بالنافذةِ بهذا اللونِ وسَيَكُونُ شفّاف. لتَوليد Colorref، يَستعملُ ماكرو RGB.
    bAlpha
    قيمة ألفا تُستَعملُ لوَصْف عدمِ شفافية النافذةِ ذات الطبقاتِ. مشابه لSourceConstantAlpha عضو تركيبِ Blendfunction. عندما تكون bAlphaقيمتها مساوية ل 0 ، النافذة شفّافةُ جداً. عندما تكون قيمة bAlpha مساوية 255، النافذة بليدةُ.
    dwFlags
    يُحدّدُ العمل الذي سوف يتَخْذ. هذا البارامترِ يُمكنُ أَنْ يَكُونَ واحد أَو أكثر مِنْ القِيَمِ التاليةِ.
    LWA_COLORKEY
    إستعمال crKey كلون الشفافيةَ.
    LWA_ALPHA
    إستعمال bAlpha لتَقْرير عدمِ شفافية النافذةِ ذات الطبقاتِ.

    UpdateLayeredWindow:
    Private Declare Function UpdateLayeredWindow Lib "user32" (ByVal hWnd As Long, ByVal hdcDst As Long, pptDst As Any, psize As Any, ByVal hdcSrc As Long, pptSrc As Any, crKey As Long, ByVal pblend As Long, ByVal dwFlags As Long) As Long


    hwnd
    مناولة إلى النافذةِ ذات الطبقاتِ. أي صفّفَ النافذةَ المَخْلُوقةُ بتَحديد WS_EX_LAYERED متى َخْلقُ النافذةَ بدالة CreateWindowEx أَو بوضع WS_EX_LAYERED عن طريق SetWindowLong بعد خُلِق النافذةِ

    .hdcDst
    مناولة إلى سياق أداةِ (دي سي) للشاشةِ. هذه المناولة تحصل عندما تستدْعى الدالة وتكون قيمتها محددة ب Null. هو يستعمل لتطابق لونِ لوحة الألوانِ عندما تحدث محتويات النافذةَ . إذا كانت قيمة hdcDst مساوية ل NULL، سوف تكون لوحة الألوان الأصلية مستعملة.
    إذا كانت hdcSrc قيمتها Null , يَجِبُ أَنْ يَكُونَ hdcDstقيمتها Null.

    pptDst
    مؤشر إلى تركيب النقطةِ الذي يُحدّدُ موقعَ الشاشةِ الجديدِ للنافذةِ ذات الطبقاتِ. إذا كان الموقعِ الحاليِ غير متغيّرُ , يُمكنُ أَنْ يَكُونَ قيمة pptDst مساوية ل Null..
    psize
    [في] مؤشر إلى a تركيب حجمِ الذي يُحدّدُ الحجمَ الجديدَ للنافذةِ ذات الطبقاتِ. إذا حجمِ النافذةِ لا يَتغيّرُ , psize يُمكنُ أَنْ يَكُونَ ملغيَ. إذا hdcSrc ملغيُ , psize يَجِبُ أَنْ يَكُونَ ملغيَ.
    hdcSrc
    المناولة إلى دي سي للسطحِ الذي يُعرّفُ النافذةَ ذات الطبقاتَ. هذه المناولة يُمْكِنُ أَنْ يُحْصَلَ عليه بدَعوة دالة CreateCompatibleDC. إذا لم يتغيير الشكلِ والسياقِ البصريِ مِنْ النافذةِ ,فيُمكنُ أَنْ يَكُونَ قيمة hdcSrcَ مساوية ل Null .
    pptSrc
    مؤشر إلى تركيب النقطةِ الذي يُحدّدُ موقعَ الطبقةِ في سياقِ الأداةَ. إذا كانت قيمة hdcSrc مساوية ل Null ,فيَجِبُ أَنْ تَكُونَ قيمة pptSrc مساوية ل Null.
    crKey
    تركيب Colorref الذي يُحدّدُ مفتاحَ لونِ الشفافيةَ لكي يُستَعملَ متى يَعدُّ النافذةَ ذات الطبقاتَ. كُلّ نقاط الشاشة تصَبغ بالنافذةِ بهذا اللونِ وسَيَكُونُ شفّاف. لتَوليد Colorref، يَستعملُ ماكرو RGB.

    pblend
    مؤشر إلى تركيب Blendfunction الذي يُحدّدُ قيمةَ الشفافيةَ لكي يُستَعملَ متى يَعدُّ النافذةَ ذات الطبقاتَ.
    dwFlags
    هذا المتغيير يُمكنُ أَنْ يَكُونَ أحد القِيَمِ التاليةِ.
    ULW_ALPHA
    إستعمال pblend كدالة للمزيجَ. إذا كان نمطِ العرضَ 256 لونُ أَو أقل، تأثير هذه القيمةِ تماماً مثل تأثير ULW_OPAQUE
    ULW_COLORKEY
    إستعمال crKey كلون الشفافيةَ.
    ULW_OPAQUE
    إسحبْ نافذةَ ذات طبقاتَ بليدةَ.
    إذا كانت قيمة hdcSrc مساوية ل Null , فأَنْ قيمة dwFlags يَجِبُ أن تكون صفر

    GetWindowLong : هي الدالة المستخدمة لأسترجاع المعلومات المتعلقة بالويندوز المحدد، وتكون القيم للمعلومات المسترجعة من قبل هذه الدالة 32-bit وأذا أردت أسترجاع القيم 64-bit فيجب أستخدام الدالة GetWindowLongPtr .

    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

    hwnd : معالجْ أو المناولة إلى النافذةِ، وبشكل غير مباشر، صنف class للنافذة التي تَعُودُ.
    nIndex : ُحدّدُ المرجع أي نقطة الصفر إلى القيمةِ الّتي سَتُستَرجعُ. القِيَم الممكنة تكون في المدى صفر الى عددِ بايتاتِ ذاكرةِ النافذةِ الإضافيةِ، ناقص أربعة؛ على سبيل المثال، إذا حدّدتَ 12 أَو بايتاتَ أكثرَ مِنْ الذاكرةِ الإضافيةِ , 8 سَتَكُونُ قيمة دليل 32-bit الثالثِ من العدد الصحيح. لإسْتِرْجاع أيّ قيمة أخرى، يُحدّدُ القِيَمِة التاليةِ.
    GWL_EXSTYLE التي تمثل أسترجاع أساليب الويندوز الممتدة.

    SetWindowLong : الحالة التي تُغيّرُ خاصيّةَ النافذةِ المحدّدةِ.

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

    dwNewLong : يُحدّدُ قيمةَ البديلَ.

    الكود بصورة كاملة – أطبع هذا الكود غي modTransparant

    Option Explicit

    Transparancy APIs
    Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
    Private Declare Function UpdateLayeredWindow Lib "user32" (ByVal hWnd As Long, ByVal hdcDst As Long, pptDst As Any, psize As Any, ByVal hdcSrc As Long, pptSrc As Any, crKey As Long, ByVal pblend As Long, ByVal dwFlags As Long) As Long
    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 Const GWL_EXSTYLE = (-20)
    Private Const LWA_COLORKEY = &H1
    Private Const LWA_ALPHA = &H2
    Private Const ULW_COLORKEY = &H1
    Private Const ULW_ALPHA = &H2
    Private Const ULW_OPAQUE = &H4
    Private Const WS_EX_LAYERED = &H80000


    Public Function isTransparent(ByVal hWnd As Long) As Boolean
    On Error Resume Next
    Dim Msg As Long
    Msg = GetWindowLong(hWnd, GWL_EXSTYLE)
    If (Msg And WS_EX_LAYERED) = WS_EX_LAYERED Then
    isTransparent = True
    Else
    isTransparent = False
    End If
    If Err Then
    isTransparent = False
    End If
    End Function

    Public Function MakeTransparent(ByVal hWnd As Long, ByVal Perc As Integer) As Long
    Dim Msg As Long
    On Error Resume Next

    Perc = ((100 - Perc) / 100) * 255
    If Perc < 0 Or Perc > 255 Then
    MakeTransparent = 1
    Else
    Msg = GetWindowLong(hWnd, GWL_EXSTYLE)
    Msg = Msg Or WS_EX_LAYERED
    SetWindowLong hWnd, GWL_EXSTYLE, Msg
    SetLayeredWindowAttributes hWnd, 0, Perc, LWA_ALPHA
    MakeTransparent = 0
    End If
    If Err Then
    MakeTransparent = 2
    End If
    End Function

    Public Function MakeOpaque(ByVal hWnd As Long) As Long
    Dim Msg As Long
    On Error Resume Next
    Msg = GetWindowLong(hWnd, GWL_EXSTYLE)
    Msg = Msg And Not WS_EX_LAYERED
    SetWindowLong hWnd, GWL_EXSTYLE, Msg
    SetLayeredWindowAttributes hWnd, 0, 0, LWA_ALPHA
    MakeOpaque = 0
    If Err Then
    MakeOpaque = 2
    End If
    End Function

    الكود في ال frmMain

    Option Explicit

    Private Sub scrTransparancy_Change()
    modTransparant.MakeTransparent Me.hWnd, scrTransparancy.Value
    lblStatus.Caption = CStr(scrTransparancy.Value) & "% transparancy"
    End Sub





















    توقيع : ايهاب الغزال
    « يَا ابْنَ آدَمَ إِنَّكَ مَا دَعَوْتَنِي وَرَجَوْتَنِي غَفَرْتُ لَكَ عَلَى مَا كَانَ فِيكَ

    وَلَا أُبَالِي يَا ابْنَ آدَمَ لَوْ بَلَغَتْ ذُنُوبُكَ عَنَانَ السَّمَاءِ ثُمَّ اسْتَغْفَرْتَنِي

    غَفَرْتُ لَكَ وَلَا أُبَالِي يَا ابْنَ آدَمَ إِنَّكَ لَوْ أَتَيْتَنِي بِقُرَابِ الْأَرْضِ خَطَايَا ثُمَّ لَقِيتَنِي

    لَا تُشْرِكُ بِي شَيْئًا لَأَتَيْتُكَ بِقُرَابِهَا مَغْفِرَةً »
    ابلاغ عن مشاركة مخالفة !
     
     


     
     
    معلومات الكاتب
    تعلم API من خلال شرح دوال API مدعماً بالأمثلة
    02-11-2008 12:40 مساء#1
    المعلومات
    اللقب
    مجلس ادارة المنتدى
    الرتبة
    rating
    الصورة الرمزية

    البيانات
    رقم العضوية 50
    الحالة
    المشاركات 160
    الدولة سوريــــــــــــــا
    الجنس
    الزيارات 154
    قوة السمعة 100
    موقعي زيارة موقعي






    مشكور أخي أيهاب على هالموضوع


    لو أنو يعني فهمت شوي



    مشكور على أي حال

















    توقيع : Hashem

    ومن لم يجعل الله له نوراً فما له من نور

    ــــــــــــــــ.....:::::::::::::.....ــــــــــــــــ

    ابلاغ عن مشاركة مخالفة !
     
     





     








  • Loading...
  •