4D v16.3

SET PRINT MARKER

Página Inicial

 
4D v16.3
SET PRINT MARKER

SET PRINT MARKER 


 

SET PRINT MARKER ( markNum ; posiçao {; *} ) 
Parâmetro Tipo   Descrição
markNum  Inteiro longo in Número do marcador
posiçao  Inteiro longo in Nova posição do marcador
Operador in Se passado = mover marcadores seguintes; se omitido = não move os marcadores seguintes

O comando SET PRINT MARKER permite definir a posição de um marcador durante a impressão. Combinado com os comandos Get print marker, OBJECT MOVE ou Print form, este comando lhe permite ajustar o tamanho das áreas de impressão.

SET PRINT MARKER pode ser utilizado em dois contextos:
  •  durante o evento de formulário On header, no contexto de os comandos PRINT SELECTION e PRINT RECORD.
  •  durante o evento de formulário On Printing Detail, no contexto do comando Print form.. Esta operação facilita a impressão de informes personalizados (ver exemplo).
  •  O efeito do comando está limitado à impressão; nenhuma modificação aparece na tela. As modificações realizadas os formulários não são guardados.

Passe no parâmetro markNum una das constantes do tema :

Constante Tipo Valor
Form break0 Inteiro longo 300
Form break1 Inteiro longo 301
Form break2 Inteiro longo 302
Form break3 Inteiro longo 303
Form break4 Inteiro longo 304
Form break5 Inteiro longo 305
Form break6 Inteiro longo 306
Form break7 Inteiro longo 307
Form break8 Inteiro longo 308
Form break9 Inteiro longo 309
Form detail Inteiro longo 0
Form footer Inteiro longo 100
Form header Inteiro longo 200
Form header1 Inteiro longo 201
Form header10 Inteiro longo 210
Form header2 Inteiro longo 202
Form header3 Inteiro longo 203
Form header4 Inteiro longo 204
Form header5 Inteiro longo 205
Form header6 Inteiro longo 206
Form header7 Inteiro longo 207
Form header8 Inteiro longo 208
Form header9 Inteiro longo 209

Em posição, passe a nova posição desejada, expressada em píxels.

Se passa o parâmetro opcional *, todos os marcadores localizados em baixo do marcador especificado por markNum se moverão o mesmo número de píxels e na mesma direção que este marcador quando se executa o comando. Advertência: neste caso, os objetos presentes nas áreas situadas abaixo do marcador também se movem.

Quando o parâmetro * se utiliza, é possível posicionar o marcador markNum alem da posição inicial dos marcadores que o seguem, estes últimos marcadores serão movidos  simultaneamente.



Notas:

• Este comando modifica só a posição de os marcadores existentes. Não permite a adição de marcadores. Se atribuir um marcador que não existe no formulário, o comando não fará nada.
• O funcionamento dos marcadores de impressão em modo Desenho se conserva: um marcador não pode ir mais acima do que o antecede, nem mais abaixo do que o que segue (quando o parâmetro * não se utiliza).

Exemplo  

Este exemplo completo permite gerar a impressão de um relatório de três colunas, a altura de cada linha se calcula de acordo  com os conteúdos dos campos.


O formulário de saída utilizado para a impressão é o seguinte:



O evento de formulário On Printing Detail foi selecionado para o formulário (recorde que sem importar em que área se imprima, o comando Print form só gera este tipo de evento de formulário).
Para cada registro, a altura da linha deve estar adaptada de acordo aos conteúdos da coluna "Atores" ou "Resumo" (coluna tem a maioria do conteúdo). Este é o resultado desejado:



O método de projeto de impressão é o seguinte:

 C_LONGINT(vLaltura_imp;$vLaltura;vLaltura_impresso)
 C_STRING(31;vSprint_area)
 PAGE SETUP([Filmes];"List_Imp3")
 GET PRINTABLE AREA(vLaltura_imp)
 vLaltura_impreso:=0
 ALL RECORDS([Filmes])
 vSprint_area:="Cabeçalho" `Impressão da área de cabeçalho
 $vLaltura:=Print form([Filmes];"List_Imp3";Form header)
 $vLaltura:=21 &NBSP`Altura fixa
 vLaltura_impreso:=vLaltura_impresso+$vLaltura
 
 While(Not(End selection([Filmes])))
    vSprint_area:="Detalhe" `Impressão da área de detalhe
    $vLaltura:=Print form([Filmes];"List_Imp3";Form detail)
  `El cálculo del detalle se lleva a cabo en el método de formulario
    vLaltura_impreso:=vLaltura_impreso+$vLaltura
    If(OK=0) `CANCEL ha sido ejecutado en el método de formulario
       PAGE BREAK
       vLaltura_impreso:=0
       vSprint_area:="Encabezado" `Reimpresión del área de encabezado
       $vLaltura:=Print form([Peliculas];"List_Imp3";Form header)
       $vLaltura:=21
       vLaltura_impreso:=vLaltura_impreso+$vLaltura
       vSprint_area:="Detalle"
       $vLaltura:=Print form([Peliculas];"List_Imp3";Form detail)
       vLaltura_impreso:=vLaltura_impreso+$vLaltura
    End if
    NEXT RECORD([Peliculas])
 End while
 PAGE BREAK `Asegúrese de que la última página se imprima

El método de formulario List_Imp3 es el siguiente:

 C_LONGINT($l;$t;$r;$b;$fixed_wdth;$exact_hght;$l1;$t1;$r1;$b1)
 C_LONGINT($final_pos;$i)
 C_LONGINT($detalle_pos;$encabezado_pos;$altura_a_imprimir;$altura_restante)
 
 Case of
    :(vSprint_area="Detalle") `Impresión del detalle en proceso
       OBJECT GET COORDINATES([Peliculas]Actores;$l;$t;$r;$b)
       $largo_fijo:=$r-$l  `Cálculo del tamaño del campo tipo texto Actores
       $altura_exact:=$b-$t
       OBJECT GET BEST SIZE([Peliculas]Actores;$largo;$alto;$largo_fijo)
  `Tamaño óptimo del campo de acuerdo a su contenido
       $movimiento:=$alto-$altura_exact
 
       OBJECT GET COORDINATES([Peliculas]Resumen;$l1;$t1;$r1;$b1)
       $largo_fijo:=$r1-$l1  `Cálculo del tamaño del campo tipo texto Resumen
       $altura_exact1:=$b1-$t1
       OBJECT GET BEST SIZE([Peliculas]Resumen;$largo1;$alto1;$largo_fijo)
  `Tamaño óptimo del campo de acuerdo a su contenido
       $movimiento1:=$alto1-$altura_exact1
       If($movimiento1>$movimiento)
  `Determinamos el campo más alto
          $movimiento:=$movimiento1
       End if
 
       If($movement>0)
          $posicion:=Get print marker(Form detail)
          $final_pos:=$posicion+$movimiento
  `Nos movemos al marcador Detalle y a los que siguen
          SET PRINT MARKER(Form detail;$final_pos;*)
  `Redimensionamiento de las áreas de texto
          OBJECT MOVE([Peliculas]Actores;$l;$t;$r;$hght+$t;*)
          OBJECT MOVE([Peliculas]Resumen;$l1;$t1;$r1;$alto1+$t1;*)
 
  `Redimensionamiento de las líneas de división
          OBJECT GET COORDINATES(*;"H1Linea";$l;$t;$r;$b)
          OBJECT MOVE(*;"H1Line";$l;$final_pos-1;$r;$final_pos;*)
          For($i;1;4;1)
             GET OBJECT RECT(*;"VLinea"+Cadena($i);$l;$t;$r;$b)
             MOVE OBJECT(*;"VLinea"+Cadena($i);$l;$t;$r;$final_pos;*)
          End for
       End if
 
  `Cálculo del espacio disponible
       $detalle_pos:=Get print marker(Form detail)
       $encabezado_pos:=Get print marker(Form header)
       $altura_a_imprimir:=$detalle_pos-$encabezado_pos
       $altura_restante:=altura_impreso-vLaltura_impreso
       If($altura_restante<$altura_a_imprimir`Altura insuficiente
          CANCEL `Pasar la línea a la siguiente página
       End if
 End case



Ver também 

Get print marker
OBJECT GET BEST SIZE
OBJECT GET COORDINATES
OBJECT MOVE
PAGE BREAK
Print form
PRINT RECORD
PRINT SELECTION

 
PROPRIEDADES 

Produto: 4D
Tema: Imprimir
Número 709

 
HISTÓRIA 

Modificado: 4D 2003

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)