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

#211
Mira la recopilación de post interesantes, hay uno que se llama Generador de Números Aleatorios en VB.

Saludos.
#212
1. Agregas un nuevo archivo de recursos (Proyecto -> Agregar archivo de recursos)

2. En el explorador de proyectos vas a Documentos Relacionados y haces doble click en el archivo de recursos, entonces se abre el editor de recursos.

Debería aparecerte algo como esto:



3. En la barra de herramientas vas a ver un icono con las letras "abc", ese ícono corresponde a las tablas de cadenas, haces click y se te abre el editor de cadenas.

El editor de cadenas es una tabla compuesta por dos columnas como mínimo, la primera es el id. que es el identificador de recurso, con ese id se lo reconocerá dentro del programa en la llamada a LoadResString. La otra columna indica el idioma de la cadena. De manera predeterminada va a estar el idioma de la máquina en donde se ejecuta el VB.

4. El segundo icono de la barra de herramientas del editor de cadenas también tiene el icono "abc", esto te permite crear una nueva tabla de cadenas. Hace click y luego seleccionas el idioma que querés que tenga la nueva tabla de cadenas, luego comienzas a escribir las cadenas en ese idioma.

Cuando termines cerrás la tabla de cadenas y guardas el archivo de recursos desde el editor de recursos (icono del diskette :P).

Fijate que en la parte de Tabla de cadenas (String table ya que tengo el VB en inglés) te aparecen dos, la predeterminada (idioma de la pc) no especifica nada, en las demás especifica en qué idioma son.

Si le das doble click a cualquiera de las tablas te va a volver a abrir el editor de cadenas, pero en este caso no te aparecerán dos columnas sino tres, el ID, el idioma predeterminado y el otro que creaste, en este caso Inglés (Estados Unidos).

La siguiente imagen ilustra lo que digo (una imagen vale más que mil palabras xD)



Esto y la función LoadResString es lo único que necesitamos para hacer un idioma multilenguaje :). Fijate el Id., en este caso es 101, este identificador es único para las dos cadenas sólo que al llamar a LoadResString especificando el ID 101 devolverá la cadena que corresponda al idioma de la pc en donde se ejecuta, o de lo contrario la predeterminada (en mi caso es Español (Argentina)).

Entonces yendo al código sería así:


Private Sub Form_Load()
  lblCaption = LoadResString(101)
End Sub


En el caso anterior lo que hace es mostrar en la etiqueta lblCaption lo que se encuentra en la cadena con el ID 101, pero el idioma depende del que esté en la pc que se ejecute. Si el idioma de la máquina en donde se ejecuta es Inglés (Estados Unidos) entonces mostrará "This is a string", en el caso que el idioma no esté definido en la tabla de cadenas mostrará el predeterminado, es decir "Esto es una cadena".

Ahora sería incómodo cargar en cada control la cadena que le correponde, se haría un código muy largo pero eso se puede solucionar de una forma sencilla, y en realidad es algo muy útil cuando no se quiere andar agregando código cuando se agrega un control.

Se puede usar la propiedad Tag de cada control para almacenar el Id de recurso, y cuando se carga el formulario cargar todas las cadenas de cada control usando la colección Controls del formulario.

Por ejemplo, creamos 5 etiquetas no importa el nombre, a la propiedad Tag de cada una le ponemos 101, 102, 103, 104, 105 respectivamente. Luego en la tabla de cadenas escribimos las cadenas para cada una de esas etiquetas, siempre utilizando ese Identinficador.

Entonces usando el siguiente código al inicio del formulario cargará las cadenas automáticamente:


Private Sub Form_Load()
        Dim csControl

  For Each csControl In Controls
    If TypeOf csControl Is Label Then
      'Si el control es un control Label
      '
      If CStr(csControl.Tag) <> vbNullString Then
        'Si la propiedad tag no está vacía, es decir que contiene el id.
        '
        csControl.Caption = LoadResString(Val(csControl.Tag))
      End If
    End If
  Next
End Sub


Y de esta manera nunca más tendremos que agregar otro código, sólo especificar el id de cadena en la propiedad Tag de cada control Label que queramos. Si fuera un TextBox es casi lo mismo, pero supongo que te darás cuenta como hacerlo ;).

Saludos.
#213
Esos códigos trabajan a nivel de aplicación, es decir que lo que el sistema operativo haga internamente es ajeno a estas funciones. Por lo tanto si no funcionan es problema no del programa sino de la configuración del SO, quizá los drivers de la cam no están instalados correctamente o el sistema tiene algún conflicto con dicho hardware-

En cuanto a tu pregunta de si el código sirve o no, sí sirve.

Saludos.
#214
En VB es muy sencillo, creas un archivo de recursos y luego creas las tablas de cadenas para cada idioma.

Luego cargas las cadenas usando LoadResString y carga la cadena del idioma que tenga la máquina en donde se ejecuta el programa. Si el idioma de la computadora no está definido entonces usa el idioma del programa.

Ando por dial up así que no tengo mucho tiempo, en todo caso mañana pongo un ejemplo más claro.

Saludos.
#215
TruenoCaos, nadie te echó, la alianza se disolvió porque se fucionó con EHN, ahora podés enviar tu solicitud a EHN o a EHR, EHR es una nueva alianza en donde estamos los de antes.

Saludos.
#216
Lo que hace el código es verificar que el valor de vEntrada no sea igual al anterior, si no es igual al anterior entonces muestra la nueva entrada y guarda el valor en lLastValue para volver a repetir la operación.

CLng lo que hace es devolver un valor de tipo Long (entero de 32 bits), lo uso para asegurarme de que no haya errores de conversión de tipos de datos.

Saludos.
#217
Programación Visual Basic / Re: sobreescrbir
27 Agosto 2005, 06:33 AM
Abri el archivo en modo Append en lugar de Output, de esta forma escribe al final del archivo.

Saludos.
#218
Para eso existen las variables estáticas. Y no hace falta usar select case si sólo va a mostrar lo que entra.


       Static lLastValue&

  If lLastValue <> vEntrada Then
    lLastValue = CLng(vEntrada)

    frmPrincipal.txtHistorial.Text = frmPrincipal.txtHistorial.Text & "valor " & vEntrada & vbCrLf
  End If


Saludos.
#219

Private Sub txtData_Click()
  On Error Resume Next
 
           Dim lPos1&, lPos2&

  lPos1 = InStrRev(txtData, vbCrLf, txtData.SelStart)
  lPos2 = InStr(txtData.SelStart, txtData, vbCrLf)
 
  If lPos1 <= 0 Then lPos1 = 1
  If lPos2 <= 0 Then lPos2 = Len(txtData)
 
  txtData.SelStart = lPos1 + 2
  txtData.SelLength = lPos2 - lPos1 - 2
End Sub


Suponiendo que txtData es un TextBox.

Saludos.
#220
¿En dónde te da el error?