elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  Mostrar Mensajes
Páginas: 1 ... 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 [34] 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 ... 55
331  Programación / Programación Visual Basic / Re: DUDAS: Tecla ALT, Función CASE, como GARDAR una cosa. en: 22 Julio 2005, 23:30 pm
Es lo mismo que poner As Integer. Hay un reemplazo para varios tipos de variables (las mas usadas)

Código:
Integer    %
Long       &
Single     !
Double     #
Currency   @
String     $

Saludos.
332  Programación / Programación Visual Basic / Re: Ayuda con Graficos y teclas en: 22 Julio 2005, 04:09 am
Esto no es un taller donde te hacen las cosas, es para responder dudas.

Ya te dije, para moverlos utiliza las propiedades Left, Top o el método Move.

E insisto que mejores tu ortografía, es asquerosa y muchas veces se pasa de responder por eso.

Saludos.
333  Programación / Programación Visual Basic / Re: Ayuda con Graficos y teclas en: 22 Julio 2005, 03:51 am
Citar
Quisiera saber como se hase para hacer q un grafico peqeño correa a de un lado al otro del Formularioo.
Propiedad Left, la tienen todos los controles de ventana.

Citar
y por ultimo quisiera saber q cuando yo aptrete el boton 1 se esjecute un comando de un botn hasi con las teclas 1 , 2 , 3 , 4 , 5 , a , b , c, d,

Establece la propiedad KeyPreview del formulario a True, luego controla la pulsaciones en el evento KeyDown del formulario.

Saludos.

EDIT P.D: Mejora tu ortografía, duele a la vista leer tus post.
334  Programación / Programación Visual Basic / Re: Es posible hacer este programa ? en: 22 Julio 2005, 03:15 am
Mira el siguiente post:

Como puedo descargar un archivo de Internet con Visual Basic 6

Saludos.
335  Programación / Programación Visual Basic / Re: insertar fecha con un API en access desde visual basic en: 22 Julio 2005, 03:01 am
El tipo de campo Date ocupa 8 bytes, el texto según el formato que le de puede ocupar más o menos lo que haría la base de datos muy grande, además trabajar con texto es mucho más lento que trabajar con campos de tipo fecha.

Ahora a tu pregunta, para guardar todo eso en un campo de tipo Fecha existe la función DateSerial y TimeSerial, las cuales devuelven un tipo de datos Date ingresando cada parte de la fecha y hora. Podrías escribir una función para que devuelva un tipo Date a partir de la estructura SYSTEMTIME. Por ejemplo:

Código:
Function SysTimeToDate(TimeSpec As SYSTEMTIME) As Date
  With TimeSpec
    SysTimeToDate = CDate(DateSerial(.wYear, .wMonth, .wDay) & " " & TimeSerial(.wHour, .wMinute, .wSecond))
  End With
End Function

Saludos.
336  Programación / Programación Visual Basic / Re: Tablas, Buscar el campo que sea menor a todos en: 22 Julio 2005, 01:36 am
Si es una tabla seguramente utilizas un Recordset, así que la forma más sencilla en un bucle a través del recordset buscando la fecha más antigua.

Por ejemplo:

Código:
Function GetOlderDate(RecordSpec As Recordset) As Date
            Dim dtDate As Date, dtTestDate As Date
           

  With RecordSpec
    Call .MoveFirst
 
    Do While Not RecordSpec.EOF
      'Suponiendo que el campo 'FECHA' es el que se quiere analizar.
      '
      dtTestDate = .Fields("FECHA")
     
      If CLng(dtTestDate) < CLng(dtDate) Then
        dtDate = dtTestDate
      End If
     
      Call .MoveNext
    Loop
   
    GetOlderDate = dtTestDate
  End With
End Function

Saludos.
337  Programación / Programación Visual Basic / Re: DUDAS: Tecla ALT, Función CASE, como GARDAR una cosa. en: 22 Julio 2005, 01:29 am
Citar
1- Como puedo hacer que la tecla Alt esté pulsada todo el rato?

Existe las funciones GetKeyboardState y SetKeyboardState que permiten obtener y cambiar el estado de todas las teclas, respectivamente.

A estas funciones se le debe pasar el primer elemento de una matriz de Byte de 256 elementos, lo que se puede hacer es primero obtener el estado actual de las teclas, y luego cambiar el estado de Alt (constante VK_MENU o código de caracter 18) para llamar a SetKeyboardState con el nuevo estado.

El código seria algo asi:

Código:
Option Explicit
Option Base 1

Public Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long

Public Declare Function SetKeyboardState Lib "user32" (lppbKeyState As Byte) As Long

Const VK_MENU = 18&

Sub SetAltKey()
     Dim btKeys(256) As Byte
     Dim r&

  r = GetKeyboardState(btKeys(1))

  If r Then
    btKeys(VK_MENU) = 1
    r = SetKeyboardState(btKeys(1))
  End If
End Sub

Y llamar a este procedimiento usando un control Timer con su propiedad Interval establecida a un valor bajo.


