Solved

Screen Saver

Posted on 1998-12-02
23
331 Views
Last Modified: 2013-11-26
Hi,

I have started making a screen saver with few gifs. I would like to use effects like "box-in" "box-out", etc (like the ones you can use on a powerpoint presentation. Can someone help me with these. I would like to have atlease 4-5 different effects.

Thanks. Dooj
0
Comment
Question by:Dooj
  • 13
  • 10
23 Comments
 
LVL 14

Accepted Solution

by:
waty earned 200 total points
ID: 1447932
0
 

Author Comment

by:Dooj
ID: 1447933
Thanks, Waty. Do you think you can devote some time to help me with the code? Can u give me a brief outline as to how to do it?

Thanks.

Dooj
0
 
LVL 14

Expert Comment

by:waty
ID: 1447934
Tell me what, I will see if I can help you. If you want a full Screen Saver with sprites, give me your e-mail, I will send to you. (waty.thierry@usa.net)
0
 

Author Comment

by:Dooj
ID: 1447935
waty,

you can send the code to Dooj@hotmail.com

Thanks.

Regards, Dooj
0
 

Author Comment

by:Dooj
ID: 1447936
waty,

I need the screen saver ready before this saturday - Thats the reason I would like to have a look at your code. I would, of course, like to create my screen saver - for which, I suspect, I would need lot of help from you. If You can forward me your screen saver code, I will grade you for this question and then repost the question for you. Will you be able to help me with writing the whole code by myself? Warning: you 'll need lots of patience :)

Thanks.

Regards, Dooj
0
 
LVL 14

Expert Comment

by:waty
ID: 1447937
I have sended the code to you.
0
 

Author Comment

by:Dooj
ID: 1447938
Thanks, waty.

But your code is giving an error. I put your file (.scr) in teh windows directory (along with teh images) and when I tried to preview it, it said "Runtime error 429' - ActiveX component cant create object.

When I tried to rtun it through VB, it said "User defined function not available -or something like that ... I could not run it again.

Cheers, Dooj
0
 

Author Comment

by:Dooj
ID: 1447939
Waty,

I know why I am not able to run your program - I dont have SSubtmr.dll. Is this available for Win 95 as well? Where can I get a copy of this dll?

Regards, Dooj
0
 
LVL 14

Expert Comment

by:waty
ID: 1447940
0
 

Author Comment

by:Dooj
ID: 1447941
Thanks, waty.

But your code is still giving an error - Error # 429 : ActiveX component cant create object. Could you tell me whats wrong please?
0
 
LVL 14

Expert Comment

by:waty
ID: 1447942
Did you tried to recompile it?

Try it in the VB IDE, and tell me on what line it stops.
0
Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

 

Author Comment

by:Dooj
ID: 1447943
waty,

When I compiled it, it highlighted the line  Dim cR As New cRegistry and said "user-defined type not  defined". So, I changed the line to on the line  Dim cR As New class-registry
After that, it went full screen and gave the error " Error # 429 : ActiveX component cant create object" I could not debug it either.

Regards, Dooj
0
 
LVL 14

Expert Comment

by:waty
ID: 1447944
Here is the class, add it in your project :

' #VBIDEUtils#************************************************************
' * Programmer Name  : Steve McMahon
' * Web Site         : http://www.dogma.demon.co.uk/
' * E-Mail           : steve@dogma.demon.co.uk
' * Date             : 25/09/98
' * Time             : 14:49
' * Module Name      : class_Registry
' * Module Filename  : Registry.cls
' **********************************************************************
' * Comments         : This class is an easy, self-contained way to get
' *  complete access to the Windows registry.
' *  Simple methods allow you to create, enumerate and delete keys
' *  and values in the registry, without restriction.
' *  You can even read/write binary data to the registry.
' *
' * Example :
' *  get a String Value from the Registry
' *    Dim clsRegistry As New class_Registry
' *    With clsRegistry
' *       .ClassKey = HKEY_LOCAL_MACHINE
' *       .SectionKey = "Software\PrintPreview"
' *       .ValueKey = "Version"
' *       .ValueType = REG_SZ
' *       sTip = .Value
' *    End With
' *
' *  Save a Form's position to the Registry
' *    Dim clsRegistry As New class_Registry
' *    With clsRegistry
' *       .ClassKey = HKEY_CURRENT_USER
' *       ' You don't need to check if this key already exists
' *       ' - the class will create it for you
' *       .SectionKey = "Software\" & App.EXEName & "\" & frmThis.name
' *       .ValueKey = "Maximized"
' *       .ValueType = REG_DWORD
' *       .Value = (frmThis.WindowState = vbMaximized)
' *       If (frmThis.WindowState <> vbMaximized)
' *           .ValueKey = "Left"
' *           .Value = frmThis.Left
' *           .ValueKey = "Top"
' *           .Value = frmThis.Top
' *           .ValueKey = "Width"
' *           .Value = frmThis.Width
' *           .ValueKey = "Height"
' *           .Value = frmThis.Height
' *       End If
' *    End With
' *
' **********************************************************************

Option Explicit

' *** Registry Specific Access Rights
Private Const KEY_QUERY_VALUE = &H1
Private Const KEY_SET_VALUE = &H2
Private Const KEY_CREATE_SUB_KEY = &H4
Private Const KEY_ENUMERATE_SUB_KEYS = &H8
Private Const KEY_NOTIFY = &H10
Private Const KEY_CREATE_LINK = &H20
Private Const KEY_ALL_ACCESS = &H3F

' *** Open/Create Options
Private Const REG_OPTION_NON_VOLATILE = 0&
Private Const REG_OPTION_VOLATILE = &H1

' *** Key creation/open disposition
Private Const REG_CREATED_NEW_KEY = &H1
Private Const REG_OPENED_EXISTING_KEY = &H2

' *** masks for the predefined standard access types
Private Const STANDARD_RIGHTS_ALL = &H1F0000
Private Const SPECIFIC_RIGHTS_ALL = &HFFFF

' *** Define severity codes
Private Const ERROR_SUCCESS = 0&
Private Const ERROR_ACCESS_DENIED = 5
Private Const ERROR_INVALID_DATA = 13&
Private Const ERROR_MORE_DATA = 234 ' ***   dderror
Private Const ERROR_NO_MORE_ITEMS = 259

' *** Structures Needed For Registry Prototypes
Private Type SECURITY_ATTRIBUTES
   nLength As Long
   lpSecurityDescriptor As Long
   bInheritHandle As Boolean
End Type

Private Type FILETIME
   dwLowDateTime As Long
   dwHighDateTime As Long
End Type

' *** Registry Function Prototypes
Private Declare Function RegOpenKeyEx Lib "Advapi32" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegSetValueExStr Lib "Advapi32" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal szData As String, ByVal cbData As Long) As Long
Private Declare Function RegSetValueExLong Lib "Advapi32" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, szData As Long, ByVal cbData As Long) As Long
Private Declare Function RegSetValueExByte Lib "Advapi32" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, szData As Byte, ByVal cbData As Long) As Long

