Programación General > Visual Basic 6.0 e inferiores

 Editar controles Data Report en tiempo de ejecucion

(1/2) > >>

arbsoft:
Hola Expertos del Foro VB 6.0, tengo algo dificil pero no imposible para uds, bueno y ya hice casi de todo y hasta ahora no podido lograrlo, es por eso que recurro a su apoyo de expertos.
Se trata de lo siguiente: Deseo mostrar el DataReport en tiempo de ejecucion (como si estuviera en tiempo de diseño) para que el usuario pueda cambiar de posicion los controles y guardarlos en su nueva posicion, en VFP si se puede, pero en VB 6.0 he intentado y no lo logro, haber si alguien me da una ayuda por favor.

Nota: No confundir con mostrar datos en el reporte.

Les agradezco sus respuestas anticipadamente... saludos

79137913:
HOLA!!!
Mira, no creo que nos tengas como expertos en VB6 como dice tu mensaje ya que lo googlee con cadena exacta y lo encontre en 3 foros mas, sinceridad aunque sea.

Pero no importa, para mi, no deberias usar un control data report, yo para mis programas imprimo mediante codigo, aca te dejo el ejemplo que me inspiro para hacer esto, y lo que deberias hacer es un form con labels para arrastrar, de tal manera que luego genere el reporte mediante la posicion de los labels ;).

Ahh y aca el MSDN de Microsoft que explica como usar la Clase Priter, es bastante facil.

msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.powerpacks.printing.compatibility.vb6.printer_members.aspx


--- Código: Visual Basic --- Private Type lineas    Tarea As String    Linea As String    Cant As String    PrecioUnitario As String    PrecioTotal As String    Descripcion As String    Nhoras As StringEnd Type Dim Filas() As lineas Dim x As Integer 'numero de registro de "Filas"Dim I As Integer  Dim Contrato As StringDim Contratista As StringDim Ejec As StringDim Fenvio As StringDim Tarea As StringDim Tags As StringDim DescripcionTrabajos As String Private Sub Form_Load()     x = 2 ReDim Filas(x) 'rellenamos los datos de las variables de prueba     Contrato = "199827"    Contratista = "Antonio Fdez."    Ejec = "324"    Fenvio = "19/11/06"    Tarea = "EEAACC"    Tags = "PAOEIRD"    DescripcionTrabajos = "Inmunizacion de las bacterias gastroinservibles " & _                          "de la traqueotomizacion"     Filas(0).Tarea = "111"    Filas(0).Linea = "11"    Filas(0).Cant = "1111"    Filas(0).PrecioUnitario = "11111 €"    Filas(0).PrecioTotal = "11111 €"    Filas(0).Descripcion = "Rendicion incondicional de las almorranas involuntarias"    Filas(0).Nhoras = "34 H"     Filas(1).Tarea = "222"    Filas(1).Linea = "22"    Filas(1).Cant = "2222"    Filas(1).PrecioUnitario = "22222 €"    Filas(1).PrecioTotal = "22222 €"    Filas(1).Descripcion = "Caperucita solo tiene 16 primaveras sin flores" & _                            " sin vida, va tanto el cantaro a la fuente que " & _                            " se acaba rompiendo esternocleidomastoideo de la sin razon"    Filas(1).Nhoras = "34 H"     Filas(2).Tarea = "333"    Filas(2).Linea = "33"    Filas(2).Cant = "3333"    Filas(2).PrecioUnitario = "33333 €"    Filas(2).PrecioTotal = "333333 €"    Filas(2).Descripcion = "quiero volar lejos de aqui escapar"    Filas(2).Nhoras = "34 H"     Impresion.Width = 297 'tamaño del formulario (solo para hacer pruebas)    Impresion.Height = 210 'tamaño del formulario (solo para hacer pruebas)     Me.Show     IMPRIMIR End Sub  Public Function IMPRIMIR() Dim PosY As Integer 'posicion columnaDim PosX As Integer 'posicion linea Dim Linea As Integer 'el tamaño maximo de la lineaDim Text As String 'va guardando el texto por bloquesDim Caracter As String 'recoge los caracteresDim Palabra As String 'recoge la palabra Dim Dia As StringDim Mes As StringDim Ano As String     'le decimos la orientacion de las paginas, en este caso apaisada    Printer.Orientation = 2     'modo de escala en milimetros    Printer.ScaleMode = 6     'le decimos el tamaño de la escala, en este caso dinA4 en milimetros    Printer.ScaleWidth = 297    Printer.ScaleHeight = 210     'el tamaño de la letra    Printer.FontSize = 9     Printer.FontBold = False     'funcion colocar: el primer valor es el texto, el segundo la posicion _     en la fila y el tercero la posicion en la columna-> colocar texto, PosicionFila, _     PosicionColumna     colocar Contrato, 5, 27    colocar Contratista, 41, 27    colocar Ejec, 100, 27     'Desglosamos fecha envio (ajustamos a las marcas del impreso / /)     Dia = Mid$(Fenvio, 1, 2)    Mes = Mid$(Fenvio, 4, 2)    Ano = Mid$(Fenvio, 7, 2)     colocar Dia, 228, 27    colocar Mes, 238, 27    colocar Ano, 248, 27     colocar Tarea, 1, 50    colocar Tags, 21, 50    colocar DescripcionTrabajos, 51, 50     PosY = 190     'marcamos el tamaño máximo que puede tener la descripcion por linea    Linea = 41     For I = 0 To x        colocar Filas(I).Tarea, 1, PosY        colocar Filas(I).Linea, 21, PosY        colocar Filas(I).Cant, 35, PosY        colocar Filas(I).PrecioUnitario, 52, PosY        colocar Filas(I).PrecioTotal, 74, PosY        colocar Filas(I).Nhoras, 183, PosY         Palabra = ""        Text = ""        x = 1         'imprimimos la descripcion (segun el tamaño de linea)         'Funcionamiento: le damos un texto de cualquier tamaño y        'esta parte nos lo ajustará según el tamaño de linea que escojamos        'en tantas filas como sea necesario, respetando las palabras completas.         Do             Caracter = Mid(Filas(I).Descripcion, x, 1)             If Caracter <> " " And x <> Len(Filas(I).Descripcion) Then                Palabra = Palabra & Caracter            Else                'en el case que se ajuste a la linea                If Len(Text) + Len(Palabra) = Linea Then                    colocar Text & " " & Palabra, 98, PosY                    Palabra = ""                    Text = " "                    PosY = PosY + 5                'en el caso que sea mayor que la linea                ElseIf Len(Text) + Len(Palabra) > Linea Then                    colocar Text, 98, PosY                    PosY = PosY + 5                    Text = Palabra                    Palabra = ""                'en el case que sea la ultima linea                ElseIf x = Len(Filas(I).Descripcion) Then                    colocar Text & " " & Palabra & Right(Filas(I).Descripcion, 1), 98, PosY                    PosY = PosY + 5                    Text = ""                    Palabra = ""                Else 'todavía es menor que el tamaño de la linea                    Text = Text & " " & Palabra                    Palabra = ""                End If            End If             x = x + 1            Loop Until x > Len(Filas(I).Descripcion)    Next                ' mandar el trabajo a imprimir    Printer.EndDoc End Function  Private Function colocar(texto As String, x As Integer, Y As Integer)     Printer.CurrentX = x    Printer.CurrentY = Y    Printer.Print texto End Function     'Para evitar gastar papel "a lo tonto", lo mejor es hacer pruebas en un _    'formulario para ello, comentar las lineas:        'Printer.Orientation        'Printer.EndDoc    'y sustituir en todo el formulario "printer" por el nombre del formulario, _    'en este caso  