Citar
2- El programa que estoy haciendo es de criptografia por homofonía, y necesito dar tres valores distintos a cada letra, esos valores los pongo yo por defecto, pero el usuario debe de poder cambiarlos, como hago para que se puedan guardar, son aprox. unas 94 TextBoxs.

Podrias usar un archivo (instrucciones Open, Put, Get), el registro (si es algo global) o una base de datos, eso según cómo lo quieras usar.

Supongo que habras creado los 94 TextBox en tiempo de diseño, y eso es muy lento y hace que el ejecutable final sea grandisimo. Si me equivoco corregime. Sino la forma correcta de hacer esto es crear los cuadros de texto dinámicamente utilizando la función Load.

Para hacer esto se crea un TextBox, se establece su propiedad Index a 0 y luego cuando se carga el programa (evento Load del formulario) se crean los nuevos controles.

Por ejemplo:

Código:
Private Sub Form_Load()
       Dim i%

  For i = 1 To 94
    Call Load(txtData(i))
   
    txtData(i).Top = txtData(i - 1).Top + txtData(i - 1).Height + 25
    txtData(i).Visible = True
   
    txtData(i).TabIndex = i
  Next

End Sub

Entonces txtData(0) va a ser la letra A, txtData(1) la B y asi consecutivamente. Entonces para guardarlo en un archivo es sencillo, te muestro un ejemplo de como podrias hacer:

Código:
Sub SaveData()
        Dim i%, hFile%

  hFile = FreeFile
 
  Open "C:\Datos.txt" For Binary As #hFile
 
  For i = 0 To txtField.Count - 1
    Put #hFile, , CInt(txtData(i))
  Next
 
  Close #hFile
End Sub

Y para leer los datos es casi lo mismo, pero en lugar de escribirlos directamente en los TextBox los ponemos en una matriz (ver la tercera pregunta)

Código:

Public iCharData() As Integer

Sub LoadData()
        Dim i%, hFile%
        Dim iData%

  hFile = FreeFile
 
  Open "C:\Datos.txt" For Binary As #hFile
 
  For i = 1 To txtField.Count
    Get #hFile, , iData

    ReDim Preserve iCharData(i) As Integer
 
    iCharData(i) = iData
    txtData(i -1) = iCharData(i)
  Next
 
  Close #hFile
End Sub


Citar
3- Mi tercera questión es que si yo tengo un TextBox con los números: 03 11 56, como puedo apretando un botón que se transformen en sus respectivas letras, he probado con case, pero solo me deja cambiar un número, es decir, si hay más de uno, no va.

Una vez que leimos los datos del archivo en la matriz iCharData, entonces es muy sencillo buscar el valor y reemplazarlo por la letra. Por ejemplo:

Código:
Function CodeToChar(Code As Integer) As String
        Dim i%

  For i = 1 To UBound(Code)
    If Code = iCharData(i) Then
      'El 1 seria la A, el 2 la B, y asi sucesivamente.
      '
      CodeToChar = Chr$(i + vbKeyA - 1)
     
      Exit For
    End If
  Next
End Function

Bueno es sólo una idea simple, luego podrías hacerlo un poco más complejo.

Saludos.
338  Programación / Programación Visual Basic / Re: Metodo para listar y seleccionar.. en: 20 Julio 2005, 05:33 am
No entendi bien, pero podrias usar un LisBox para listar los registros.

Saludos.
339  Programación / Programación Visual Basic / Re: Como pornes un programa... en: 20 Julio 2005, 05:22 am
Busca en el foro, hay un ejemplo mas abajo.

Barra de tareas

Saludos.
340  Programación / Programación Visual Basic / Re: Crear Api en: 20 Julio 2005, 05:20 am
Bueno Menu.dll no deberias implementarlo de esa forma. Lo que deberias hacer es crear un objeto en board.dll con propiedades y metodos para enumerar los dispositivos, y que este objeto (por ejemplo podria llamarse UserClass) contenga una coleccion con todos los dispositivos, sus propiedades y metodos.

La estructura seria algo asi:

BOARDS.DLL

* Clase UserClass *
 - Este modulo de clase seria la interfaz entre el usuario y todos los dispositivos de hardware -

Código:
Property Get Devices(Indice) As DeviceClass

'Esta propiedad devolveria el objeto DeviceClass que contiene las propiedades y metodos para comunicarse con el dispositivo especificado en Indice. Indice puede ser un numero que identifica al dispositivo o podrias crear una funcion para buscarlo por el nombre -

End Property

Property Get DevCount() As Long

' Esta propiedad devuelve la cantidad de dispositivos de hardware -

End Property

Function EnumDeviceNames(outNames() As String) As Integer

' Esta funcion enumeraria los nombres de los dispositivos, podrias identificarlos con los nombres de las DLL o mejor, usar polimorfismo para implementar en las DLL de los dispositivos, y asi crear un objeto dinamicamente para comunicarte con ese dispositivo (mas adelante explico esto) -

End Function

Function FindDevice(Spec) As DeviceClass

' Podrias escribir una funcion que busque un dispositivo por el nombre o alguna otra propiedad -

End Function


