PDA

View Full Version : سوال: فراخوانی ocx با کد نویسی



silverado
پنج شنبه 30 آذر 1391, 14:06 عصر
چطور میشه یه ocx رو در برنامه با کد نویسی فراخوانی کرد

SlowCode
پنج شنبه 30 آذر 1391, 14:16 عصر
سلام
نمیشه چون ocx رو باید در حالت دیزاین به برنامه اضافه کرد بعد برنامه رو build کرد، پس قبلا باید به برنامه اضافه بشه.

حمید محمودی
پنج شنبه 30 آذر 1391, 21:44 عصر
شما ابتدا بررسی میکنید که OCX مربوطه، نصب شده یا خیر. اگر بود که هیچ، اگر نه، اونو نصب میکنید. روش نصب میتونه یا به این صورت باشه که خود فایل رو در یک PATH مشخص register میکنید، یا اینکه، از Resource فایل مربوطه رو Extract میکنید و بعد register میکنید.

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



Public Declare Function RegisterDLL Lib "Regist10.dll" Alias "REGISTERDLL" ByVal DllPath As String, bRegister As Boolean) As Boolean

Dim bRet As Boolean
bRet = RegisterDLL(DLL/OCX Path, True)
If bRet = True Then
MSGBOX "Has been registerd"
Else
MSGBOX "Could NOT be registerd"
End If



Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
'This isn't really used, but its needed for the GetWinDir function
Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Sub Whatever
Dim strWSPath As String

strWSPath = GetSysDir & "\MSWINSCK.OCX"
Shell "regsvr32 /s " & strWSPath, vbHide

If Dir$(strWSPath) = "" Then
Dim bytResData() As Byte
bytResData = LoadResData(1, "CUSTOM")
Open strWSPath For Binary As #1
Put #1, , bytResData
Close #1
Shell "regsvr32 /s " & strWSPath, vbHide
DoEvents
End If
End Sub

'This sub isn't used for this, but it's so similar I'll include it anyway
Private Function GetWinDir() As String
GetWinDir = String$(64, vbNullChar)
GetWindowsDirectory GetWinDir, Len(GetWinDir)

GetWinDir = Replace$(GetWinDir, vbNullChar, "")
End Function

Private Function GetSysDir() As String
GetSysDir = String$(64, vbNullChar)
GetSystemDirectory GetSysDir, Len(GetSysDir)

GetSysDir = Replace$(GetSysDir, vbNullChar, "")
End Function

M.T.P
جمعه 01 دی 1391, 00:08 صبح
البته بعضی ocx ها رو میشه بدون نیاز به اضافه کردن به فرم و در حالت RunTime از کلاس هاشون استفاده کرد.

مثلا:


Dim objWinsock As Object

Set objWinsock = CreateObject("mswinsock.winsock")
MsgBox objWinsock.LocalIP
Set objWinsock = Nothing