Visual Basic - Imprimir Formulario por duplicado en la misma Hoja

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 4
Ha disminuido su posición en 16 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Imprimir Formulario por duplicado en la misma Hoja

Publicado por Ricardo (2 intervenciones) el 07/02/2020 03:55:15
Saludos, estoy realizando unas mejores a un sistema que ya está funcionando, el mismo es un programa en VB6 , por motivos de compatibilidad con el hardware del usuario, y que la PC donde funciona el sistema corre un Windows XP, estoy limitado de momento.

Cabe aclarar que apenas tengo 1 mes de experiencia trabajando con Visual Basic

Se me solicito agregar la función de imprimir un presupuesto, por duplicado, una copia para el cliente y otra copia, la cuestión es que el modelo a imprimir es personalizado y no logro conseguir que el programa imprima.

Un profesor me recomendó usar Crystal Reports 8.5, lo intente, pero es muy limitado para diseñar el reporte, ademas que me limita a que sea vertical (o no se como cambiarlo), también, intenté usar los complementos de CR 8,5 con Visual Basic 6, y se me hicieron complicados los controles.

Intente imprimir el formulario con las funciones PrintForm, y el objeto Printer, y no logro obtener lo que quiero, o el formulario sale muy grande o incompleto, ademas que no logre duplicarlo.

Para resumir, necesitaría que me den consejos de como imprimir un formulario, por duplicado, en una hoja A4 orientada horizontalmente.

Gracias por su ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Imprimir Formulario por duplicado en la misma Hoja

Publicado por Antoni Masana (558 intervenciones) el 07/02/2020 15:38:11
Es evidente que no se como se imprime el formulario pero es seguro que tiene un punto de inicio y un final.
Este puede ser una llamada a un proceso que puede tener cualquier nombre pero supongamos que se llama Imprimir_Presupuesto().

El codigo a añadir seria esto:

1
2
3
For a=1 to 2
    Call Imprimir_Presupuesto()
Next

Y Si lo quieres más simple:

1
2
Call Imprimir_Presupuesto()
Call Imprimir_Presupuesto()

Cuando consigas lo anterior puedes marcarte un tanto poniendo esto:

1
2
Call Imprimir_Presupuesto("Copia para la empresa")
Call Imprimir_Presupuesto("Copia para el cliente")

Y buscar un lugar en el documento donde muestre este texto.

Sin más información poco más puedo decirte.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 4
Ha disminuido su posición en 16 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Imprimir Formulario por duplicado en la misma Hoja

Publicado por Ricardo (2 intervenciones) el 15/02/2020 04:03:24
Gracias por responder, al final lo resolvi con el objeto printer, imprimiendo uno por uno los objetos que necesitaba, y cerrando cada copia con el Printer.EndDoc para cada copia, lo que me causaba problemas, era un datagrid, y con un codigo que extrar el contenido, puedo tratarla como un objeto e imprimirla en cualquiera lugar de la hoja las veces que lo necesite, por si alguien le sirve

1
2
3
4
5
6
7
8
9
10
Printer.PaperSize = 9  'Configura la impresion en hoja A4 estandar
Printer.Orientation = 2 'Coloca la hoja en horizontal
 
Printer.PaintPicture form.Image1, posx, posy, alto, ancho  ' imprime una imagen de un formulario
 
Printer.FontSize = x 'cambia el tamaño del texto a imprimir, x es un numero entero
 
Printer.Print objeto  ' imprime un objeto del formulario, textbox, labels
 
Printer.EndDoc ' se coloca al final, este comando cierra la hoja actual y la envía a la impresora

y este es el código para extraer el contenido de un Data Grid e imprimirlo:

1
PrintFlexGrid Printer, posX, PosY  'llamado al Sub para que imprima

hay que enviarle el objeto Printer, y las posiciones X e Y en la hoja donde ira el Grid, en mi caso fg2 es mi data grid, reemplazarlo por el que corresponda


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Private Sub PrintFlexGrid(ByVal ptr As Object, ByVal xmin As Single, ByVal ymin As Single)
Const GAP = 60
 
Dim xmax As Single
Dim ymax As Single
Dim X As Single
Dim c As Integer
Dim r As Integer
 
    With ptr.Font
        .Name = fg2.Font.Name
        .Size = fg2.Font.Size
    End With
 
    With fg2
        ' See how wide the whole thing is.
        xmax = xmin + GAP
        For c = 0 To .Cols - 1
            xmax = xmax + .ColWidth(c) + 2 * GAP
        Next c
 
        ' Print each row.
        ptr.CurrentY = ymin
        For r = 1 To .Rows - 1
            ' Draw a line above this row.
            'If r > 0 Then ptr.Line (xmin, _
            ptr.CurrentY)-(xmax, ptr.CurrentY)
                ptr.CurrentY = ptr.CurrentY + GAP
 
            ' Print the entries on this row.
            X = xmin + GAP
            For c = 0 To .Cols - 1
                ptr.CurrentX = X
                ptr.Print BoundedText(ptr, .TextMatrix(r, _
                    c), .ColWidth(c));
                X = X + .ColWidth(c) + 2 * GAP
            Next c
            ptr.CurrentY = ptr.CurrentY + GAP
 
            ' Move to the next line.
            ptr.Print
        Next r
        ymax = ptr.CurrentY
 
         'Draw a box around everything.
        'ptr.Line (xmin, ymin)-(xmax, ymax), , B
 
        ' Draw lines between the columns.
        'X = xmin
        'For c = 1 To .Cols - 2
         '   X = X + .ColWidth(c) + 2 * GAP
          '  ptr.Line (X, ymin)-(X, ymax)
       ' Next c
 
    End With
End Sub
 
' Truncate the string so it fits within the width.
Private Function BoundedText(ByVal ptr As Object, ByVal txt _
    As String, ByVal max_wid As Single) As String
    Do While ptr.TextWidth(txt) > max_wid
        txt = Left$(txt, Len(txt) - 1)
    Loop
    BoundedText = txt
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar