PDA

Ver la versión completa : Conversion de texto.



Spartako67
09/09/2011, 06:42
Hola..., bueno soy nuevo en el portal.., y a la vez un novato en lo que respecta a la programación, razón por la cual manifiesto mi inquietud.
Estoy haciendo un programa en visual basic 6.0 y soy novato en ello.., tengo un formulario que tiene un textBox y un boton para guardar su contenido, y la verdad es que no puedo aplicarlo, lo que quiero es que el contenido del textbox se guarde como un archivo de texto osea de formato .txt, y que después limpie la pantalla del textbox para comenzar de nuevo, y un boton para que dentro del mismo formulario imprima el archivo .txt

Muchas gracias...de antemano.

Acila
09/09/2011, 15:24
Hola, siento no poder ayudarte en el tema, pero espero que de alguien de por aquí si pueda hacerlo :)
Saludos

Adonis74
10/09/2011, 22:29
Hola un saludo, lo que le pides a tu aplicación es posible, solo que te faltan componentes todavía, no basta con un Formulario, un TextBox, y un Botón, te faltan componentes como el PrintDialog, (para poder es***** la impresora e imprimir) el PrintPreviewDialog (solo si deseas una vista previa de la impresión) el PageSetupDialog (solo si deseas configurar la pagina a imprimir) un PrintDocument (para establecer las propiedades de lo que vas a imprimir) y por ultimo un SaveFileDialog (este es para poder salvar el archivo de texto)
Espero poder ayudarte, programo en visual Basic .net; pero si tienes dominios básicos sobre la programación, no se te va hacer muy difícil entenderme. Lo que pides es posible, trataré desde VB.NET ir explicándote los pasos, luego lo llevas a tu versión. Quiero salvar la parte de que solo soy un programador empírico y la etapa del VB.60 me la he saltado, fui directo al reto de estos tiempos. Solo espero poder ayudarte.
1. Crea tu formulario y elige el nombre que desees darle.
2. Te aconsejo que no utilices un TextBox para esto, sino un RichTexBox
3. Vuelca todos estos componentes que te he mencionado y relaciono a continuación:
a) PrintDialog
b) PrintPreviewDialog
c) PageSetupDialog
d) PrintDocument
e) SaveFileDialog
f) Button1 (Guardar)
g) Button2 (Limpiar)
h) Button3 (btnPrintPreview)
i) Button4 (btnPrintDialog)
j) Button5 (btnPageSetup)
k)RichTexBox (rtb)

4. En el evento clic del Button3, que previamente debiste llamarlo como “btnPrintPreview” pones este código:

‘ Aquí te encierro el código en un Try catch para controlar una ‘posible excepción.

Private Sub btnPrintPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrintPreview.Click
Try
PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.ShowDialog()
Catch exp As Exception
MsgBox("Ha ocurrido un error mientras intentaba cargar el " & " documento para la Vista preliminar de la Impresión. Asegúrese de tener " & "el acceso a una impresora", MsgBoxStyle.OkOnly, Me.Text)
End Try
End Sub


5. En el evento clic del Button4, que previamente debiste llamarlo como “btnPrintDialog” escribes este código:


‘PrintDialog te permite seleccionar la impresora en la que desea imprimir, además de otras opciones de impresión como ya te había ‘explicado antes.

Private Sub btnPrintDialog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrintDialog.Click
PrintDialog1.Document = PrintDocument1
If PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
PrintDocument1.Print()
End If
End Sub

6. En el evento clic del Button5, que previamente lo he nombrado como “btnPageSetup” escribes este código:

‘Aquí me permito la configuración de página para especificar ‘aspectos tales como el tamaño del papel, la orientación vertical,
‘ horizontal, etc.

Private Sub btnPageSetup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPageSetup.Click
With PageSetupDialog1
.Document = PrintDocument1
.PageSettings = PrintDocument1.DefaultPageSettings
End With

If PageSetupDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
PrintDocument1.DefaultPageSettings = PageSetupDialog1.PageSettings
End If
End Sub

7. En el evento clic del Button2, que previamente lo he nombrado como “Limpiar” escribes este código:

‘Aquí le digo reemplace el texto por texto en blanco

Private Sub Limpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Limpiar.Click
rtb.Text = ""
End Sub

8. En el evento clic del Button1, que previamente lo he nombrado como “Guardar” escribes este código:

‘Aquí en este evento llamo a una función que he nombrado Guardar_como

Private Sub Guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Guardar.Click

Call Guardar_como()
End Sub

9. Aquí hago una función para guardar el documento

Function Guardar_como() As Boolean
Dim m_Cancelar As Boolean
Dim m_Changed As Boolean
Dim SaveFiledialog As New SaveFileDialog

