الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال في AddressOf

مغلق
بدأه ابوحمود في 25 يناير 2002 · 4 رد · 777 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخوتي

ما الخطأ في الكود التالي حيث أنه يعلم السطر :

SetTimer Me.hwnd, 100, 500, AddressOf TimerProc

وبالضبط على :

AddressOf TimerProc

ورسالة الخطأ التي تظهر :

Invalid Use Of AddressOf Operator

Dim Wnd As Long

Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, _
ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As _
Long) As Long

Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, _
ByVal nIDEvent As Long) As Long

Private Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" (ByVal lpClassName As String, ByVal _
lpWindowName As String) As Long

Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
    Wnd = FindWindow("ProgramClass", "آلة حاسبة")
    If Wnd = 0 Then Shell "C:WINDOWSCALC.EXE", 1
End Sub


Private Sub Command1_Click()
KillTimer Me.hwnd, 100
End Sub

Private Sub Command2_Click()
SetTimer Me.hwnd, 100, 500, AddressOf TimerProc
End Sub

علما أنني جربت الكود في VB وفي الأكسس ونفس الخطأ يتكرر هنا وهناك .

وللجميع التحية

#2

لا يوجد خطأ فى الكود وإنما الخطأ فى موضعه

أضف Module جديد وضع الكود الاتى هو نفس الكود الذى كتبته انت ولكن مع تعديل بعض الكلمات

Dim Wnd As Long

 Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, _
ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As _
Long) As Long

 Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, _
ByVal nIDEvent As Long) As Long

 Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" (ByVal lpClassName As String, ByVal _
lpWindowName As String) As Long

Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent _
As Long, ByVal uElapse As Long, ByVal lpTimerFunc _
As Long)
    Wnd = FindWindow("ProgramClass", "آلة حاسبة")
    If Wnd = 0 Then Shell "C:WINDOWSCALC.EXE", 1
End Sub

وفى الفورم ضع الكود

Private Sub Command1_Click()
KillTimer Me.hwnd, 100
End Sub

Private Sub Command2_Click()
SetTimer Me.hwnd, 100, 500, AddressOf TimerProc
End Sub

وذلك لان كلمة AddressOf لا تستخدم إلا داخل الموديول

#3

أشكرك كثيراً أستاذ رمضان وبودي إن أمكن أن تعطيني فكرة تفصيلية عن AddressOf ماعملها هنا .

وفقك الله وسددك .

ولك تحياتي

#4

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

#5

الأخ Read Only

شكرا على هذه المعلومات .

وفقك الله وزادك علماً .

ولك تحياتي

هذا الموضوع مغلق.

مواضيع مشابهة