Private Declare Function RegCloseKey Lib "Advapi32" (ByVal hKey As Long) As Long

Private Declare Function RegQueryValueExStr Lib "Advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal szData As String, ByRef lpcbData As Long) As Long
Private Declare Function RegQueryValueExLong Lib "Advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, szData As Long, ByRef lpcbData As Long) As Long
Private Declare Function RegQueryValueExByte Lib "Advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, szData As Byte, ByRef lpcbData As Long) As Long

Private Declare Function RegCreateKeyEx Lib "Advapi32" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long

Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long
Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, ByVal lpType As Long, ByVal lpData As Long, ByVal lpcbData As Long) As Long
Private Declare Function RegEnumValueLong Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
Private Declare Function RegEnumValueStr Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
Private Declare Function RegEnumValueByte Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long

Private Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal hKey As Long, ByVal lpClass As String, lpcbClass As Long, ByVal lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As Any) As Long
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long

' ***  Other declares:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
Private Declare Function ExpandEnvironmentStrings Lib "kernel32" Alias "ExpandEnvironmentStringsA" (ByVal lpSrc As String, ByVal lpDst As String, ByVal nSize As Long) As Long

Public Enum ERegistryClassConstants
   HKEY_CLASSES_ROOT = &H80000000
   HKEY_CURRENT_USER = &H80000001
   HKEY_LOCAL_MACHINE = &H80000002
   HKEY_USERS = &H80000003
   HKEY_PERFORMANCE_DATA = &H80000004
   HKEY_CURRENT_CONFIG = &H80000005
   HKEY_DYN_DATA = &H80000006
