Este é o site histórico da documentação 4D. As documentações estão sendo movidas progressivamente para developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v19.8
SET PRINT MARKER
|
SET PRINT MARKER ( markNum ; posiçao {; *} ) | ||||||||
Parâmetro | Tipo | Descrição | ||||||
markNum | Inteiro longo |
![]() |
Número do marcador | |||||
posiçao | Inteiro longo |
![]() |
Nova posição do marcador | |||||
* | Operador |
![]() |
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.
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).
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   `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
Get print marker
OBJECT GET BEST SIZE
OBJECT GET COORDINATES
OBJECT MOVE
PAGE BREAK
Print form
PRINT RECORD
PRINT SELECTION
Produto: 4D
Tema: Imprimir
Número
709
Modificado: 4D 2003
Manual de linguagem 4D ( 4D v19)
Manual de linguagem 4D ( 4D v19.1)
Manual de linguagem 4D ( 4D v19.4)
Manual de linguagem 4D ( 4D v19.5)
Manual de linguagem 4D ( 4D v19.6)
Manual de linguagem 4D ( 4D v19.7)
Manual de linguagem 4D ( 4D v19.8)