Ahora el problema que se presenta es como comunicarse con los otros dispositivos ya que cada uno esta un una DLL diferente.

La solucion a esto es el polimorfismo, que es un concepto de la programacion orientada a objetos que permite la reutilizacion de codigo. Esto significa que yo puedo usar el mismo codigo para varias DLLs sin tener que copiarlo, lo que nos permite ampliarlo luego y uniformar un sistema.

La idea del polimorfismo para este proyecto es la siguiente:

1. Se crea una clase con todas las propiedades y metodos que tienen que tener todos los dispositivos, pero sin el codigo, solo las declaraciones (se dice que se crea la interfaz). Por ejemplo llamemosle IDevice. Entonces esta clase tendria por ejemplo las siguientes propiedades y metodos:

* Clase IDevice *

Código:
Property Get DeviceName() As String

End Property

Sub Reset()

End Sub

Sub SendVols(pin)

End Sub

Sub StopVol(pin)

End Sub

Sub SendData(pin)

End Sub

Sub GetData(pin)

End Sub

2. Creas una DLL con este modulo de clase (ninguna cosa mas a menos que se te ocurra) llamada devices.dll.

3. Cada DLL para un dispositivo tiene que incluir como referencia a devices.dll, y tener una clase predeterminada llamada DevMain que implemente al modulo IDevice (mas adelante explico como implementarlo).

 Ahora supongamos que tenemos un motor paso a paso y tenemos que crear la DLL stepengine.dll para este dispositivo. Entonces creamos el proyecto DLL ActiveX y hariamos lo siguente:

1. Agregar como referencia al proyecto el archivo devices.dll
2. Crear el modulo de clase predeterminado DevMain
3. Implementar el modulo IDevice que esta en devices.dll. Para esto existe la palabra clave Implements. Se puede usar solo a nivel de modulo en modulos de clase. En la parte de declaraciones ponemos:

Código:
Implements IDevice

Vas a notar que en la lista de objetos donde solo te aparecia Class, ahora te aparece IDevice, entonces hay que implementar cada funcion y propiedad.

En el modulo de clase quedaria algo como esto:

Código:
Private Property Get IDevice_DeviceName() As String

End Property

Private Sub IDevice_GetData(pin As Variant)

End Sub

Private Sub IDevice_Reset()

End Sub

Private Sub IDevice_SendData(pin As Variant)

End Sub

Private Sub IDevice_SendVols(pin As Variant)

End Sub

Private Sub IDevice_StopVol(pin As Variant)

End Sub

Eso significa que implementaste el modulo IDevice en DevMain de engine.dll. Ahora solo queda escribir el codigo que queramos que se ejecute para cada metodo, y crear los metodos propios de la clase.

¿esto para que sirve?, bueno antes habia dicho "unificacion", y esto quiere decir que, por ejemplo, no importa el codigo que haya que escribir en el metodo Reset de un motor paso a paso o de una licuadora (por decir algo :P), siempre van a ser lo mismo para el programa. Es decir que la clase DevMain de cualquier dispositivo va a ser la misma, esto se llama polimorfismo ;D.

Bueno continuo con la idea. Una vez que escribis el codigo para cada metodo, y propiedad, creas las mismas propiedades y metodos para la clase, ya que cuando se implementa un modulo no forma parte de la interfaz de la clase donde se implementa.

Esta parte es sencilla porque solo llamamos a los metodos de la clase implementada:

Código:
Property Get DeviceName() As String
  DeviceName = IDevice_DeviceName
End Property

Sub GetData(pin As Variant)
  Call IDevice_GetData(pin)
End Sub

Sub Reset()
  Call IDevice_Reset
End Sub

Sub SendData(pin As Variant)
  Call IDevice_SendData(pin)
End Sub

Sub SendVol(pin As Variant)
  Call IDevice_SendVol(pin)
End Sub

Sub StopVol(pin As Variant)
  Call IDevice_StopVol(pin)
End Sub

Luego se le pueden agregar mas clases al dispositivo, pero esta clase tiene que ser la misma para que todos los dispositivos tengan algo en comun.

Una vez hecha la parte de dispositivos hay que enumerarlos y poder llamar a sus metodos, y esta es la parte mas sencilla.

Para enumerarlos simplemente se pueden enumerar los nombres de las DLLs, y para comprobar si son validos crear los objetos predeterminados usando la funcion GetObject.

Entonces primero se agrega como referencia a Boards.dll el archivo drivers.dll, luego en la funcion EnumDeviceNames enumeras los nombres de los archivos y los guardas en una matriz de Strings, creas una variable de tipo IDevice.

Código:
'Modulo UserClass de boards.dll

Property Get Devices(Indice) As DeviceClass
        Dim csDevice As IDevice

  Set csDevice = GetObject(sDriver(Indice), "DevMain")

  Set Devices = csDevices
End Property

DeviceClass es una clase que se encuentra en boards.dll y tambien implementa IDevice, pero se le puede agregar mas propiedades y metodos.

Bueno espero que te haya servido.

Saludos.
Páginas: 1 ... 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 [34] 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 ... 55
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines