border

Miembros:
Mensajes:
Temas:
Online:

Ultimo Miembro:

 
 

  #1 (permalink)  
Antiguo 02-04-2006, 16:23:29
Un Nuevo Amigo
 
Registrado: mar 2006
Posts: 8
rr_dj Valoración +2
Predeterminado algo va mal

holas foro denuevo yo.
he estado haciendo un mini editor de texto y me sale errores. el editor lo que quiero es que se pueda dar formato al texto(color,negrita,cursiva,tipode letra,etc) pero cuando lo guardo esta bien pongo en nuevo texto abro de denuevo el texto que cree esta bien sale como lo guarde en negrita, color de texto, subrrayado,etc.

pero cuando me salgo del programa es decir pongo en deterner desde VB, entro de nuevo a mi aplicacion pongo abrir el texto que guarde hace segundos ya no carga con formato ni negrita, ni color de letra, ni sbrrayado, ni nada, no sale como lo guarde no se cual sea ni error, aqui les dejo el codigo fuente parar que lo revisen y dejo los archivos para que lo descargen.


Option Explicit
'la variable modificado permitira saber si hubo
'alguna modificacion en el archivo
Dim modificado, rpta As Boolean
'la variable ncanal servira para obtener un numero de canal libre
Dim ncanal As KeyCodeConstants


Private Sub archivo_abrir_Click()
Call abrir 'call llama al procedimiento abrir
End Sub

Private Sub archivo_guardar_Click()
Call guardar 'call llama al procedimiento guardar
End Sub

Private Sub archivo_imprimir_Click()
Call imprimir 'call llama al procedimienteo imprimir
End Sub

Private Sub archivo_nuevo_Click()
Call nuevo 'call llama al procedimiento nuevo
End Sub

Private Sub archivosalir_Click()
End 'termina la ejecucion del programa
End Sub

Private Sub edicion_copiar_Click()
Call copiar 'call llama al procedimiento copiar
End Sub

Private Sub edicion_cortar_Click()
Call cortar 'call llama al procedimiento cortar
End Sub

Private Sub edicion_pegar_Click()
Call pegar 'call llama al procedimiento pegar
End Sub

Private Sub Form_Load()
Dim i As Integer
'centra el formulario en la pantalla
Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
'establese el titulo de la ventana
Caption = "MI EDITOR"
'establece que el texto que escriba sea de tipo arial
Text1.FontName = "arial"
'establese que por defecto 10 sea el tamaño del texto
Text1.FontSize = 10
'desactiva la opcion cortar del menu edicion
edicion_cortar.Enabled = False
'activa o desactiva la opcoin pegar del menu edicion
'dependiendo de si el portapapeles contiene o no texto
edicion_pegar.Enabled = (Len(Clipboard.GetText()) > 0)
'desactiva la opcion fuente del menu formato
formato_fuente.Enabled = False
'habilita o deshabilita el boton pegar de la barra de herramientas
'dependiendo de si el portapapeles contiene o no texto
Toolbar1.Buttons(7).Enabled = (Len(Clipboard.GetText()) > 0)
'asigna el estado de la tecla caps lock (bloq mayus)
'al panel 2 de la barra de estado
StatusBar1.Panels(2).Style = sbrCaps
'asigna la hora del sistema al panel 3 de la barra de estado
StatusBar1.Panels(3).Style = sbrTime
End Sub

Private Sub Form_Resize()
Text1.Top = 600
Text1.Left = 100
Text1.Width = ScaleWidth
Text1.Height = ScaleHeight - 1000
End Sub

Private Sub Form_Unload(Cancel As Integer)
If modificado Then
rpta = MsgBox("desea guardar los cambios realizados en el documento?", vbYesNo, "MINI EDITOR")
If rpta = vbYes Then
Call guardar
End If
End If
End Sub

Private Sub formato_fuente_Click()
Call fuente 'call llama al procedimiento fuente
End Sub