End Enum

Public Enum ERegistryValueTypes
   ' *** Predefined Value Types
   REG_NONE = (0)                         ' *** No value type
   REG_SZ = (1)                           ' *** Unicode nul terminated string
   REG_EXPAND_SZ = (2)                    ' *** Unicode nul terminated string w/enviornment var
   REG_BINARY = (3)                       ' *** Free form binary
   REG_DWORD = (4)                        ' *** 32-bit number
   REG_DWORD_LITTLE_ENDIAN = (4)          ' *** 32-bit number (same as REG_DWORD)
   REG_DWORD_BIG_ENDIAN = (5)             ' *** 32-bit number
   REG_LINK = (6)                         ' *** Symbolic Link (unicode)
   REG_MULTI_SZ = (7)                     ' *** Multiple Unicode strings
   REG_RESOURCE_LIST = (8)                ' *** Resource list in the resource map
   REG_FULL_RESOURCE_DESCRIPTOR = (9)     ' *** Resource list in the hardware description
   REG_RESOURCE_REQUIREMENTS_LIST = (10)
End Enum

Private m_hClassKey As Long
Private m_sSectionKey As String
Private m_sValueKey As String
Private m_vValue As Variant
Private m_sSetValue As String
Private m_vDefault As Variant
Private m_eValueType As ERegistryValueTypes

Public Property Get KeyExists() As Boolean
   ' *** KeyExists = bCheckKeyExists( _
    ' ***                 m_hClassKey, _
    ' ***                 m_sSectionKey _
    ' ***             )
   
   Dim hKey As Long
   
   If RegOpenKeyEx(m_hClassKey, m_sSectionKey, 0, 1, hKey) = ERROR_SUCCESS Then
      KeyExists = True
      RegCloseKey hKey
   Else
      KeyExists = False
   End If

End Property

Public Function CreateKey() As Boolean
   
   Dim tSA        As SECURITY_ATTRIBUTES
   Dim hKey       As Long
   Dim lCreate    As Long
   Dim e          As Long

   ' *** Open or Create the key
   e = RegCreateKeyEx(m_hClassKey, m_sSectionKey, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, tSA, hKey, lCreate)
   If e Then
      Err.Raise 26001, App.EXEName & ".cRegistry", "Failed to create registry Key: ' *** " & m_sSectionKey
   Else
      CreateKey = (e = ERROR_SUCCESS)
      ' *** Close the key
      RegCloseKey hKey
   End If
   
End Function

Public Function DeleteKey() As Boolean
   
   Dim e As Long
   e = RegDeleteKey(m_hClassKey, m_sSectionKey)
   If e Then
      Err.Raise 26001, App.EXEName & ".cRegistry", "Failed to delete registry Key: ' *** " & m_hClassKey & "' *** ,Section: ' *** " & m_sSectionKey
   Else
      DeleteKey = (e = ERROR_SUCCESS)
   End If

End Function

Public Function DeleteValue() As Boolean
   
   Dim e       As Long
   Dim hKey    As Long

   e = RegOpenKeyEx(m_hClassKey, m_sSectionKey, 0, KEY_ALL_ACCESS, hKey)
   If e Then
      Err.Raise 26001, App.EXEName & ".cRegistry", "Failed to open key ' *** " & m_hClassKey & "' *** ,Section: ' *** " & m_sSectionKey & "' ***  for delete access"
   Else
      e = RegDeleteValue(hKey, m_sValueKey)
      If e Then
         Err.Raise 26001, App.EXEName & ".cRegistry", "Failed to delete registry Key: ' *** " & m_hClassKey & "' *** ,Section: ' *** " & m_sSectionKey & "' *** ,Key: ' *** " & m_sValueKey
      Else
         DeleteValue = (e = ERROR_SUCCESS)
      End If
   End If

