Autor Tema: Imprimir (datos desde ListView)  (Leído 12681 veces)

0 Usuarios y 6 Visitantes están viendo este tema.

Desconectado pop486

  • Sv Jr.
  • **
  • Mensajes: 51
Imprimir (datos desde ListView)
« : julio 07, 2008, 12:15:31 pm »
hola a todos...tengo una duda para impresion....yo lleno un listview con datos de la base de datos los cuales yo quisiera imprimir de la misma manera como aparecen en el listview el problema es que no puedo alinear a la derecha el texto o al menos no se como...por ejemplo yo tengo una columna con montos, no puedo dejar la alineacion a la izquierda...alguien puede darme algun ejemplo o tiene el mismo problema para ver como solucionar...

Editado: Titulo, para hacerlo mas descriptivo.
« Última Modificación: julio 15, 2008, 10:37:25 pm por Vlad »

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: Imprimir
« Respuesta #1 : julio 07, 2008, 05:05:56 pm »
hola a todos...tengo una duda para impresion....yo lleno un listview con datos de la base de datos los cuales yo quisiera imprimir de la misma manera como aparecen en el listview el problema es que no puedo alinear a la derecha el texto o al menos no se como...por ejemplo yo tengo una columna con montos, no puedo dejar la alineacion a la izquierda...alguien puede darme algun ejemplo o tiene el mismo problema para ver como solucionar...

No estoy seguro de lo que estas preguntando, te estas refiriendo a alinear el texto a la derecha de todas las casillas de una determinada columna?.

Desconectado pop486

  • Sv Jr.
  • **
  • Mensajes: 51
Re: Imprimir
« Respuesta #2 : julio 07, 2008, 05:10:12 pm »
No estoy seguro de lo que estas preguntando, te estas refiriendo a alinear el texto a la derecha de todas las casillas de una determinada columna?.