Private Sub Text1_Change()
modificado = True
End Sub

Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
'habilita/inhabilita el boton copiar si selecciono/noseleciono
'texto en el cuadro de texto text1
Toolbar1.Buttons(5).Enabled = (Text1.SelLength)
'habilita/inhabilita el boton cortar si selecciono/no selecciono
'texto en el cuadro de texto text1
Toolbar1.Buttons(6).Enabled = (Text1.SelLength > 0)
'habilita/inhabilita la opcion copiar si seleciono/noselecciono
'texto en el cuadrod e texto text1
edicion_copiar.Enabled = (Text1.SelLength > 0)
'habilita/inhabilita la opcion cortar si selecciono/no selecciono
'texto en cuadro de texto text1
edicion_cortar.Enabled = (Text1.SelLength > 0)
'habilita/inhabilita la opcion fuente si selecciono/no selecciono
'texto en el cuadro de texto text1
formato_fuente.Enabled = (Text1.SelLength > 0)
End Sub

Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Key
Case "boton_nuevo"
Call nuevo
Case "boton_abrir"
Call abrir
Case "boton_guardar"
Call guardar
Case "boton_imprimir"
Call imprimir
Case "boton_copiar"
Call copiar
Case "boton_cortar"
Call cortar
Case "boton_pegar"
Call pegar
End Select
End Sub
Public Sub nuevo()
'procedimiento para editar el nuevo archivo
'guardar las modificaion realizadas en el archivo
If modificado Then
rpta = MsgBox("desea guardar los cambios realizados en el documento?", vbYesNo, "MINI EDITOR")
If rpta = vbYes Then
Call guardar
End If
End If
Form1.Caption = "sin titulo" 'titulo por defecto
'borra el contenido actual del cuadro de texto text1
Text1.Text = ""
'desactiva el indicador de modificado
modificado = False
End Sub

Public Sub abrir()
'procedimiento para abrir un archivo de texto
Dim cadena1, cadena2 As String
Dim numero1, numero2 As Long
Dim estado1, estado2, estado3, estado4 As Boolean
'guarda las modificacion realizadas en el archivo
If modificado Then
rpta = MsgBox("desea guardar los cambios en el documento?", vbYesNo, "MINI EDITOR")
If rpta = vbYes Then
Call guardar
End If
End If
'si ocurre un errorejecutar manipularerrorabrir
'On Error GoTo manipularErrorAbrir
'muestra un mensaje en el primer panel de la barra de estado
StatusBar1.Panels(1).Text = "abriendo archivo"
'fijar las propiedades necesarias
With cuadrodedialogo
'genera un error cuando pulse cancelar en el cuadro de dialogo abrir
.CancelError = True
'filtros
.Filter = "archivo de texto|*.txt|todos los archivos|*.*"
'filtro por defecto
.FilterIndex = 2
'extencion por defecto que se añadira al nombre del archivo
.DefaultExt = "txt"
'el usuario solo podra introducir nombres de archivos existentes
.Flags = cdlOFNFileMustExist
'visualizara el cuadro de dialogo abrir
.ShowOpen
'obtener un numero de canal libre
ncanal = FreeFile
Open .FileName For Input As ncanal
'nuestra el nombre del archivo en la barra de titulo del formulaio
Form1.Caption = .FileName
End With

'borra el texto del control text1
Text1.Text = ""
Input #ncanal, cadena1, cadena2, numero1, estado1, estado2, estado3, numero2
With Text1
.Text = cadena1
.FontName = cadena2
.FontSize = numero1
.FontBold = estado1
.FontItalic = estado2
.FontUnderline = estado3
.FontStrikethru = numero2
End With
Close #ncanal 'cierra el archivo
'borra el mensaje del primer panel de la barra de estado
StatusBar1.Panels(1).Text = ""
modificado = False 'desactiva el indicador de modificado
Exit Sub
manipularErrorAbrir:
If Err.Number = 32755 Then
StatusBar1.Panels(1).Text = ""
Exit Sub
Else
MsgBox "error desconocido al abrir el archivo"
End If
End Sub
Public Sub guardar()
'procedimiento para guardar un archivo de texto
On Error GoTo manipularerrorguardar
StatusBar1.Panels(1).Text = "guardando archivo"
With cuadrodedialogo
.CancelError = True
.DefaultExt = "txt"
.Filter = "texto|*.txt|todos los archivos|*.*"
'muestra un mensaje si desea sobreescribir el archivo
.Flags = cdlOFNOverwritePrompt
'muestr el cuadro de dialogo
.ShowSave
ncanal = FreeFile
Open .FileName For Output As ncanal
Form1.Caption = .FileName
End With
'escribir en el archivo los datos necesarios
With Text1
Write #ncanal, .Text, .FontName, .FontStrikethru, .ForeColor
End With