End Function

Public Property Get Value() As Variant
   
   Dim vValue     As Variant
   Dim cData      As Long
   Dim sData      As String
   Dim ordType    As Long
   Dim e          As Long
   Dim hKey       As Long

   e = RegOpenKeyEx(m_hClassKey, m_sSectionKey, 0, KEY_QUERY_VALUE, hKey)
   ' *** ApiRaiseIf e

   e = RegQueryValueExLong(hKey, m_sValueKey, 0&, ordType, 0&, cData)
   If e And e <> ERROR_MORE_DATA Then
      Value = m_vDefault
      Exit Property
   End If

   m_eValueType = ordType
   Select Case ordType
      Case REG_DWORD, REG_DWORD_LITTLE_ENDIAN
         Dim iData As Long
         e = RegQueryValueExLong(hKey, m_sValueKey, 0&, ordType, iData, cData)
         vValue = CLng(iData)

      Case REG_DWORD_BIG_ENDIAN  ' ***  Unlikely, but you never know
         Dim dwData As Long
         e = RegQueryValueExLong(hKey, m_sValueKey, 0&, ordType, dwData, cData)
         vValue = SwapEndian(dwData)

      Case REG_SZ, REG_MULTI_SZ ' ***  Same thing to Visual Basic
         sData = String$(cData - 1, 0)
         e = RegQueryValueExStr(hKey, m_sValueKey, 0&, ordType, sData, cData)
         vValue = sData

      Case REG_EXPAND_SZ
         sData = String$(cData - 1, 0)
         e = RegQueryValueExStr(hKey, m_sValueKey, 0&, ordType, sData, cData)
         vValue = ExpandEnvStr(sData)

         ' ***  Catch REG_BINARY and anything else
      Case Else
         Dim abData() As Byte
         ReDim abData(cData)
         e = RegQueryValueExByte(hKey, m_sValueKey, 0&, ordType, abData(0), cData)
         vValue = abData

   End Select
   Value = vValue

End Property

Public Property Let Value(ByVal vValue As Variant)
   
   Dim ordType       As Long
   Dim c             As Long
   Dim hKey          As Long
   Dim e             As Long
   Dim lCreate       As Long
   Dim tSA           As SECURITY_ATTRIBUTES

   ' *** Open or Create the key
   e = RegCreateKeyEx(m_hClassKey, m_sSectionKey, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, tSA, hKey, lCreate)

   If e Then
      Err.Raise 26001, App.EXEName & ".cRegistry", "Failed to set registry value Key: ' *** " & m_hClassKey & "' *** ,Section: ' *** " & m_sSectionKey & "' *** ,Key: ' *** " & m_sValueKey & "' ***  to value: ' *** " & m_vValue & "' *** "
   Else

      Select Case m_eValueType
         Case REG_BINARY
            If (VarType(vValue) = vbArray + vbByte) Then
               Dim ab() As Byte
               ab = vValue
               ordType = REG_BINARY
               c = UBound(ab) - LBound(ab) - 1
               e = RegSetValueExByte(hKey, m_sValueKey, 0&, ordType, ab(0), c)
            Else
               Err.Raise 26001
            End If
         Case REG_DWORD, REG_DWORD_BIG_ENDIAN, REG_DWORD_LITTLE_ENDIAN
            If (VarType(vValue) = vbInteger) Or (VarType(vValue) = vbLong) Then
               Dim I As Long
               I = vValue
               ordType = REG_DWORD
               e = RegSetValueExLong(hKey, m_sValueKey, 0&, ordType, I, 4)
            End If
         Case REG_SZ, REG_EXPAND_SZ
            Dim s As String, iPos As Long
            s = vValue
            ordType = REG_SZ
            ' ***  Assume anything with two non-adjacent percents is expanded string
            iPos = InStr(s, "%")
            If iPos Then
               If InStr(iPos + 2, s, "%") Then ordType = REG_EXPAND_SZ
            End If
            c = Len(s) + 1
            e = RegSetValueExStr(hKey, m_sValueKey, 0&, ordType, s, c)

            ' ***  User should convert to a compatible type before calling
         Case Else
            e = ERROR_INVALID_DATA

      End Select

      If Not e Then
         m_vValue = vValue
      Else
         Err.Raise vbObjectError + 1048 + 26001, App.EXEName & ".cRegistry", "Failed to set registry value Key: ' *** " & m_hClassKey & "' *** ,Section: ' *** " & m_sSectionKey & "' *** ,Key: ' *** " & m_sValueKey & "' ***  to value: ' *** " & m_vValue & "' *** "
      End If

      ' *** Close the key
      RegCloseKey hKey

   End If

