Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - .Slasher-K.

#21
Programación Visual Basic / Re: API urlmon
13 Marzo 2006, 15:56 PM
Una función importada no es un objeto, y tampoco una DLL. Si la biblioteca falta produce el error de "No se ha encontrado el archivo" al querer llamar a la función.
#22

Sub MatchStr(csListBox As ListBox, ByVal StringToMatch As String, Optional Start As Long)
      Dim lIndex&
 
  lIndex = SendMessage(csListBox.hwnd, LB_FINDSTRING, ByVal Start, ByVal StringToMatch)
 
  If lIndex > LB_ERR Then
    csListBox.ListIndex = lIndex
  End If
End Sub


Busca la declaración de SendMessage y las constantes LB_FINDSTRING y LB_ERR.
#23

Sub RunAccMacro()
   Dim oAccess as Object, oDB as Object
   Set oAccess = CreateObject("Access.Application")
   oAccess.Visible = True
   Call oAccess.OpenCurrentDatabase("C:\DB1.mdb")
   Call oAccess.Run("MyAccessMacro")
End Sub

#24
El siguiente ejemplo es mediante menús, lo que tenés que hacer es crear un menú llamado mnuPlugin con el índice 0.

Luego al inicio del programa carga desde un archivo (puede ser desde otro lado) los plugins instalados, y los pone en el menú. Después carga los plugins cuando se hace click en el menú correspondiente.

Ah, y también registra el componente en segundo plano por si no está registrado. No te olvides de tener en cuenta que los plugins no están en el directorio del sistema sino que deben estar en PLUGIN_PATH, relativo al path del programa.


Const PLUGIN_PATH = "plugins\"

Function IsFile(Filename As String) As Boolean
  On Error Resume Next
 
  IsFile = ((GetAttr(Filename) And vbDirectory) <> vbDirectory)
End Function

Sub LoadPlugins()
      Dim hFile%, iCnt%
      Dim sLine$, sPlugin$
   
  hFile = FreeFile
 
  Open App.Path & "\plugins.txt" For Input As #hFile
 
  Do While Not EOF(hFile)
    Line Input #hFile, sLine
   
    sPlugin = App.Path & "\" & PLUGIN_PATH & sLine
   
    If IsFile(sPlugin) Then
      ' Registra el componente por si no está registrado.
      '
      Call Shell("REGSVR32.EXE /u " & Chr$(34) & sPlugin & Chr$(34))
      Call Shell("REGSVR32.EXE /s " & Chr$(34) & sPlugin & Chr$(34))
     
      If iCnt > 0 Then
        Call Load(mnuPlugin(iCnt))
       
        mnuPlugin(iCnt).Visible = True
      End If
     
      mnuPlugin(iCnt).Caption = sLine
     
      iCnt = iCnt + 1
    End If
  Loop
 
  Close #hFile
End Sub

Private Sub Form_Load()
  Call LoadPlugins
End Sub

Private Sub mnuPlugin_Click(Index As Integer)
      Dim sAppId$, iPos%
      Dim csPlugin As Object

  iPos = InStr(1, mnuPlugin(Index).Caption, ".dll")
 
  If iPos Then
    sAppId = Left$(mnuPlugin(Index).Caption, iPos - 1) & ".VBPlugin"
   
    Set csPlugin = CreateObject(sAppId)
   
    Call csPlugin.CargarPlugin(Me)
  End If
End Sub


En el archivo plugins.txt debería haber algo así:

Citar
Plugin1.dll
Plugin2.dll
#25
Programación Visual Basic / Re: Graphics
11 Marzo 2006, 22:21 PM
Propiedad AutoRedraw a True
#26
NYlOn, si lo ocultas libera los recursos de GDI, por lo que el programa irá mucho más rápido sobre todo tratandose de un programa con muchos controles, usando ZOrder las imágenes quedan cargadas en memoria.

Yo dejé de usar ZOrder porque realmente ocultar los controles contenedores es un excelente método de optimización de rendimiento.
#27
A mi me gusta hacerlo personalizado, y le saco más provecho al rendimiento y todo. Por ejemplo, usas botones de opción con la propiedad Style a Graphical, y creas controles PictureBOX que contendrán cada parte del código. A cada uno le pones un índice, que corresoponda cada OptionButton a un PictureBox.

Luego en el evento Click de la matriz de OptionButton's traes al frente al PictureBox que le corresponde.

Por ejemplo, crea 4 OptionButtons y establece la propiedad Style a Graphical, y a cada uno un índice y el mismo nombre, podría ser optTab.

Luego crea 4 PictureBox con el mismo nombre y sus respectivos índices, podrías llamarlos picSection. Luego en el código pondrías lo siguiente:


Private Sub optTab_Click(Index As Integer)
        Dim i%

  For i = 0 To picSection.Count - 1
    picSection(i).Visible = False
  Next
 
  picSection(Index).Visible = True
End Sub


Y dentro de cada PictureBox pones los controles que quieras, esto está bueno para un diálogo de opciones y consume muy pocos recursos GDI.

Si querés las Tabs que tienen las propiedades por ejemplo, usa el control TabStrip, incluido en Microsoft Windows Common Controls 6.0 (SP4). Pero de todas maneras vas a necesitar hacer algo similar a lo anterior, sólo es un control gráfico pero no contenedor.

Saludos.
#28
No lo probé y no sé donde está el error, pero ya te digo que eso no va a funcionar, no se puede pasar como argumento un objeto privado como lo es un Form a una función en un módulo de clase público, ni se puede forzar a un Object.
#29
Depende relativo a qué sea, pero si es un control de usuario por ejemplo es lo que pusiste, con una correción:

CentroX = AnchoBoton/2-AnchoTexto/2

El ancho del texto lo obtenés con TextWidth, y varía según la fuente que se use, por eso fijate que la fuente de lo que sea que contenga el texto o donde se va a dibujar, contenga la misma fuente que el objeto que uses para llamar a TextWidth, ya sea un formulario, UserControl o PictureBox.

Saludos.
#30
El link

Citarhttp://ar.geocities.com/leandroascie...dor-Remoto.zip

Supongo que para w9x con un par de modificaciones funcionaría, arregla el link y lo veo.

Saludos.