Close #ncanal
StatusBar1.Panels(1).Text = ""
modificado = False
Exit Sub
manipularerrorguardar:
If Err.Number = 32755 Then
StatusBar1.Panels(1).Text = ""
Exit Sub
Else
MsgBox "error desconocido al guardar el archivo"
End If
End Sub
Public Sub imprimir()
'procedimiento pra imprimir el aspecto actual del formulario
Dim copias As Byte
On Error GoTo manipularerrorimprimir
StatusBar1.Panels(1).Text = "imprimiendo archivo"
With cuadrodedialogo
.CancelError = True
.Flags = cdlPDNoSelection Or cdlPDNoPageNums Or cdlPDHidePrintToFile
.PrinterDefault = True
'muestra el cuadro de dialogo imprimir
.ShowPrinter
copias = .Copies
End With
'fijar el numero de copias
Printer.Copies = copias
'tomar el estilo del texto
Printer.Font = Text1.Font
'imprimir el texto actual
Printer.Print Text1.Text
Printer.EndDoc 'fin de la impresion
StatusBar1.Panels(1).Text = ""
Exit Sub
manipularerrorimprimir:
If Err.Number = 32755 Then
StatusBar1.Panels(1).Text = ""
Exit Sub
Else
MsgBox "error desconocido"
End If
End Sub
Public Sub copiar()
'una copia de texto seleccionado en el cuadro de texto
'text1 pasa al portapapeles (clipboard)
Clipboard.SetText Text1.SelText
'activa la opcion pegar de la barra de herramientas
Toolbar1.Buttons(7).Enabled = True
End Sub

Public Sub cortar()
'una copia de textoselecionado ene le cuadro de texto
'text1 pasa al portapapeles (clipborad)
Clipboard.SetText Text1.SelText
'borrar el texto seleccionado
Text1.SelText = ""
'inahabilita la opcion copiar del manu edicion
edicion_copiar.Enabled = False
'inhabilita la opcion cortar del nemu edicion
edicion_cortar.Enabled = False
'habilita la opcion pegar del menu edicion
edicion_pegar.Enabled = True
'inhabilita la opcion fuente del menu formato
formato_fuente.Enabled = False
'inhabilita el boton copiar de la barra de herramientas
Toolbar1.Buttons(5).Enabled = False
'inhabilita el boton cortar de la barra de herraamientas
Toolbar1.Buttons(6).Enabled = False
'inhabilita el boton pegar de la barra de herramientas
Toolbar1.Buttons(7).Enabled = True
End Sub
Public Sub pegar()
'trasfiere el texto desde el portapapeles hacia el cuadro de texto text1
Text1.SelText = Clipboard.GetText()
End Sub
Public Sub fuente()
'procedimiento que modifica el estilo del texto
On Error GoTo manipularerrorfuente
StatusBar1.Panels(1).Text = "aplicando estilo"
With cuadrodedialogo
.CancelError = True
'fijar el estiloactual en el cuadro de dialogo
.FontName = Text1.FontName
.FontSize = Text1.FontSize
.FontBold = Text1.FontBold
.FontItalic = Text1.FontItalic
.FontUnderline = Text1.FontUnderline
.FontStrikethru = Text1.FontStrikethru
.Color = Text1.ForeColor
.Flags = cdlCFBoth Or cdlCFEffects
'muestra el cuadro de dialogo fuente
.ShowFont
'aplicar al cuadro de texto text1 el estilo elegido
Text1.FontName = .FontName
Text1.FontSize = .FontSize
Text1.FontBold = .FontBold
Text1.FontItalic = .FontItalic
Text1.FontUnderline = .FontUnderline
Text1.FontStrikethru = .FontStrikethru
Text1.ForeColor = .Color
End With
StatusBar1.Panels(1).Text = ""
Exit Sub
manipularerrorfuente:
If Err.Number = 32755 Then
StatusBar1.Panels(1).Text = ""
Exit Sub
Else
MsgBox "error desconociodo"
End If
End Sub