SUERTE!!!

No desistas pero si vas a un foro no seas adulador para que respondan tus preguntas, si no te sirve responde de nuevo aca y te digo la manera facil de editar un data report  :D  , pero de verdad te recomiendo que uses el metodo printer, es mucho mas versatil.

arbsoft:
Gracias por la respuesta, ... creo q has tomado a mal la publicacion de mi consulta en los 3 foros, la verdad no veo la razon, solo q quiero resolver ese inconveniente.

79137913:
No hay problema ;-)

79137913:
Bueno, te paso a explicar, primero vas a necesitar hacer un form con fondo blanco donde se encuentren todos los componentes que tiene el data report y en su debido sitio, despues de eso, un modulo para guardar variables de respaldo, y por ultimo codigo en el data report.

Primero: EL FORM
Aca ubicamos:
                     Un textbox que simulara ser un label editable. (uno por cada label)
                     Un label que simulara ser un el area donde se escriben los datos de la Bd. (uno por cada columna)
                     Una linea que representa cada linea del reporte. (uno por cada linea)
                     Un shape que representa cada shape del reporte. (uno por cada shape)
                     Una imagen que representa cada imagen del reporte. (uno por cada imagen)

Terminado esto hace que se puedan arrastrar a gusto por el form.
Y por ultimo toma las propiedades de left y top de cada uno, eso guardalo en variables dentro del modulo

Segundo: EL MODULO
Aca ubicamos 2 variables (o un vector como mas te guste) por cada control que ubicamos en el form (cada una representa X e Y)

Tercero: EL DATAREPORT
Aca vas a ver el codigo y pones:


--- Código: Visual Basic --- Private Sub DataReport_Activate()label1.left = VARIABLE DE LEFT DEL TEXTBOXlabel1.top = VARIABLE DE TOP DEL TEXTBOXline1.left = VARIABLE DE LEFT DE LA LINEAline1.top = VARIABLE DE TOP DE LA LINEA' Y ASI CON TODOS LOS CONTROLESEnd Sub  

ESPERO QUE TE HAYA SERVIDO IGUAL YO SOY DE COMPLICARME XD.

NO  :hitcomp: CONTINUA  :comp:

SUERTE!!!

BUENO, VOY A SEGUIR LABURANDO  :brickwall:  SINO EL JEFE ME PUEDE AGARRAR  XP

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa