PDA

View Full Version : استفاده از ocx و dll به جای نوشن کد در event ها



ali190
پنج شنبه 07 مرداد 1389, 20:03 عصر
با سلام و عرض خسته نباشید
بنده آشنایی خیلی کمی در مرود پروسه ساخت یک oc یا dll دا رم
از خدمت دو ستان و اساتید گرامی این سئوال رو دارم

آیا میشود به جای کدنویسی در اونتهای آبجکت از dll یا ocx استفاده نمود
مثال:
فرض کنید در یک فرم vb من یک تکست باکس و یک دکمه دارم
حالا میخوام بر روی oncilick دکمه این کد رو بنویسم :

If Val(Me.Text1) > 10 Then
MsgBox "ok"
Else
MsgBox "notok"
End If
آیا من میتونم این کد رو در یک dll بنویسم و dll یا Ocx رو در رفرنس اضافه کنم و به جای نوشتن این کدها بر روی دکمه کدهای نوشته شده در dll رو به اون refer بدم؟
میشه همین مثال رو برام به صورت dll شبیه سازی کنید؟
ممنون

parselearn
پنج شنبه 07 مرداد 1389, 20:19 عصر
منظورتون رو دقيق نفهميدم

اما خب براي ساخت يك UserControl. يك UserControl اضافه كنيد

كدهاي زير مربوط به UserControl (يك Textbox و CommandB اضافه كنيد)


Event CMDClick()

Private Sub Command1_Click()
RaiseEvent CMDClick

If Val(Text1) > 10 Then
MsgBox "ok"
Else
MsgBox "notok"
End If
End Sub

Event براي تعريف رويداد به كار ميرود حالا با هر نامي
RaiseEvent براي اعلام رويداد


كدهاي مربوط به فرم


Private Sub UserControl11_CMDClick()
MsgBox "Clecked"
End Sub

M.T.P
پنج شنبه 07 مرداد 1389, 20:52 عصر
میتونی تو dll توابع رو بنویسی مثلا همین کد خودتون رو به این شکل داخل یک ماژول در یک dll نوشته و بعد از Refrences اضافه و استفاده کنید.


Function CheckInput(StrInput As String)
If Val(StrInput) > 10 Then
MsgBox "ok"
Else
MsgBox "notok"
End If
End Function

و تو برنامه اینطوری ازش استفاده کنی...


Call CheckInput(Text1.Text)

ali190
پنج شنبه 07 مرداد 1389, 21:23 عصر
سلام
دوست عزیز تمام این کارها رو انجام دادم
ولی ارور میده که تابع در پروژه وجود نداره
dllرو هم به بخش رفرنسها افزودم
ولی تابع رو در اونت اجرا نمیکنه
ممنون میشم همین نمونه رو بسازید تا من بیشتر متوجه بشم
باز هم ممنون

ali190
جمعه 08 مرداد 1389, 10:39 صبح
دوستان میشه لطفاً خودتون تست کنید
من امتحان کردم
جوابی نگرفتم
ممنون میشم

vbhamed
جمعه 08 مرداد 1389, 11:30 صبح
سلام

براي استفاده از DLL يك كلاس تعريف كنيد و تو برنامتون هم يك متغير از نوع اون كلاس
اينم يك نمونه
يك پروژه DLL هست، يك پروژه تست اون DLL

ali190
شنبه 09 مرداد 1389, 00:32 صبح
ممنون vbhamed عزیز
برای شروع خیلی عالی بود (برای من که نسبته به پروسه ساخت یک dll هیچ دیدی نداشتم)
من نمیخواستم از این تکنیک در vb استفاده کنم ، در واقع میخواستم از این روش در vba اکسل یا msp استفاده کنم (بدلیل پایین بودن بسیار زیاد امنیت این دو نرم افزار در دسترسی به بخش کدنویسیش)
نرم افزار msp یا اکسل آبجکتهای خاص خودشون رو دارن مثلاً شما در اکسل با سلولها کار میکنید یا در vba نرم افزار msp شما برای شمارش تعداد فعالیتهای یک پروژه از کد زیر استفاده میکنید

ActiveProject.Tasks.Count
ولی وقتی در فورمولهایی که در vb استفادذه میکنم تا بتونم dll رو بسازم وقتی از کدهای vba نرم افزار msp(مثل کد بالا) استفاده میکنم ارور میده.
ممنون میشم بیشتر راهنماییم کنید.
باز هم ممنون

vbhamed
سه شنبه 12 مرداد 1389, 14:00 عصر
سلام
با اين روش شما مي تونيد كدهاي ويژوال بيسيكي بنويسيد نه VBA
اما بازم راه داره

بايد با OLE كار كنيد و از طريق اون مثلا اكسل رو باز كنيد يا فايل فعلي باز شده اكسل رو مورد پردازش قرار بدين و نتايجي رو با استفاده از VBA خود اكسل به برنامه ويژوال بفرستيد و استفاده كنيد

كار با OLE خودش يك مبحث گسترده هست كه بهتره راجع بهش تحقيق كنيد اما به شيرينيش مي ارزه

ضمنا تو اكسل از منوي Tools گزينه VBAProject Propertoes ميشه براي قسمت كدنويسي پسورد گذاشت
البته تو اكسس مي شد اصلا كدها رو كامپايل كرد و ديتابيس به صورت فايل mde در مي اومد كه كدش كامپايل شده بود و كسي نمي تونست تغيير بده، تو اكسل هم كامپايل ديدم ولي نمي‌دونم مثل اكسس ميشه يا نه، تحقيقش با خودتون

اما اگر خيلي كارتون گسترده هست به نظر من كل كارتون رو تو وي بي مديريت كنيد و با وي بي بنويسيد نه اكسل، يعني از اكسل به عنوان كمك استفاده كنيد

MMR_1344
چهارشنبه 13 مرداد 1389, 17:27 عصر
دوست خوبم جناب آقای VBHAMID
اگر بخوام توابعی رو که در اکسل وجود نداره مانند تبدیل عدد به حروف یا تاریخ شمسی رو با وی بی بصورت فایل DLL بنویسم بعد از اون در برنامه اکسل با لود کردن اون استفاده کنم امکان داره یا نه؟