With SaveFiledialog
.Filter = "Archivos de texto (*.txt)|*.txt|Todos los archivos (*.*)|*.*"
Try
If .ShowDialog = Windows.Forms.DialogResult.OK Then
'Guardar
rtb.SaveFile(.FileName, RichTextBoxStreamType.PlainText)
m_Changed = False
Else
' Cancelar
m_Cancelar = True
End If
Catch oMen As Exception
MsgBox(oMen.Message, MsgBoxStyle.Critical)
End Try
End With
End Function

10. Y por ultimo aquí es donde establezco todos los parámetros y propiedades para poder imprimir

Private Sub pdoc_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

' Aqui Declare una variable que contenga la posición del último carácter impreso. Debes declararla
' como estática para que los siguiente eventos PrintPage puedan hacer referencia a ella.

Static intCurrentChar As Int32

' Aquí inicialicé la fuente que se va a utilizar en la impresión, como no tengo problemas de visión puse 12
' pero puedes cambiarla (es broma)no quiero que los que me lean digan, este Adonis no es serio con su trabajo .

Dim font As New Font("Microsoft Sans Serif", 12)

Dim intPrintAreaHeight, intPrintAreaWidth, marginLeft, marginTop As Int32
With PrintDocument1.DefaultPageSettings

' Aqui inicio las variables locales que contengan los límites del rectángulo del
' área de impresión e inicio las variables locales que contengan los valores de margen, que servirán
' de coordenadas X e Y para la esquina superior izquierda del rectángulo del
' área de impresión.

intPrintAreaHeight = .PaperSize.Height - .Margins.Top - .Margins.Bottom
intPrintAreaWidth = .PaperSize.Width - .Margins.Left - .Margins.Right



marginLeft = .Margins.Left ' Coordenada X
marginTop = .Margins.Top ' Coordenada Y
End With

' Aqui le ordeno que si el usuario ha seleccionado el modo Horizontal, cambie el alto y el ancho
' del área de impresión.

If PrintDocument1.DefaultPageSettings.Landscape Then
Dim intTemp As Int32
intTemp = intPrintAreaHeight
intPrintAreaHeight = intPrintAreaWidth
intPrintAreaWidth = intTemp
End If

' Aquí obligo a que calcule el número total de líneas en el documento a partir del alto del
' área de impresión y del alto de la fuente.

Dim intLineCount As Int32 = CInt(intPrintAreaHeight / font.Height)

' Y en esta inicio la estructura del rectángulo que define el área de impresión.

Dim rectPrintingArea As New RectangleF(marginLeft, marginTop, intPrintAreaWidth, intPrintAreaHeight)

' Cree una instancia de la clase StringFormat, que encapsula la información de diseño
' del texto, muestra las manipulaciones y las características de OpenType.

Dim fmt As New StringFormat(StringFormatFlags.LineLimit)

' Llamé a MeasureString para determinar el número de caracteres que caben en
' el rectángulo del área de impresión.

Dim intLinesFilled, intCharsFitted As Int32
e.Graphics.MeasureString(Mid(rtb.Text, intCurrentChar + 1), font, New SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt, intCharsFitted, intLinesFilled)

' Y esto es ya para que se imprima el texto en la página.

e.Graphics.DrawString(Mid(rtb.Text, intCurrentChar + 1), font, Brushes.Black, rectPrintingArea, fmt)

' Hago avanzar el carácter actual hasta el último carácter impreso de esta página y lo coloco en la siguiente.

intCurrentChar += intCharsFitted

' Aqui el HasMorePages indica al módulo de impresión si debe desencadenarse otro
' evento PrintPage.

If intCurrentChar < rtb.Text.Length Then
e.HasMorePages = True
Else
e.HasMorePages = False

' Debe restablecer explícitamente intCurrentChar ya que es estática.

intCurrentChar = 0
End If
End Sub

Nota aclaratoria: Las lineas de texto que estan despúes de cada apóstrofe son comentarios aclaratorios míos, no deben ir al código, si están ahí es una manera que utilizamos los programadores para estar en fase con lo que vamos desarrolando y por si queremos compartir el código fuente, como lo hago con usted en este caso.

Con este codigo estimado colega, tienes todo lo que necesitas para hacer ese trabajo y un poco mas. Quiero que sepas que fue un reto nuevo, porque nunca lo había hecho, sabía que era posible, pero luego de leer su duda me aventuré a realizarlo y ahí se lo dejo, para que lo lleve a la versión de VB donde usted programa.

Espero haberle sido útil. Cualquier otra ayuda que necesites no dejes de plantearla aquí, porque los genios están compuestos de un 2% de sabiduría y un 98 % de entrega y constancia, hoy se es novato, pero mañana podemos estar entre los grandes.

Saludos
Adonis