End Property

Public Function EnumerateValues(ByRef sKeyNames() As String, ByRef iKeyCount As Long) As Boolean
   
   Dim lResult       As Long
   Dim hKey          As Long
   Dim SName         As String
   Dim lNameSize     As Long
   Dim sData         As String
   Dim lIndex        As Long
   Dim cJunk         As Long
   Dim cNameMax      As Long
   Dim ft            As Currency

   ' ***  Log "EnterEnumerateValues"

   iKeyCount = 0
   Erase sKeyNames()

   lIndex = 0
   lResult = RegOpenKeyEx(m_hClassKey, m_sSectionKey, 0, KEY_QUERY_VALUE, hKey)
   If (lResult = ERROR_SUCCESS) Then
      ' ***  Log "OpenedKey:" & m_hClassKey & "," & m_sSectionKey
      lResult = RegQueryInfoKey(hKey, "", cJunk, 0, cJunk, cJunk, cJunk, cJunk, cNameMax, cJunk, cJunk, ft)
      Do While lResult = ERROR_SUCCESS

         ' *** Set buffer space
         lNameSize = cNameMax + 1
         SName = String$(lNameSize, 0)
         If (lNameSize = 0) Then lNameSize = 1

         ' ***  Log "Requesting Next Value"

         ' *** Get value name:
         lResult = RegEnumValue(hKey, lIndex, SName, lNameSize, 0&, 0&, 0&, 0&)
         
         ' ***  Log "RegEnumValue returned:" & lResult
         If (lResult = ERROR_SUCCESS) Then

            ' ***  Although in theory you can also retrieve the actual
            ' ***  value and type here, I found it always (ultimately) resulted in
            ' ***  a GPF, on Win95 and NT.  Why?  Can anyone help?

            SName = Left$(SName, lNameSize)
            ' ***  Log "Enumerated value:" & sName

            iKeyCount = iKeyCount + 1
            ReDim Preserve sKeyNames(1 To iKeyCount) As String
            sKeyNames(iKeyCount) = SName
         End If
         lIndex = lIndex + 1
      Loop
   End If
   If (hKey <> 0) Then
      RegCloseKey hKey
   End If

   ' ***  Log "Exit Enumerate Values"
   EnumerateValues = True
   Exit Function

EnumerateValuesError:
   If (hKey <> 0) Then
      RegCloseKey hKey
   End If
   Err.Raise vbObjectError + 1048 + 26003, App.EXEName & ".cRegistry", Err.Description
   Exit Function

End Function

Public Function EnumerateSections(ByRef sSect() As String, ByRef iSectCount As Long) As Boolean
   
   Dim lResult       As Long
   Dim hKey          As Long
   Dim dwReserved    As Long
   Dim szBuffer      As String
   Dim lBuffSize     As Long
   Dim lIndex        As Long
   Dim lType         As Long
   Dim sCompKey      As String
   Dim iPos          As Long

   On Error GoTo EnumerateSectionsError

   iSectCount = 0
   Erase sSect
   ' ***
   lIndex = 0

   lResult = RegOpenKeyEx(m_hClassKey, m_sSectionKey, 0, KEY_ENUMERATE_SUB_KEYS, hKey)
   Do While lResult = ERROR_SUCCESS
      ' *** Set buffer space
      szBuffer = String$(255, 0)
      lBuffSize = Len(szBuffer)

      ' *** Get next value
      lResult = RegEnumKey(hKey, lIndex, szBuffer, lBuffSize)

      If (lResult = ERROR_SUCCESS) Then
         iSectCount = iSectCount + 1
         ReDim Preserve sSect(1 To iSectCount) As String
         iPos = InStr(szBuffer, Chr$(0))
         If (iPos > 0) Then
            sSect(iSectCount) = Left(szBuffer, iPos - 1)
         Else
            sSect(iSectCount) = Left(szBuffer, lBuffSize)
         End If
      End If

      lIndex = lIndex + 1
   Loop
   If (hKey <> 0) Then
      RegCloseKey hKey
   End If
   EnumerateSections = True
   Exit Function

EnumerateSectionsError:
   If (hKey <> 0) Then
      RegCloseKey hKey
   End If
   Err.Raise vbObjectError + 1048 + 26002, App.EXEName & ".cRegistry", Err.Description
   Exit Function

End Function

Public Sub CreateEXEAssociation(ByVal sExePath As String, ByVal sClassName As String, ByVal sClassDescription As String, ByVal sAssociation As String, Optional ByVal lDefaultIconIndex As Long = -1)
   
   ClassKey = HKEY_CLASSES_ROOT
   SectionKey = "." & sAssociation
   ValueKey = ""
   Value = sClassName
   SectionKey = "." & sAssociation & "\shell\open\command"
   ValueKey = ""
   Value = sExePath & " ""%1"""

   SectionKey = sClassName
   ValueKey = ""
   Value = sClassDescription
   SectionKey = sClassName & "\shell\open\command"
   ValueKey = sExePath & " ""%1"""
   If lDefaultIconIndex > -1 Then
      SectionKey = sClassName & "\DefaultIcon"
      ValueKey = ""
      Value = sExePath & "," & CStr(lDefaultIconIndex)
   End If

End Sub

Public Property Get ValueType() As ERegistryValueTypes
   
   ValueType = m_eValueType

End Property

Public Property Let ValueType(ByVal eValueType As ERegistryValueTypes)
   
   m_eValueType = eValueType

End Property

Public Property Get ClassKey() As ERegistryClassConstants
   
   ClassKey = m_hClassKey

End Property

Public Property Let ClassKey(ByVal eKey As ERegistryClassConstants)
   
   m_hClassKey = eKey

End Property

Public Property Get SectionKey() As String
   
   SectionKey = m_sSectionKey

End Property

Public Property Let SectionKey(ByVal sSectionKey As String)
   
   m_sSectionKey = sSectionKey

End Property

Public Property Get ValueKey() As String
   
   ValueKey = m_sValueKey

End Property

Public Property Let ValueKey(ByVal sValueKey As String)
   
   m_sValueKey = sValueKey

End Property

Public Property Get Default() As Variant
   
   Default = m_vDefault

End Property

Public Property Let Default(ByVal vDefault As Variant)
   
   m_vDefault = vDefault

End Property

Private Function SwapEndian(ByVal dw As Long) As Long
   
   CopyMemory ByVal VarPtr(SwapEndian) + 3, dw, 1
   CopyMemory ByVal VarPtr(SwapEndian) + 2, ByVal VarPtr(dw) + 1, 1
   CopyMemory ByVal VarPtr(SwapEndian) + 1, ByVal VarPtr(dw) + 2, 1
   CopyMemory SwapEndian, ByVal VarPtr(dw) + 3, 1

End Function

Private Function ExpandEnvStr(sData As String) As String
   
   Dim c As Long, s As String
   
   ' ***  Get the length
   s = "" ' ***  Needed to get around Windows 95 limitation
   c = ExpandEnvironmentStrings(sData, s, c)
   ' ***  Expand the string
   s = String$(c - 1, 0)
   c = ExpandEnvironmentStrings(sData, s, c)
   ExpandEnvStr = s

End Function

