4D v14.3SET PRINT MARKER |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v14.3
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
Produto: 4D
Tema: Imprimir
Número
709
Modificado: 4D 2003
BEST OBJECT SIZE
GET OBJECT RECT
Get print marker
OBJECT MOVE
PAGE BREAK
Print form
PRINT RECORD
PRINT SELECTION
Manual de linguagem 4D ( 4D v12.4)
Manual de linguagem 4D ( 4D v14 R3)
Manual de linguagem 4D ( 4D v14 R2)
Manual de linguagem 4D ( 4D v13.5)
Manual de linguagem 4D ( 4D v14.3)
Manual de linguagem 4D ( 4D v14 R4)
Inherited from : SET PRINT MARKER ( 4D v11 SQL Release 6)