Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: CH4ØZ en 13 Octubre 2009, 02:51 am



Título: Pregunta sobre un codigo
Publicado por: CH4ØZ en 13 Octubre 2009, 02:51 am
hola el otro dia buscando codigos para trabajar con archivos .ini que me pudieran ayudar y servir de guia encontre este, pero hay una cosa que no entendi:
Código
  1. Option Explicit  
  2.  
  3. Const APPLICATION As String = "MiPrograma"  
  4.  
  5. Dim m_Left As Single  
  6. Dim m_Top As Single  
  7. Dim m_Width As Single  
  8. Dim m_Height As Single  
  9.  
  10. Dim Path_Archivo_Ini As String  
  11.  
  12. 'Función api que recupera un valor-dato de un archivo Ini  
  13. Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _  
  14.    ByVal lpApplicationName As String, _  
  15.    ByVal lpKeyName As String, _  
  16.    ByVal lpDefault As String, _  
  17.    ByVal lpReturnedString As String, _  
  18.    ByVal nSize As Long, _  
  19.    ByVal lpFileName As String) As Long  
  20.  
  21. 'Función api que Escribe un valor - dato en un archivo Ini  
  22. Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _  
  23.    ByVal lpApplicationName As String, _  
  24.    ByVal lpKeyName As String, _  
  25.    ByVal lpString As String, _  
  26.    ByVal lpFileName As String) As Long  
  27.  
  28.  
  29. 'Lee un dato _  
  30. -----------------------------  
  31. 'Recibe la ruta del archivo, la clave a leer y _  
  32. el valor por defecto en caso de que la Key no exista  
  33. Private Function Leer_Ini(Path_INI As String, Key As String, Default As Variant) As String  
  34.  
  35. Dim bufer As String * 256  
  36. Dim Len_Value As Long  
  37.  
  38.        Len_Value = GetPrivateProfileString(APPLICATION, _  
  39.                                         Key, _  
  40.                                         Default, _  
  41.                                         bufer, _  
  42.                                         Len(bufer), _  
  43.                                         Path_INI)  
  44.  
  45.        Leer_Ini = Left$(bufer, Len_Value)  
  46.  
  47. End Function  
  48.  
  49. 'Escribe un dato en el INI _  
  50. -----------------------------  
  51. 'Recibe la ruta del archivo, La clave a escribir y el valor a añadir en dicha clave  
  52.  
  53. Private Function Grabar_Ini(Path_INI As String, Key As String, Valor As Variant) As String  
  54.  
  55.    WritePrivateProfileString APPLICATION, _  
  56.                                         Key, _  
  57.                                         Valor, _  
  58.                                         Path_INI  
  59.  
  60. End Function  
  61.  
  62.  
  63. Private Sub Form_Load()  
  64.  
  65.    'Path del fichero Ini  
  66.    Path_Archivo_Ini = App.Path & "\config.ini"  
  67.  
  68.    ' Lee las Key y  Les envia el valor por defecto por si no existe  
  69.    m_Left = Leer_Ini(Path_Archivo_Ini, "Left", 0)  
  70.    m_Top = Leer_Ini(Path_Archivo_Ini, "Top", 0)  
  71.    m_Width = Leer_Ini(Path_Archivo_Ini, "Width", 5000)  
  72.    m_Height = Leer_Ini(Path_Archivo_Ini, "Height", 5000)  
  73.  
  74.    'Posiciona el formulario con los valores del archivo Ini  
  75.    Move m_Left, m_Top, m_Width, m_Height  
  76.  
  77. End Sub  
  78.  
  79. Private Sub Form_Unload(Cancel As Integer)  
  80.  
  81.    'Escribe en el archivo Ini  
  82.  
  83.    'Posición del Form  
  84.    Call Grabar_Ini(Path_Archivo_Ini, "Left", Me.Left)  
  85.    Call Grabar_Ini(Path_Archivo_Ini, "Top", Me.Top)  
  86.  
  87.    'Tamaño del formulario  
  88.    Call Grabar_Ini(Path_Archivo_Ini, "Width", Me.Width)  
  89.    Call Grabar_Ini(Path_Archivo_Ini, "Height", Me.Height)  
  90.  
  91. End Sub  
  92.  

porque en el evento load del form no se llama a la funcion Leer_Ini, mientras que en el evento Unload del form si se lo hace?

gracias


Título: Re: Pregunta sobre un codigo
Publicado por: Dessa en 13 Octubre 2009, 03:39 am

porque en el evento load del form no se llama a la funcion Leer_Ini, mientras que en el evento Unload del form si se lo hace?

gracias

Private Sub Form_Load()  
 
    'Path del fichero Ini  
    Path_Archivo_Ini = App.Path & "\config.ini"  
 
    ' Lee las Key y  Les envia el valor por defecto por si no existe  
    m_Left = Leer_Ini(Path_Archivo_Ini, "Left", 0)  
    m_Top = Leer_Ini(Path_Archivo_Ini, "Top", 0)  
    m_Width = Leer_Ini(Path_Archivo_Ini, "Width", 5000)  
    m_Height = Leer_Ini(Path_Archivo_Ini, "Height", 5000)  
 
    'Posiciona el formulario con los valores del archivo Ini  
    Move m_Left, m_Top, m_Width, m_Height  
 
End Sub  

Estas llamando 4 veces a la funcion leer_ini cuyo resultado es : Leer_Ini = Left$(bufer, Len_Value)


PD: Hay que leer_ini  mas   ;)  (va con onda)





Título: Re: Pregunta sobre un codigo
Publicado por: CH4ØZ en 13 Octubre 2009, 04:08 am
o sea
yo lo que quiero saber es xq en uno se usa la funcion call y en el otro se lo hace de otra forma?
se puede hacer de cualquier forma?


Título: Re: Pregunta sobre un codigo
Publicado por: BlackZeroX en 13 Octubre 2009, 04:21 am
o sea
yo lo que quiero saber es xq en uno se usa la funcion call y en el otro se lo hace de otra forma?
se puede hacer de cualquier forma?

es sencillo call esta hecho para procesos que por ende no devuelven valores de ningun tipo en vb6 pero las funciones si las devuelven y al llamarlas estas pueden devolver un valor , aunque ambas en este caso son funciones la de grabar no devuelve dato alguno por ello se puso call pero al leer la funcion devuelve un valor segun el caso sea en esas dos funciones

leerini <-- devuelve un valor
grabarini <. no devuelve pero igual puede ser llamada que leerini pero no se guardaria el valor leeido en ningun lugar se perderia.

Código
  1. public function mensaje() as string
  2.    mensaje="hola"
  3. end function
  4.  
  5. private sub form_load()
  6.    msgbox mensaje ' te dira Hola
  7.    call mensaje ' se perdera lo que devuelve dicha funcion xS
  8.    mensaje ' se perdera lo que devuelve dicha funcion xS
  9. end sub
  10.  

P.D.: hay que ver mejor el codigo por ejemplo este



Dulces Lunas