Public Function GetRegistrySetting(nKeyRoot As ERegistryClassConstants, sKeyName As String, sSubKeyRef As String, sDefault As String, Optional vValueType As ERegistryValueTypes = REG_EXPAND_SZ) As String
   ' *** Return the value of a settings in the registry

   ClassKey = nKeyRoot
   SectionKey = sKeyName
   ValueKey = sSubKeyRef
   Default = sDefault
   ValueType = vValueType

   GetRegistrySetting = Value

End Function

Public Sub SetRegistrySetting(nKeyRoot As ERegistryClassConstants, sSubKeyRef As String, sKeyName As String, sValue As String, Optional vValueType As ERegistryValueTypes = REG_EXPAND_SZ)
   ' *** Set a value in the registry

   ClassKey = nKeyRoot
   SectionKey = sSubKeyRef
   ValueKey = sKeyName
   ValueType = vValueType
   Value = sValue

End Sub

0
 

Author Comment

by:Dooj
ID: 1447945
waty,

I have this class file already. As I had mentioned it didnt recognise "c_Registry". when i changed it to class_Registry, the error disapperaed. But I still get the ActiveX error. Is there a way we can talk real time. I think because of the time difference, I have to wait one full day before I get a reply from u. If you can think of a way to talk real time please let me know. Also, if you can tell me when you log in (let me also know which part of the world you come frm - i am in australia) - I will try to log in when u r online.

Cheers, Dooj
0
 
LVL 14

Expert Comment

by:waty
ID: 1447946
I am in Belgium, now it is 11:25, I am GTM+1.

I began at 09:00 and leave at 18:00 (around those hours).

I send to you another version with all DLL, it works perfectly here

Thierry
0
 

Author Comment

by:Dooj
ID: 1447947
waty,

I still get the same message. Error 429:. I dont know what the problem is. As I cant even debug. It displayes a mesage box with '/' in it and when I press ok , it loads the SSaver form and then displays the message. I am using vb 5.0 what do you think could be wrong. I will try to log in tonight and talk to u.

Cheers, Dooj
If you use ICQ, please forward me the number...if its ok with u
0
 

Author Comment

by:Dooj
ID: 1447948
waty,

this happens after "Me.Show" in SSaver Form Load section. Hope u can help.

Cheers,
0
 
LVL 14

Expert Comment

by:waty
ID: 1447949
If you know a way to configure ICQ behind a proxy, I could connect, but I unluckly don't know a way.

The messagebox was there for my debug. This screen saver is still in debug.

NB : Do you have installed Service Pack 3 of VB5?
0
 

Author Comment

by:Dooj
ID: 1447950
waty,

I am running VB on win95. I think service packs are for Win Nt (am I right?). I will try it on Win Nt at home and let you know the outcome. does this mean that applications created on Win Nt cant be used on other OS?

Cheers, Dooj
Ps: About ICQ-- As long as u are not behind a firewall, I think you can ICQ. I will confirm this and let u know.
0
 
LVL 14

Expert Comment

by:waty
ID: 1447951
No,
You have also Service Pack for VB.

Download it here : http://members.xoom.com/zeto/files/vb5sp3a.zip

Most of application created under NT could work under 95. Except when calling some APIs (network...)
0
 

Author Comment

by:Dooj
ID: 1447952
waty,

I have installed SP3 but still get the same message. I have located the exact line where the error occurs. Its in SSaver Form Load (), on the line "Set m_tmr = New CTimer" (just after Me.Load) Runtime error 429: ActiveX component cant create object.

What must be wrong?

Cheers, Dooj

0
 
LVL 14

Expert Comment

by:waty
ID: 1447953
The CTimer is a class you can find in the SSubTimer DLL.
The DLL is not probably correctly registered.
You could download the source code on VBDiamond, and enventually recompile it.
0
 

Author Comment

by:Dooj
ID: 1447954
waty,

Happy New Year!

Sorry, I didnt get back earlier. I was on holidays and now I have some visitors. So, I didnt get any time to work on the program. I will try to work on it this weekend and get back tyo you.

Cheers, Dooj
0

Featured Post

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

Suggested Solutions

You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

707 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now