НЕТ подключенного компонента к форме, на др машине...((
Нашел я этот компонент DTPicker более менее разобрался как его юзать...
Беда такая: в Ёxcel на моей форме он задает дату которую потом печатает в документ.
у этого файлика с прикрепленным макросом существует возможность распространения посредством дискеты...)) юзерам для домашнего заполнения.
:{ так вот, на др машине Ёxcel не находит компонент
способы решения этой проблемы:
1: прикрепить к файлу еще и компонент *и как это реализовать то....???*
2: типа авто экзешника что то что бы его устанавливать.... *то ж есть проблемы...*
если есть др предложения буду рад их услышать и увидеть...
что хотелось бы увидеть: способ решения это проблемы, ее реализацию или хотя бы дельные предложения по ней.
Спасиб.
Да вот как-то обсуждали уже нечто подобное, у человека даже по тяжелей была ситуация, там самс программа автозапуска требовала предварительной установки своего ActiveX
http://forum.codenet.ru/showthread.php?s=&threadid=11220&highlight=bat%F4%E0%E9%EB
ну и замороченно...((
а нельзя попроще???
просто подключит как то этот АктивХ компонент???
что б он был усегда на форме?
ну и замороченно...((
а нельзя попроще???
просто подключит как то этот АктивХ компонент???
что б он был усегда на форме?
В смысле ручками?
тоды находишь этот файл "ля-ля.ocx", тащишь его на другой комп, кидаешь например в С:\Windows\System, запускаем в ком. строке - "regsvr32.exe ля-ля.ocx", после этого в редакторе VB в меню Tools/References нажимаешь кнопку Обзор(Browser), находишь свой ля-ля.ocx, Ок, дальше ищешь новую библиотеку, которая появилась в этом большом списке. Вот тут небольшие проблемки, файл имеет короткое название, а его библиотека... (например: commdlg32.ocx - в меню Tools/References будет виден как Microsoft Common Dialog Controls 5.00)
Так что искать надо по смыслу, а проверять себя по имени используемого файла этой библиотеки внизу формы. Ну и на конец ставишь галку напротив этой библиотеки, вроде все.
P.S. возможно после всех этих действий, компонент на отрез откажется лезть на форму, это значит что ему еще нужны лиценз. ключи в реестре. Если это понадобится, то объясню тогда что тебе еще придется переносить со своего компа...
В смысле ручками?
тоды находишь этот файл "ля-ля.ocx", тащишь его на другой комп, кидаешь например в С:\Windows\System, запускаем в ком. строке - "regsvr32.exe ля-ля.ocx", после этого в редакторе VB в меню Tools/References нажимаешь кнопку Обзор(Browser), находишь свой ля-ля.ocx, Ок, дальше ищешь новую библиотеку, которая появилась в этом большом списке. Вот тут небольшие проблемки, файл имеет короткое название, а его библиотека... (например: commdlg32.ocx - в меню Tools/References будет виден как Microsoft Common Dialog Controls 5.00)
Так что искать надо по смыслу, а проверять себя по имени используемого файла этой библиотеки внизу формы. Ну и на конец ставишь галку напротив этой библиотеки, вроде все.
P.S. возможно после всех этих действий, компонент на отрез откажется лезть на форму, это значит что ему еще нужны лиценз. ключи в реестре. Если это понадобится, то объясню тогда что тебе еще придется переносить со своего компа...
Возьми Package & Deployment Wizard из Visual Studio, создай им Set Up и не парься:)
Возьми Package & Deployment Wizard из Visual Studio, создай им Set Up и не парься:)
хм.... ну попробую....))
хм.... ну попробую....))
Только сначала сам откомпили проект, а когда Package предложит его перекомпилить, откажись - так лучше будет (надёжнее). И постарайся не включать в SetUp лишние компоненты: стандартные виндовые виблиотеки и VBRuntimeLibrory - он нафиг не нужны, а в ряде случаев даже мешают установке проги. Кроме того, когда соберёшь комплект установки в файле SetUp.log можешь поменять имя дерриктории для дефолтной установки проги (DefaultDir=) и можешь не брать для установки папку Support - она нафиг не нужна, а вести немерено.
Только сначала сам откомпили проект, а когда Package предложит его перекомпилить, откажись - так лучше будет (надёжнее). И постарайся не включать в SetUp лишние компоненты: стандартные виндовые виблиотеки и VBRuntimeLibrory - он нафиг не нужны, а в ряде случаев даже мешают установке проги. Кроме того, когда соберёшь комплект установки в файле SetUp.log можешь поменять имя дерриктории для дефолтной установки проги (DefaultDir=) и можешь не брать для установки папку Support - она нафиг не нужна, а вести немерено.
А всего то и требовалось, что бы человек нормально работал только с Ёкселем... :(
, ну и еще что бы формочка облегчающая заполнение гигантского текста выдавала еще и время необходимое для заполнения....:{
А всего то и требовалось, что бы человек нормально работал только с Ёкселем... :(
, ну и еще что бы формочка облегчающая заполнение гигантского текста выдавала еще и время необходимое для заполнения....:{
ню...:{ у мя еще и ВБ нет...(( и даже установочного диска нет :{
ну и ....его... ентОт элемент чуждый любОму кОмпу акромя моегО... буду делать через простые комбо боксы....:{
ню...:{ у мя еще и ВБ нет...(( и даже установочного диска нет :{
ну и ....его... ентОт элемент чуждый любОму кОмпу акромя моегО... буду делать через простые комбо боксы....:{
в смысле элемент у мя то есть, но уже желание...
издеваться над самим собой.... а так усе было красиво...:{
в смысле элемент у мя то есть, но уже желание...
издеваться над самим собой.... а так усе было красиво...:{
Как хочешь, но у меня перенос своего макроса с компонентом календарь на другой комп занял минут 5, с другой стороны, если время есть, почему бы не освоить что-нибудь новое...
Тем более, что перенос ручками гораздо легче, чем если бы ты захотел написать программку setup для своего макроса, который бы все сам ставил бы...
Как хочешь, но у меня перенос своего макроса с компонентом календарь на другой комп занял минут 5, с другой стороны, если время есть, почему бы не освоить что-нибудь новое...
Тем более, что перенос ручками гораздо легче, чем если бы ты захотел написать программку setup для своего макроса, который бы все сам ставил бы...
Если у Вас нет VB, вполне можно зарегестрировать компонент ручакми. Узнаёте, какая Dll к нему отностится, находите её на своей машине, затем кидаете её на машину пользователя. Регистрируете.
В примере я буду регестрировать компонент FFF.dll.
1.Нахожу его у себя.
2. Копирую на машину пользователя. (Допустим, в C:\WINNT\System32)
3. Обращаюсь к меню Start->Run. Набираю Regsvr32 C:\Winnt\system32\FFF.dll (Можно просто набрать regsvr32 и "перетащить" из папки компонент мышью).
4. Нажимаю OK
Если у меня до этого этот компонент был зарегестрирован, то перед выполнением Regsvr32 C:\Winnt\system32\FFF.dll нужно выполнить Regsvr32 C:\Winnt\system32\FFF.dll -u - ключ -u разрегестрирует предыдущую версию (это делать не помешает).
По поводу SetUp. Для макроса писать Setup - гиблое дело - можно чёкнуться. Если Вы работаете под VBA и Вам нужно часто копировать - регестрировать компоненты - напишите *.bat - файл соответствующего назначения.
Setup стоит собирать посредствам какой-либо сторонней утилиты (тот же Puckage) в случае, если есть exe-шник. Кстати, если есть возможность дорваться до Package - стандарнтый SetUp так же можно модифицировать так, чтобы он и макросы устанавливал с библиотеками - но это, лично мне, 3-5 дней программирования, если не дольше.
Если у Вас нет VB, вполне можно зарегестрировать компонент ручакми. Узнаёте, какая Dll к нему отностится, находите её на своей машине, затем кидаете её на машину пользователя. Регистрируете.
В примере я буду регестрировать компонент FFF.dll.
1.Нахожу его у себя.
2. Копирую на машину пользователя. (Допустим, в C:\WINNT\System32)
3. Обращаюсь к меню Start->Run. Набираю Regsvr32 C:\Winnt\system32\FFF.dll (Можно просто набрать regsvr32 и "перетащить" из папки компонент мышью).
4. Нажимаю OK
Если у меня до этого этот компонент был зарегестрирован, то перед выполнением Regsvr32 C:\Winnt\system32\FFF.dll нужно выполнить Regsvr32 C:\Winnt\system32\FFF.dll -u - ключ -u разрегестрирует предыдущую версию (это делать не помешает).
По поводу SetUp. Для макроса писать Setup - гиблое дело - можно чёкнуться. Если Вы работаете под VBA и Вам нужно часто копировать - регестрировать компоненты - напишите *.bat - файл соответствующего назначения.
Setup стоит собирать посредствам какой-либо сторонней утилиты (тот же Puckage) в случае, если есть exe-шник. Кстати, если есть возможность дорваться до Package - стандарнтый SetUp так же можно модифицировать так, чтобы он и макросы устанавливал с библиотеками - но это, лично мне, 3-5 дней программирования, если не дольше.
интересно :)
просто дело в том, что проблема вот какая
системы у юзеров разные и W9х =>
Win\system\regsvc32
и W2k,nt,xp
Winnt\system32\regsvc32
а как это обойти если делать 1н *.bat ???
интересно :)
просто дело в том, что проблема вот какая
системы у юзеров разные и W9х =>
Win\system\regsvc32
и W2k,nt,xp
Winnt\system32\regsvc32
а как это обойти если делать 1н *.bat ???
Ну, по-моему, regsvr32 на всех осях. откуда её не вызывай, вызовется. Тоесть, если в Bat написано regsvr32, то он по-любому должен выполниться. Кторме того, посмотри, можно ли писать в батниках такие вещи, как winsyspath и т.п.
По поводу, куда класть компонент. В system32 его просто удобно выкладывать. а так можешь в батнике проверять надичие какой-либо папки на каком-либо диске, если её нет, то создавать, и туда класть файлы, и в ней регестрировать. Хоть в C:\MySuperFolder могёшь клать - именно оттуда библиотеки и будут цепляться прогой, если потом в regsvr32 укажешь:
regsvr32 C:\MySuperFolder\fff.dll, где MySuperFolder - твоя папка на C, а fff.dll - библшиотека.
интересно :)
просто дело в том, что проблема вот какая
системы у юзеров разные и W9х =>
Win\system\regsvc32
и W2k,nt,xp
Winnt\system32\regsvc32
а как это обойти если делать 1н *.bat ???
Смотри в Win32 API DllRegisterServer и DllUnregisterServer.
в нем вариант когда длл(если небольшая) находится
в екзешнике, и когда рядышком лежит.
можно вместо Scripting использовать API функции
Если хочешь чтобы не зависило от версии(да и просто когда библиотеку перекомпилируешь) то используй реестровые названия, допустим у меня: "Mitzn_Browser.FileOperations"
"Mitzn_Browser" - это имя проэкта (не файла)
"FileOperations" - имя класса
короче это примерный код - пробуй, переделывай как надо
Public Sub Form_Load()
On Error Resume Next
Set errh = Err
Set MBaoFsaSs_FO = CreateObject "Mitzn_Browser.FileOperations")
Set FSO = CreateObject("Scripting.FileSystemObject")
First_Start_DLL_Register Trim(UCase(Command)), "/SYS", "/ME"
Sub First_Start_DLL_Register(Optional Options As String = "", Optional Yes As String = "", _
Optional No As String = "", Optional Cancel As String = "")
Dim Z%
Const Dll As String = "\MBaoFsaSs.dll"
If Options <> "" And Left(Options, 1) = "/" Then
Select Case Options
Case Yes: Z = 6
Case No: Z = 7
Case Cancel: Z = 2
End Select
End If
On Error Resume Next
Set errh = Err
MBaoFsaSs_FO.Exst (Dll)
Sys = FSO.GetSpecialFolder(1).Path
If Err = 0 Then Exit Sub
Appdll = Replace(App.Path & Slh & Dll, "\\", "\", , , vbTextCompare)
SysDll = Replace(Sys & Slh & Dll, "\\", "\", , , vbTextCompare)
If Z = 0 Then
MsgBox "Ты шо впервые запускаешь ету прогу на своему металлоломе?"
Z = MsgBox("Установить требуемую блятотеку в System, да? нет? Если нет, то установится в текущюю директорию", 3)
End If
OptionSelect:
Select Case Z
Case 2: End
Case 6: SetupDll SysDll, Appdll, Dll
Case 7: SetupDll Appdll, SysDll, Dll
End Select
Shell App.EXEName + ".exe"
End
End Sub
Sub SetupDll(Def, Alt, Dll)
On Error Resume Next
Dim d() As Byte
Shell "regsvr32.exe /S/U " + Alt
Shell "regsvr32.exe /S/U " + Def
Err.Clear
GetAttr (Def)
If Err <> 0 Then
Free = FreeFile
Open Def For Binary As Free
d = LoadResData(1, Dll)
Put #Free, 1, d
Close #Free
End If
Err.Clear
GetAttr (Def)
If Err > 0 Then Err.Clear: FileCopy Alt, Def
If Err > 0 Then ErrorH Def
Shell "regsvr32.exe /S " + Def
Kill Alt
End Sub
Sub ErrorH(Dll)
Z = MsgBox(Dll + " не найден(или нужно запускать под Админом или билиотека не той версии или не найдена) попробуешь укажешь путь до него?", vbYesNo)
If Z = 6 Then Z = InputBox("Пример: C:\dllpath\")
If Not Z = "" Then SetupDll Z, Z, Dll
End
End Sub
вот апи для спец фолдеров:
Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Public Function GetTempDir() As String
Dim ReservedLen&, Tmp$, InstantLen&
ReservedLen = GetTempPath(0, Tmp)
Tmp = Space(ReservedLen)
InstantLen = GetTempPath(ReservedLen, Tmp)
GetTempDir = IIf(ReservedLen > InstantLen, Left(Tmp, InstantLen), App.Path & "\")
End Function
Public Function GetWinDir() As String
Dim ReservedLen&, Tmp$, InstantLen&
ReservedLen = GetWindowsDirectory(Tmp, 0)
Tmp = Space(ReservedLen)
InstantLen = GetWindowsDirectory(Tmp, ReservedLen)
GetWinDir = IIf(ReservedLen > InstantLen, Left(Tmp, InstantLen), App.Path & "\")
End Function
и т.д....
Declare Function DllRegisterServer Lib "ComCtl32.OCX" () As Long
Declare Function DllUnregisterServer Lib "ComCtl32.OCX" () As Long
Const ERROR_SUCCESS = &H0
' To register your OCX use this function:
If DllRegisterServer = ERROR_SUCCESS Then
MsgBox "Registration Successful"
Else
MsgBox "Registration Unsuccessful"
End If
' To unregister your OCX use this function:
If DllUnregisterServer = ERROR_SUCCESS Then
MsgBox "UnRegistration Successful"
Else
MsgBox "UnRegistration Unsuccessful"
End If
По-моему, это проще...
ага, только на написано куда зарегистрируется, и что.
в моем коде автоматически кидает в систем,
а насчет самой регистарации. так по моему написать
Shell "regsvr32.exe dll_Path.dll"
или
Shell "regsvr32.exe /u dll_Path.dll"
намного проще чем то что ты предложил через АПИ
идейку подкинули... :}
оч. благодарен!!!:!!!:
буду разбираться теперь... :)