Private Sub text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
Text1.Enabled = False
Text1.Enabled = True
PopupMenu mnuedicion
Text1.Enabled = True
Text1.SetFocus
End If
End Sub




este es todo el codigo.
como les dije tambien les dejo los archivos en VB descargenselo esta comprimido en RAR y prueben los errores que da y ayudenme corregiendolo.

gracias. rr_dj
Archivos Adjuntos
Tipo de Archivo: rar mini_editor_menus__common_cntrol__tool_bar__statusbar_.rar (80,0 KB, 3 visitas)
Responder Con Cita
  #2 (permalink)  
Antiguo 02-04-2006, 17:08:19
Gran Participación en el Foro
 
Registrado: ene 2005
Ubicación: CF - Argentina
Posts: 192
LOBO_SUELTO_ Valoración +2
Predeterminado

hola, reemplaza los siguientes sub

Código:
Public Sub abrir()
'procedimiento para abrir un archivo de texto
[b]Dim cadena1 As String, cadena2 As String
Dim numero1 As Long, numero2 As Long
Dim estado1 As Boolean, estado2 As Boolean, estado3 As Boolean, estado4 As Boolean[/b]
'guarda las modificacion realizadas en el archivo
If modificado Then
rpta = MsgBox("desea guardar los cambios en el documento?", vbYesNo, "MINI EDITOR")
If rpta = vbYes Then
Call guardar
End If
End If
'si ocurre un errorejecutar manipularerrorabrir
'On Error GoTo manipularErrorAbrir
'muestra un mensaje en el primer panel de la barra de estado
StatusBar1.Panels(1).Text = "abriendo archivo"
'fijar las propiedades necesarias
With cuadrodedialogo
    'genera un error cuando pulse cancelar en el cuadro de dialogo abrir
    .CancelError = True
    'filtros
    .Filter = "archivo de texto|*.txt|todos los archivos|*.*"
    'filtro por defecto
    .FilterIndex = 2
    'extencion por defecto que se añadira al nombre del archivo
    .DefaultExt = "txt"
    'el usuario solo podra introducir nombres de archivos existentes
    .Flags = cdlOFNFileMustExist
    'visualizara el cuadro de dialogo abrir
    .ShowOpen
    'obtener un numero de canal libre
    ncanal = FreeFile
    Open .FileName For Input As ncanal
    'nuestra el nombre del archivo en la barra de titulo del formulaio
    Form1.Caption = .FileName
    End With
    
    'borra el texto del control text1
    Text1.Text = ""
[b]        Input #ncanal, cadena1, cadena2, numero1, estado1, estado2, estado3, estado4, numero2
    With Text1
        .Text = cadena1
        .FontName = cadena2
        .FontSize = numero1
        .FontBold = estado1
        .FontItalic = estado2
        .FontUnderline = estado3
        .FontStrikethru = estado4
        .ForeColor = numero2
    End With[/b]
    Close #ncanal 'cierra el archivo
    'borra el mensaje del primer panel de la barra de estado
    StatusBar1.Panels(1).Text = ""
    modificado = False 'desactiva el indicador de modificado
    Exit Sub
manipularErrorAbrir:
        If Err.Number = 32755 Then
        StatusBar1.Panels(1).Text = ""
        Exit Sub
        Else
        MsgBox "error desconocido al abrir el archivo"
        End If
    End Sub
Código:
Public Sub guardar()
'procedimiento para guardar un archivo de texto
On Error GoTo manipularerrorguardar
StatusBar1.Panels(1).Text = "guardando archivo"
With cuadrodedialogo
    .CancelError = True
    .DefaultExt = "txt"
    .Filter = "texto|*.txt|todos los archivos|*.*"
    'muestra un mensaje si desea sobreescribir el archivo
    .Flags = cdlOFNOverwritePrompt
    'muestr el cuadro de dialogo
    .ShowSave
    ncanal = FreeFile
    Open .FileName For Output As ncanal
    Form1.Caption = .FileName