me refiero a alinear cualquier columna a cualquier lado...pero por el momento con que pueda alinear determinada columna a la derecha me sirve para ver como hacer...[

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: Imprimir
« Respuesta #3 : julio 07, 2008, 05:27:04 pm »
Algo asi como lo que hace la propiedad Alignment de los encabezados?.



Si creas las columnas en modo de ejecución entonces podes hacer con:

lstView1.ColumnHeaders(NumeroColumna).Alignment = lvwColumnRight

NumeroColumna es el indice de la columna cuyos items queres alinear.
lvwColumnRight es la constante que indica que debe alinear a la derecha.



Por supuesto me imagino que esta demas decirte que hacer un reporte es una mejor opcion.
« Última Modificación: julio 07, 2008, 05:29:56 pm por Vlad »

Desconectado pop486

  • Sv Jr.
  • **
  • Mensajes: 51
Re: Imprimir
« Respuesta #4 : julio 15, 2008, 01:51:26 pm »
Algo asi como lo que hace la propiedad Alignment de los encabezados?.



Si creas las columnas en modo de ejecución entonces podes hacer con:

lstView1.ColumnHeaders(NumeroColumna).Alignment = lvwColumnRight

NumeroColumna es el indice de la columna cuyos items queres alinear.
lvwColumnRight es la constante que indica que debe alinear a la derecha.



Por supuesto me imagino que esta demas decirte que hacer un reporte es una mejor opcion.

fijate que eso lo puedo hacer en el listview el problema es que a la hora de imprimir no importa como este alineado en el listview como solo es el dato el que envio a la impresora...

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: Imprimir
« Respuesta #5 : julio 15, 2008, 02:20:41 pm »
Deberias de especificar entonces exactamente como lo estas haciendo, o al menos mostrar un trozo de codigo para saber que es lo que tenes.  :unsure:

Desconectado pop486

  • Sv Jr.
  • **
  • Mensajes: 51
Re: Imprimir
« Respuesta #6 : julio 15, 2008, 02:46:28 pm »
vaya mira...aqui esta un ejemplo de como lo hago mas o menos...


Option Explicit 
'Variable para los subitems del listview   
Dim Item As ListItem   
 
'A esta función se le envía el control LV a imprimir   
Public Sub Imprimir_ListView(ListView As ListView)   
 
Dim i As Integer, AnchoCol As Single, Espacio As Integer, x As Integer 
     
  AnchoCol = 0   
  'Recorremos desde la primer columna hasta la última para almacenar el ancho total   
  For i = 1 To ListView.ColumnHeaders.Count   
     AnchoCol = AnchoCol + ListView.ColumnHeaders(i).Width   
  Next 
     
  Espacio = 0   
     
  'Encabezado de ejemplo   
  Printer.Print " Ejemplo para imprimir un control ListView " 
     
  Printer.Print   
     
  'Imprime una línea   
  Printer.Line (Printer.CurrentX, Printer.CurrentY)-(Printer.ScaleWidth, Printer.CurrentY)   
     
  With ListView   
     
  'Acá se imprimen los encabezados del ListView   
  For i = 1 To .ColumnHeaders.Count   
      Espacio = Espacio + CInt(.ColumnHeaders(i).Width * Printer.ScaleWidth / AnchoCol)   
      Printer.Print ListView.ColumnHeaders(i).Text;   
      Printer.CurrentX = Espacio   
  Next 
 
  Printer.Print   
     
  'Imprime una línea   
  Printer.Line (Printer.CurrentX, Printer.CurrentY)-(Printer.ScaleWidth, Printer.CurrentY)   
     
  'Imprime Línea en blanco   
  Printer.Print   
     
  'Este bucle recorre los items y subitems del ListView  y los imprime   
  For i = 1 To .ListItems.Count   
       Espacio = 0   
         
       Set Item = .ListItems(i)   
       Printer.Print Item.Text;   
       'Recorremos las columnas   
       For x = 1 To .ColumnHeaders.Count - 1   
             Espacio = Espacio + CInt(.ColumnHeaders(x).Width * Printer.ScaleWidth / AnchoCol)   
             Printer.CurrentX = Espacio   
             Printer.Print Item.SubItems(x);   
       Next 
         
       'Otro espacio en blanco   
       Printer.Print   
  Next 
     
  End With 
     
  Printer.Print   
  'Imprime la línea de final de impresión   
  Printer.Line (Printer.CurrentX, Printer.CurrentY)-(Printer.ScaleWidth, Printer.CurrentY)   
  Printer.Print   
  'Texto del pie   
  Printer.Print " Fin de la impresión " 
 
     
  'Comenzamos la impresión   
  Printer.EndDoc   
End Sub 
 
 
Private Sub Command1_Click()   
    'Le enviamos el control ListView como parámetro   
    Imprimir_ListView ListView1   
End Sub 
 
Private Sub Form_Load()   
 
Dim i As Integer 
 
    'Le agregamos 4 columnas al listview   
    With ListView1   
         .View = lvwReport   
        .ColumnHeaders.Add , , "Columna 1" 
        .ColumnHeaders.Add , , "Columna 2" 
        .ColumnHeaders.Add , , "Columna 3" 
        .ColumnHeaders.Add , , "Columna 4" 
 
        'Agregamos unos items y SubItems   
        For i = 1 To 20   
            Set Item = .ListItems.Add(, , i)   
            Item.SubItems(1) = "Subitem " & i   
            Item.SubItems(2) = "Subitem " & i   
            Item.SubItems(3) = "Subitem " & i   
        Next 
    End With 
 
    Set Item = Nothing 
    Command1.Caption = " Imprimir ListView " 
End Sub 


el problema que tengo es que a la hora de imprimir el listview como lo hago con codigo lo que tomo es el valor de la celda en el listview pero no la alineacion...la onda es que no se como hacer para alinear distintas columnas....se me ocurre que con un monton de codigo pero pense que tal vez alguien ya se habia topado con esto.... :cry:

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: Imprimir (datos desde ListView)
« Respuesta #7 : julio 15, 2008, 10:58:32 pm »
Mejor miralo de esta forma:

1ro evalua el tipo de justificación que se le va a hacer al texto segun el valor del alignment que tenga la columna que estas agregando.

En base a lo anterior escoges los tres posibles casos:

a. Izq: Imprime normal.
b. Centro: Toma el valor X del marco de la derecha de la columna a imprimir y haces
Printer.CurrentX = X/2 - Printer.TextWidth(Texto)/2
c. Derecha: Toma el valor X del marco de la derecha de la columna a imprimir y haces
Printer.CurrentX = X - Printer.TextWidth(Texto)

Tus X's de referencia para cada columna en base a tu codigo serian (ej.):

X = 0
For i = 1 to NumeroColumna_a_Imprimir
X = X + .ColumnHeaders(i).Width * Printer.ScaleWidth
Next


Ahi tendria el valor de X que esta justo a la derecha de la columna a imprimir y ese es tu marco de referencia para determinar la posicion del X izq.

Si quedo confuso avisame.

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: Imprimir (datos desde ListView)
« Respuesta #8 : julio 16, 2008, 06:08:54 am »
Me equivoqué para el caso b (centrar):

Lo que puse no centraria el texto en la columna, sino entre X y el margen izq de la pagina.

Lo correcto seria:


b. Centro: Toma el valor X del marco de la derecha de la columna a imprimir y haces
Printer.CurrentX = (X  - AnchoCol/2) - Printer.TextWidth(Texto)/2


Editado:
Nota de aclaración: en tu codigo "AnchoCol" seria mas bien en realidad "AnchoCols", yo aqui me refiero con AnchoCol al ancho de la columna que estas agregando a impresión.
« Última Modificación: julio 16, 2008, 06:13:00 am por Vlad »

Desconectado pop486

  • Sv Jr.
  • **
  • Mensajes: 51
Re: Imprimir (datos desde ListView)
« Respuesta #9 : julio 16, 2008, 03:16:21 pm »
Me equivoqué para el caso b (centrar):

Lo que puse no centraria el texto en la columna, sino entre X y el margen izq de la pagina.

Lo correcto seria:


b. Centro: Toma el valor X del marco de la derecha de la columna a imprimir y haces
Printer.CurrentX = (X  - AnchoCol/2) - Printer.TextWidth(Texto)/2


Editado:
Nota de aclaración: en tu codigo "AnchoCol" seria mas bien en realidad "AnchoCols", yo aqui me refiero con AnchoCol al ancho de la columna que estas agregando a impresión.

gracias voy a probar a ver que sale... :sur:

Desconectado Juancho

  • The Communiter-
  • *
  • Mensajes: 1311
Re: Imprimir (datos desde ListView)
« Respuesta #10 : julio 16, 2008, 04:16:37 pm »
Tengo una pregunta yo a todo esto? xq no ocupas un reporte mejor? que la impresion de esa manera??
<a href="http://www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/" target="_blank">
<img src="http://cache.www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/b_560x95.png" border="0" width="560" height="95" alt="" />
</a>

Desconectado pop486

  • Sv Jr.
  • **
  • Mensajes: 51
Re: Imprimir (datos desde ListView)
« Respuesta #11 : julio 17, 2008, 04:51:20 pm »
Tengo una pregunta yo a todo esto? xq no ocupas un reporte mejor? que la impresion de esa manera??

Lo puedo hacer desde un crystal pero el problema es que tengo que tener la licensia y ademas, a mi me parece que el programa debe tener su propia impresion....en fin asi lo quieren y no puedo hacer nada...

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: Imprimir (datos desde ListView)
« Respuesta #12 : julio 17, 2008, 06:16:02 pm »
Y como vas con lo de la alineación?, la conseguiste?.

Desconectado Juancho

  • The Communiter-
  • *
  • Mensajes: 1311
Re: Imprimir (datos desde ListView)
« Respuesta #13 : julio 17, 2008, 07:39:39 pm »
Lo puedo hacer desde un crystal pero el problema es que tengo que tener la licensia y ademas, a mi me parece que el programa debe tener su propia impresion....en fin asi lo quieren y no puedo hacer nada...


Pero para los reportes en VB 6.0, no es necesario ocupar los de crystal, VB incluye sus propios diseñadores para reportes sin necesidad de la licencia de utilizar crystal report!  YO siempre que programe en VB 6.0 ocupe los que te inclueye el visual y son muy buenos y faciles (bueno antes para mi eran mejores de los de crystal porque esos ni los conocia jajaja)

Pero deberias de probar mejor con lo del propio VB te saldria mucfho mas facil todo esto!
<a href="http://www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/" target="_blank">
<img src="http://cache.www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/b_560x95.png" border="0" width="560" height="95" alt="" />
</a>

Desconectado pop486

  • Sv Jr.
  • **
  • Mensajes: 51
Re: Imprimir (datos desde ListView)
« Respuesta #14 : julio 24, 2008, 11:08:33 am »
Y como vas con lo de la alineación?, la conseguiste?.

fijate que estube probando....pero no he tenido mucho tiempo...y se ve que es algo complicado como vos me decis...tengo que ir trabajando con los ejes y almacenando en variables el punto donde se encuentra el cursor...esta de cranearlo...pero creoq ue ya va saliendo....gracias por la ayuda....cualquier cosa te pongo aqui otra pregunta...


Pero para los reportes en VB 6.0, no es necesario ocupar los de crystal, VB incluye sus propios diseñadores para reportes sin necesidad de la licencia de utilizar crystal report!  YO siempre que programe en VB 6.0 ocupe los que te inclueye el visual y son muy buenos y faciles (bueno antes para mi eran mejores de los de crystal porque esos ni los conocia jajaja)

Pero deberias de probar mejor con lo del propio VB te saldria mucfho mas facil todo esto!
pues fijate que el datareport para ese tipo de cosas es bien limitado....aunque la verdad si lo podria hacer...el punto es que yo quiero hacer la impresion desde mi programa  B-)...