Error Visual basic 6 Runtime error 7 por culpa de “Microsoft Forms 2.0 Object library” (FM20.DLL)
Lunes, 1 de Septiembre de 2008Una aplicacion de vb 6 que funcionaba correctamente, me toca reinstalar el windows por uno original y pumm. La aplicación al iniciar lanza un error 7, memoria insuficiente (Error 7, Memoria insuficiente) o en ingles: "Out of Memory, runtime error 7".
Me he puesto a registar los dll's necesarios para el programa y todos bien. mediante el comando regsrv32, en este caso:
- regsvr32 C:\mdu\VBMySQLDirect.dll -> Myslq conector
- regsvr32 C:\mdu\Mscomctl.ocx
- regsvr32 C:\mdu\COMCTL32.OCX
- regsvr32 C:\mdu\FM20.DLL -> menu desplegables con autocompletado -> EL PROBLEMA!
- regsvr32 C:\mdu\ImageWeb.ocx -> gif animados
El error seguia... El problema en mi caso, venia por usar un componente en el proyecto del tipo: Microsoft Forms 2.0 Object library", este component contenido en su dll FM20.DLL correctamente en la carpeta del programa y registrado sin problemas, resulta que no es capaz de funcionar sin el OFFICE... Así que el causante de todo esto es un bug de este componente que no es capaz decir nada mas que : "RUNTIME ERROR 7: Out of Memory".
El programa en cuestion usaba este componente para hacer una imitación a un suggest en un combobox. Que ahora he sustituido por una función de autoCompletado sin usar nada mas que cuatro porciones de código:
-
' Una variable en las declaraciones del formulario que contiene el combo:
-
-
Private Backspaced as As Boolean
-
-
'una funcion que puedes poner en un modulo, o en las declaraciones del form , es la encargada de autocompletar
-
-
Public Function AutoCompletadoCombo(ctlComboBox As Control)
-
'--------- <<Called from the _Change event of cboComboBox>> ----------------
-
' -- autor: http://vbasic.astalaweb.com/C_ComboBox/1_Combobox.asp -------
-
-
Dim i%, intSel% ' % is a "shorthand" for Integers
-
-
'If this fires in response to a Backspace or Delete, then
-
'Exit the function because then you wouldn't be able to backup:
-
Select Case (Backspaced Or Len(ctlComboBox .Text) = 0)
-
Case True: Backspaced = False: Exit Function
-
End Select
-
-
With ctlComboBox
-
'Run through the available items in a For...Loop and grab
-
'the first one that matches the selection:
-
For i = 0 To .ListCount - 1
-
If InStr(1, .List(i), .Text, vbTextCompare) = 1 Then
-
intSel = .SelStart
-
.Text = .List(i)
-
.SelStart = intSel
-
.SelLength = Len(.Text) - intSel
-
Exit For
-
-
End If
-
Next i
-
End With
-
-
End Function
-
-
' Y en el evento KEYDOWN del control combo_box
-
Select Case KeyCode
-
Case vbKeyBack, vbKeyDelete 'if the Backspace or Delete key is pressed...
-
Select Case Len(NOMBRE_DEL_COMBOBOX.Text)
-
Case Is <> 0 '...and if the cboComboBox has text, then
-
Backspaced = True 'set this to True
-
-
End Select
-
End Select
-
-
' para activarlo en el evento Change del <strong>combobox </strong>es necesario llamar a la funciona de autocompletado:
-
-
AutoCompletadoCombo nombreDelComboBox
un ejemplo sencillo para descargar
Al ejemplo le faltaba que fuera correctamente la propiedad listindex del combo, la que yo utilizaba, asi que tuve que modificar unas lineas para conseguirlo. Si alquien lo pide lo posteare...
Con este sencillo codigo tenemos un control combo box normal convertido en un suggest con el contenido de el. Adios al componente Microsoft Forms 2.0 object Library y a las dependencias del programa a tener instalado Microsfot office! Todo por instalar OpenOfice :P vaya dia!