End With
'escribir en el archivo los datos necesarios
With Text1
[b]    Write #ncanal, .Text, .FontName, .FontSize, .FontBold, .FontItalic, .FontStrikethru, .FontUnderline, .ForeColor[/b]
End With

Close #ncanal
StatusBar1.Panels(1).Text = ""
modificado = False
Exit Sub
manipularerrorguardar:
    If Err.Number = 32755 Then
        StatusBar1.Panels(1).Text = ""
        Exit Sub
    Else
        MsgBox "error desconocido al guardar el archivo"
    End If
End Sub
suerte
__________________
LOBO_SUELTO_
cordero atado

Informes --> info@sitsoft.com.ar
Curriculums --> cv@sitsoft.com.ar
web --> http://www.sitsoft.com.ar
web --> http://www.basilea2.com.ar
Responder Con Cita
  #3 (permalink)  
Antiguo 02-04-2006, 17:10:28
Gran Participación en el Foro
 
Registrado: ene 2005
Ubicación: CF - Argentina
Posts: 192
LOBO_SUELTO_ Valoración +2
Predeterminado

perdón quita los simbolos
y los puse para marcar los cambios pero no funcionó
__________________
LOBO_SUELTO_
cordero atado

Informes --> info@sitsoft.com.ar
Curriculums --> cv@sitsoft.com.ar
web --> http://www.sitsoft.com.ar
web --> http://www.basilea2.com.ar
Responder Con Cita
  #4 (permalink)  
Antiguo 02-04-2006, 17:12:26
Gran Participación en el Foro
 
Registrado: ene 2005
Ubicación: CF - Argentina
Posts: 192
LOBO_SUELTO_ Valoración +2
Predeterminado

repito, estos simbolos:
Código:
[b] y [/b]
__________________
LOBO_SUELTO_
cordero atado

Informes --> info@sitsoft.com.ar
Curriculums --> cv@sitsoft.com.ar
web --> http://www.sitsoft.com.ar
web --> http://www.basilea2.com.ar
Responder Con Cita
  #5 (permalink)  
Antiguo 03-04-2006, 15:32:00
Un Nuevo Amigo
 
Registrado: mar 2006
Posts: 8
rr_dj Valoración +2
Predeterminado

mano no entiendo reeemplazo todo el codigo que me das por el mio?

y que hay con y

explicame?

gracias
Responder Con Cita
  #6 (permalink)  
Antiguo 03-04-2006, 15:36:52
Un Nuevo Amigo
 
Registrado: mar 2006
Posts: 8
rr_dj Valoración +2
Predeterminado

este con y
Responder Con Cita
  #7 (permalink)  
Antiguo 03-04-2006, 16:09:13
Gran Participación en el Foro
 
Registrado: ene 2005
Ubicación: CF - Argentina
Posts: 192
LOBO_SUELTO_ Valoración +2
Predeterminado

lo que modifique a tu código fue lo siguiente:

en el procedimiento abrir:
1)
las variables estaban mal declaradas por que cuando los haces por ejemplo así:
Dim cadena1, cadena2 As String
cadena1 queda como variable variant

lo correcto es así:
Dim cadena1 As String, cadena2 As String
Dim numero1 As Long, numero2 As Long
Dim estado1 As Boolean, estado2 As Boolean, estado3 As Boolean, estado4 As Boolean

2)
en la linea siguiente faltó el estado4
Input #ncanal, cadena1, cadena2, numero1, estado1, estado2, estado3, numero2
lo correcto es:
Input #ncanal, cadena1, cadena2, numero1, estado1, estado2, estado3, estado4, numero2

3)
en esta parte le asignabas mal a .FontStrikethru = numero2 y faltaba el forecolor
With Text1
.Text = cadena1
.FontName = cadena2
.FontSize = numero1
.FontBold = estado1
.FontItalic = estado2
.FontUnderline = estado3
.FontStrikethru = numero2
End With

lo correcto es:
With Text1
.Text = cadena1
.FontName = cadena2
.FontSize = numero1
.FontBold = estado1
.FontItalic = estado2
.FontUnderline = estado3
.FontStrikethru = estado4
.ForeColor = numero2
End With

