Amigos les cuento, tengo el siguiente código, que me permite cambiar archivos de una carpeta a otra y ademas ir mostrando diferentes imágenes al revisar las opciones:
Private Sub Command1_Click()
'Si está seleccionado el Option1 se ejecuta la siguiente condición
If Option1.Value = True Then
Kill "C:\destino\unknow_00053.fnt"
MsgBox "Fuente por defecto"
End If
'Si está seleccionado el Option2 esta
If Option2.Value = True Then
FileCopy "C:\fnt\F2\unknow_00053.fnt", "C:\destino\unknow_00053.fnt"
MsgBox "Fuente cambiada"
End If
'Si está seleccionado el Option3 se ejecuta esta otra
If Option3.Value = True Then
FileCopy "C:\fnt\F3\unknow_00053.fnt", "C:\destino\unknow_00053.fnt"
MsgBox "Fuente cambiada"
End If
End Sub
Private Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single)
End Sub
Private Sub Option1_Click()
Image3.Visible = False
Image2.Visible = False
Image1.Visible = True
End Sub
Private Sub Option2_Click()
Image3.Visible = False
Image2.Visible = True
Image1.Visible = False
End Sub
Private Sub Option3_Click()
Image3.Visible = True
Image2.Visible = False
Image1.Visible = False
Así se ve el programa:
(http://i55.servimg.com/u/f55/14/27/29/04/aaaa_b10.jpg)
Lo que quiero es que al elegir una opción, se cree un archivo ini, recordando la opción escogida, por lo tanto, si elijo la fuente 2, al cerrar y abrir el programa, este muestre la opción escogida.
Gracias amigos ;-)
Hola. podrias hacer algo masomenos así:
'--------for INI file read/write
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
'-------------------
'reads ini string
Public Function ReadIni(FileName As String, Section As String, Key As String) As String
Dim RetVal As String * 255, v As Long
v = GetPrivateProfileString(Section, Key, "", RetVal, 255, FileName)
ReadIni = Left(RetVal, v)
End Function
'writes ini
Public Sub WriteIni(FileName As String, Section As String, Key As String, Value As String)
WritePrivateProfileString Section, Key, Value, FileName
End Sub
Private Sub Form_Load()
Dim valorleido As String
Dim NombreArchivo As String
NombreArchivo = App.Path & "\Config.ini"
If Dir(NombreArchivo) <> "" Then 'verificamos si existe el archivo pa' cuando abrimos por primera vez
valorleido = ReadIni(NombreArchivo, "Opcion", "Valor")
Select Case valorleido 'verificamos el valor leido y asignamos
Case "1"
Option1.Value = True
Case "2"
Option2.Value = True
Case "3"
Option3.Value = True
End Select
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim Str As String
Dim miOboton As Control
Dim valorescribir As String
Dim NombreArchivo As String
NombreArchivo = App.Path & "\Config.ini"
'Verificamos cual option buttons esta seleccionado
For Each miOboton In Me.Controls
If TypeOf miOboton Is OptionButton And miOboton.Value = True Then
Select Case miOboton.Name
Case "Option1"
valorescribir = "1"
Case "Option2"
valorescribir = "2"
Case "Option3"
valorescribir = "3"
End Select
End If
Next
WriteIni NombreArchivo, "Opcion", "Valor", valorescribir
End Sub
Quizás lo complique un poco :S. pero funciona bien. :laugh:
;-) Gracias por la respuesta, deje así el código completo:
'--------for INI file read/write
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
'-------------------
Private Sub Command1_Click()
'Si está seleccionado el Option1 se ejecuta la siguiente condición
If Option1.Value = True Then
Kill "C:\destino\unknow_00053.fnt"
MsgBox "Fuente por defecto"
End If
'Si está seleccionado el Option2 esta
If Option2.Value = True Then
FileCopy "C:\fnt\F2\unknow_00053.fnt", "C:\destino\unknow_00053.fnt"
MsgBox "Fuente cambiada"
End If
'Si está seleccionado el Option3 se ejecuta esta otra
If Option3.Value = True Then
FileCopy "C:\fnt\F3\unknow_00053.fnt", "C:\destino\unknow_00053.fnt"
MsgBox "Fuente cambiada"
End If
End Sub
Private Sub Option1_Click()
Image3.Visible = False
Image2.Visible = False
Image1.Visible = True
End Sub
Private Sub Option2_Click()
Image3.Visible = False
Image2.Visible = True
Image1.Visible = False
End Sub
Private Sub Option3_Click()
Image3.Visible = True
Image2.Visible = False
Image1.Visible = False
End Sub
'reads ini string
Public Function ReadIni(FileName As String, Section As String, Key As String) As String
Dim RetVal As String * 255, v As Long
v = GetPrivateProfileString(Section, Key, "", RetVal, 255, FileName)
ReadIni = Left(RetVal, v)
End Function
'writes ini
Public Sub WriteIni(FileName As String, Section As String, Key As String, Value As String)
WritePrivateProfileString Section, Key, Value, FileName
End Sub
Private Sub Form_Load()
Dim valorleido As String
Dim NombreArchivo As String
NombreArchivo = App.Path & "\Config.ini"
If Dir(NombreArchivo) <> "" Then 'verificamos si existe el archivo pa' cuando abrimos por primera vez
valorleido = ReadIni(NombreArchivo, "Opcion", "Valor")
Select Case valorleido 'verificamos el valor leido y asignamos
Case "1"
Option1.Value = True
Case "2"
Option2.Value = True
Case "3"
Option3.Value = True
End Select
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim Str As String
Dim miOboton As Control
Dim valorescribir As String
Dim NombreArchivo As String
NombreArchivo = App.Path & "\Config.ini"
'Verificamos cual option buttons esta seleccionado
For Each miOboton In Me.Controls
If TypeOf miOboton Is OptionButton And miOboton.Value = True Then
Select Case miOboton.Name
Case "Option1"
valorescribir = "1"
Case "Option2"
valorescribir = "2"
Case "Option3"
valorescribir = "3"
End Select
End If
Next
WriteIni NombreArchivo, "Opcion", "Valor", valorescribir
End Sub
Pero al momento de cerrar el programa, me da este error:
(http://i55.servimg.com/u/f55/14/27/29/04/error_10.jpg)
En la depuración me marca esto:
(http://i55.servimg.com/u/f55/14/27/29/04/asd_bm10.jpg)
Gracias por la ayuda
Ups no me di cuenta que tenias un frame. y los frames no tiene la propiedad value :S
cámbialo por este código.
Private Sub Form_Unload(Cancel As Integer)
Dim Str As String
Dim miOboton As Control
Dim valorescribir As String
Dim NombreArchivo As String
NombreArchivo = App.Path & "\Config.ini"
'Verificamos cual option buttons esta seleccionado
For Each miOboton In Me.Controls
If TypeOf miOboton Is OptionButton Then
If miOboton.Value = True Then
Select Case miOboton.Name
Case "Option1"
valorescribir = "1"
Case "Option2"
valorescribir = "2"
Case "Option3"
valorescribir = "3"
End Select
End If
End If
Next
WriteIni NombreArchivo, "Opcion", "Valor", valorescribir
End Sub
saludos
Muchas gracias funciono perfecto.
Te quiero pedir lo ultimo por favor y es el problema que no he podido solucionar, lo que pasa es que mi programa es un launcher para un programa determinado.
El problema es que la ruta de instalación de ese programa cambia según los bits del sistema operativo, por lo tanto si quiero copiar un archivo a una carpeta que esta en archivos de programa. solo funcionaria en algunos pc, por ejemplo
en windows 32 bits:
If Option2.Value = True Then
FileCopy "C:\fnt\F2\unknow_00053.fnt", "C:\Archivos de programa\Messenger\fuentes"
End If
En windows 64 bits
If Option2.Value = True Then
FileCopy "C:\fnt\F2\unknow_00053.fnt", "Archivos de programa (x86)\Messenger\fuentes"
End If
Que se me ocurre ami:
Poder pedirle al usuario la primera ves que abre el programa que selecciona la ruta donde tiene instalado el programa y que se almacene en un archivo ini. y guardar la ruta escogida en una variable, algo así:
'Se declaran las variable
Dim RutaDatos as String
Private Sub Option1_Click()
RutaDatos = "ruta almacena en ini"
End Sub
Después para pegar el archivo me posicionaría en la ruta seleccionada por el usuario y pegaría el archivo.
If Option2.Value = True Then
FileCopy RutaDatos/Font/unknow_00053.fnt"
End If
Se podría hacer algo así? ¿Como podría hacerlo?
Prometo no molestar mas si me ayudas por favor :D
Pues para eso existe funciones.
ejemplo esta simple.
dim Archivosdeprograma as string
'C:\Archivos de programa\ o Archivos de programa (x86) respectivamente
Archivosdeprograma=Environ$("ProgramFiles")
saludos
Cita de: Danyfirex en 6 Diciembre 2013, 20:46 PM
Pues para eso existe funciones.
ejemplo esta simple.
dim Archivosdeprograma as string
'C:\Archivos de programa\ o Archivos de programa (x86) respectivamente
Archivosdeprograma=Environ$("ProgramFiles")
saludos
Perfecto, pero que pasaría si el programa estuviera instalado en otro unidad?? o en otra carpeta fuera de Archivos de programa?
De todas maneras muchas gracias, me has ayudado un monton :D
pues entonces tiene que ver si ese programa crea alguna clave de registro.y guiarte por ahí.
saludos
Cita de: Danyfirex en 6 Diciembre 2013, 20:46 PM
Pues para eso existe funciones.
ejemplo esta simple.
dim Archivosdeprograma as string
'C:\Archivos de programa\ o Archivos de programa (x86) respectivamente
Archivosdeprograma=Environ$("ProgramFiles")
saludos
Me entro una duda, quedaría algo así? :
Private Sub Command1_Click()
Dim Archivosdeprograma As String
'C:\Archivos de programa\ o Archivos de programa (x86) respectivamente
Archivosdeprograma = Environ$("ProgramFiles")
FileCopy (Environ$("ProgramFiles") & "msn\dat\Launcher\Fonts\1\unknow_00053.fnt"), (Environ$("ProgramFiles") & "MSN\resources\unknow_00053.fnt")
End Sub
Como tendría que hacerlo?? por que me da error.
Verifica las rutas en un msgbox o consola.
así debería funcionar. se me olvido que Environ$ retorna sin el \
FileCopy (Environ$("ProgramFiles") & "\msn\dat\Launcher\Fonts\1\unknow_00053.fnt"), (Environ$("ProgramFiles") & "\MSN\resources\unknow_00053.fnt")
saludos