Sv Community El Salvador
Soporte y Tecnología => Programación => VB => Mensaje iniciado por: pop486 en 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.
-
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?.
-
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...[
-
Algo asi como lo que hace la propiedad Alignment de los encabezados?.
(http://img502.imageshack.us/img502/9770/captura53gl3.th.png) (http://img502.imageshack.us/my.php?image=captura53gl3.png)
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.
-
Algo asi como lo que hace la propiedad Alignment de los encabezados?.
(http://img502.imageshack.us/img502/9770/captura53gl3.th.png) (http://img502.imageshack.us/my.php?image=captura53gl3.png)
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...
-
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:
-
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:
-
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.
-
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.
-
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:
-
Tengo una pregunta yo a todo esto? xq no ocupas un reporte mejor? que la impresion de esa manera??
-
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...
-
Y como vas con lo de la alineación?, la conseguiste?.
-
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!
-
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-)...
-
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-)...
vaia esta bn hacelo como te parezca mejor! :-/ :-/
PD. Realmente hay gente que se complica la vida ellos solos, habiendo formas mucho mas faciles de hacer, solo hace falta leer y conocer y profundizar un poquito! B-) :roll: :roll:
-
vaia esta bn hacelo como te parezca mejor! :-/ :-/
PD. Realmente hay gente que se complica la vida ellos solos, habiendo formas mucho mas faciles de hacer, solo hace falta leer y conocer y profundizar un poquito! B-) :roll: :roll:
gracias por tu comentario...que por cierto me parece absurdo...pero bueno asi hay gente que cree que lo sabe todo....
-
gracias por tu comentario...que por cierto me parece absurdo...pero bueno asi hay gente que cree que lo sabe todo....
No es q lo sepa todo, sino de que unbo intenta ayudar para q a veces la gente salga d su ignorancia y aprenda un poco mas y se de cuenta q hay veces las cosas se pueden hacer mas sencillas y se puede ahorra un poco de tiempo! Pero bueno! B-) :azn: :mosh:
-
No es q lo sepa todo, sino de que unbo intenta ayudar para q a veces la gente salga d su ignorancia y aprenda un poco mas y se de cuenta q hay veces las cosas se pueden hacer mas sencillas y se puede ahorra un poco de tiempo! Pero bueno! B-) :azn: :mosh:
stoy de acuerdo con vos Juancho.... esto esta como el dicho q dicen... " Para que inventar...... lo que ya ha sido inventado? "