En el procedimiento guardar:

1)
falta pasar algunos parametros
Write #ncanal, .Text, .FontName, .FontStrikethru, .ForeColor
lo correcto es:
Write #ncanal, .Text, .FontName, .FontSize, .FontBold, .FontItalic, .FontStrikethru, .FontUnderline, .ForeColor

Espero haber ayudado y olvidate de los simbolos fué un error mío al escribir en la página porque cuando uno escribe en formato codigo las etiquetas de negrita no sirven.
Arregla los puntos que te marque y la aplicación debe funcionar.
__________________
LOBO_SUELTO_
cordero atado

Informes --> info@sitsoft.com.ar
Curriculums --> cv@sitsoft.com.ar
web --> http://www.sitsoft.com.ar
web --> http://www.basilea2.com.ar
Responder Con Cita
  #8 (permalink)  
Antiguo 04-04-2006, 20:36:53
Un Nuevo Amigo
 
Registrado: mar 2006
Posts: 8
rr_dj Valoración +2
Predeterminado

gracias por responder a mi pregunta .

rr_dj
Responder Con Cita
  #9 (permalink)  
Antiguo 07-04-2006, 16:13:32
Un Nuevo Amigo
 
Registrado: mar 2006
Posts: 8
rr_dj Valoración +2
Predeterminado

holas foro de nuevo sobre el posque puese anteriormente me dan un error cuando le doy en abrir se abre el cuadro de dialogo abrir y deseo cancelarlo y me da un error no se cual sea pues le he dado al cuadro de dialogo en su propiedad cancelerror=true en el siguiente codigo revisenlo.

una cosa mas digamos he abierto un archivo existente que guarde anteriormente lo abro hago modificaciones y cierro el formulario quiero que me salga un mensaje de desea guardar los cambios le doy en si y quiero que lo guarde. pero que no me abra en cuadro de dialogo guardar si no que lo guarde en el archivo que abri defrente sin abrir el cuadro de dialogo.

otro es que paradar formato a texto seleccionado se le asigne color tamaño tipode letra subrrayado, etc pero solo al texto selexxionado y no a todo al textbox como lo esta haciendo yo eso seria todo gracias antemano por todo.


gracias
rr_dj
Responder Con Cita
  #10 (permalink)  
Antiguo 07-04-2006, 18:25:11
Avatar de J.M.Movilla
Administrator
 
Registrado: dic 2002
Ubicación: BURGOS - ESPAÑA
Posts: 5.404
J.M.Movilla Valoración +2
Predeterminado

Debes depurar tu código y darle salida a los puntos en que te produzca error. Por ejemplo, en Abrir
Código:
If modificado Then 
    rpta = MsgBox("desea guardar los cambios en el documento?", vbYesNo, "MINI EDITOR") 
    If rpta = vbYes Then 
        Call guardar 
        ' Como puedes observar, si le dices que No quieres guardar los cambios...  ¿Qué hace?  Sigue leyendo !!!
        ' Tienes que añadir estas líneas
    Else
        Exit Sub
    End If 
End If
__________________
José María Movilla Cuadrado
______________________

Visual Basic Videos Programacion Foro Programacion
Tutoriales Programacion Trucos Programacion Codigos Programacion
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado


Temas Similares
Tema Autor Foro Respuestas Último Mensaje
Falta Algo Insomnia17 VBA (Excel, Word, Outlook, Access) 11 03-01-2005 16:05:22
Algo raro... zambito Crystal Reports 1 17-09-2004 01:00:00
ALGO DE ASP???? SNKEYES Visual Basic.NET 2003 & 2005 0 17-09-2004 01:00:00
DataGrid y algo más. PrimerosPasos Visual Basic.NET 2003 & 2005 0 17-09-2004 01:00:00
algo basico fede_17 Visual Basic 6.00 12 16-03-1970 08:36:00


La franja horaria es GMT. Ahora son las 22:54:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
A vBSkinworks Design

Alojado en el servicio Premium de Masquewebs | Diseño mejorado por MasqueWebs

right