4D v15.4SET PRINT MARKER |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v15.4
SET PRINT MARKER
|
SET PRINT MARKER ( markNum ; posicion {; *} ) | ||||||||
Parámetro | Tipo | Descripción | ||||||
markNum | Entero largo |
![]() |
Número de marcador | |||||
posicion | Entero largo |
![]() |
Nueva posición del marcador | |||||
* | Operador |
![]() |
Si se pasa = mover los marcadores siguientes Si se omite = no mover los marcadores siguientes | |||||
El comando SET PRINT MARKER permite definir la posición de un marcador durante la impresión. Combinado con los comandos Get print marker, OBJECT MOVE o Print form, este comando le permite ajustar el tamaño de las áreas de impresión.
SET PRINT MARKER puede utilizarse en dos contextos:
Pase en el parámetro markNum una de las constantes del tema :
Constante | Tipo | Valor |
Form break0 | Entero largo | 300 |
Form break1 | Entero largo | 301 |
Form break2 | Entero largo | 302 |
Form break3 | Entero largo | 303 |
Form break4 | Entero largo | 304 |
Form break5 | Entero largo | 305 |
Form break6 | Entero largo | 306 |
Form break7 | Entero largo | 307 |
Form break8 | Entero largo | 308 |
Form break9 | Entero largo | 309 |
Form detail | Entero largo | 0 |
Form footer | Entero largo | 100 |
Form header | Entero largo | 200 |
Form header1 | Entero largo | 201 |
Form header10 | Entero largo | 210 |
Form header2 | Entero largo | 202 |
Form header3 | Entero largo | 203 |
Form header4 | Entero largo | 204 |
Form header5 | Entero largo | 205 |
Form header6 | Entero largo | 206 |
Form header7 | Entero largo | 207 |
Form header8 | Entero largo | 208 |
Form header9 | Entero largo | 209 |
En posicion, pase la nueva posición deseada, expresada en píxeles.
Si pasa el parámetro opcional *, todos los marcadores ubicados debajo del marcador especificado por markNum se moverán el mismo número de píxeles y en la misma dirección que este marcador cuando se ejecuta el comando. Advertencia: en este caso, los objetos presentes en las áreas situadas debajo del marcador también se mueven.
Cuando el parámetro * se utiliza, es posible posicionar el marcador markNum más allá de la posición inicial de los marcadores que le siguen, estos últimos marcadores se moverán simultáneamente.
Notas:
• Este comando modifica sólo la posición de los marcadores existentes. No permite la adición de marcadores. Si designa un marcador que no existe en el formulario, el comando no hará nada.
• El funcionamiento de los marcadores de impresión en modo Diseño se conserva: un marcador no puede ir más arriba del que lo precede, ni más abajo del que lo sigue (cuando el parámetro * no se utiliza).
Este ejemplo completo permite generar la impresión de un informe de tres columnas, la altura de cada línea se calcula de acuerdo a los contenidos de los campos.
El formulario de salida utilizado para la impresión es el siguiente:
El evento de formulario On Printing Detail fue seleccionado para el formulario (recuerde que sin importar en que área se imprima, el comando Print form sólo genera este tipo de evento de formulario).
Para cada registro, la altura de la línea debe estar adaptada de acuerdo a los contenidos de la columna "Actores" o "Resumen" (columna tiene la mayoría del contenido). Este es el resultado deseado:
El método de proyecto de impresión es el siguiente:
C_LONGINT(vLprint_height;$vLheight;vLprinted_height)
C_TEXT(vSprint_area)
PAGE SETUP([MOVIES];"Print_List3")
GET PRINTABLE AREA(vLprint_height)
vLprinted_height:=0
ALL RECORDS([MOVIES])
vSprint_area:="Header" //Impresión del área de encabezado
$vLheight:=Print form([MOVIES];"Print_List3";Form header)
$vLheight:=17 //Altura fija
vLprinted_height:=vLprinted_height+$vLheight
While(Not(End selection([MOVIES])))
vSprint_area:="Detail" `Impresión del área de detalle
$vLheight:=Print form([MOVIES];"Print_List3";Form detail)
`El cálculo del detalle se lleva a cabo en el método de formulario
vLprinted_height:=vLprinted_height+$vLheight
If(OK=0) `CANCEL ha sido ejecutado en el método de formulario
PAGE BREAK
vLprinted_height:=0
vSprint_area:="Header" `Reimpresión del área de encabezado
$vLheight:=Print form([MOVIES];"Print_List3";Form header)
$vLheight:=17
vLprinted_height:=vLprinted_height+$vLheight
vSprint_area:="Detail"
$vLheight:=Print form([MOVIES];"Print_List3";Form detail)
vLprinted_height:=vLprinted_height+$vLheight
End if
NEXT RECORD([MOVIES])
End while
PAGE BREAK `Asegúrese de que la última página se imprima
C_LONGINT($l;$t;$r;$b;$fixed_wdth;$exact_hght;$l1;$t1;$r1;$b1)
C_LONGINT($final_pos;$i)
C_LONGINT($detail_pos;$header_pos;$hght_to_print;$hght_remaining)
Case of
:(vSprint_area="Detail") `Impresión del detalle en proceso
// Calcula la variable vAct
RELATE MANY([MOVIES]ID)
RELATE ONE SELECTION([MOVIE_ACTOR];[ACTORS])
vAct:=""
$n:=Records in selection([ACTORS])
For($i;1;$n)
GOTO SELECTED RECORD([ACTORS];$i)
vAct:=vAct+[ACTORS]FirstName+" "+[ACTORS]LastName+", "
End for
vAct:=Substring(vAct;1;Length(vAct)-2)
OBJECT GET COORDINATES(*;"vAct";$l;$t;$r;$b)
$fixed_wdth:=$r-$l `Cálculo del tamaño del campo tipo texto Actors
$exact_hght:=$b-$t
OBJECT GET BEST SIZE(*;"vAct";$wdth;$hght;$fixed_wdth)
`Tamaño óptimo del campo de acuerdo a su contenido
$movement:=$hght-$exact_hght
OBJECT GET COORDINATES([MOVIES]Summary;$l1;$t1;$r1;$b1)
$fixed_wdth1:=$r1-$l1 `Cálculo del tamaño del campo tipo texto Summary
$exact_hght1:=$b1-$t1
OBJECT GET BEST SIZE([MOVIES]Summary;$wdth1;$hght1;$fixed_wdth1)
`Tamaño óptimo del campo de acuerdo a su contenido
$movement1:=$hght1-$exact_hght1
If($movement1>$movement)
`Determinamos el campo más alto
$movement:=$movement1
End if
If($movement>0)
$position:=Get print marker(Form detail)
$final_pos:=$position+$movement
`Nos movemos al marcador Detail y a los que siguen
SET PRINT MARKER(Form detail;$final_pos;*)
`Redimensionamiento de las áreas de texto
OBJECT MOVE(*;"vAct";$l;$t;$r;$hght+$t;*)
OBJECT MOVE([MOVIES]Summary;$l1;$t1;$r1;$hght1+$t1;*)
`Redimensionamiento de las líneas de división
OBJECT GET COORDINATES(*;"H1Line";$l;$t;$r;$b)
OBJECT MOVE(*;"H1Line";$l;$final_pos-1;$r;$final_pos;*)
For($i;1;4;1)
OBJECT GET COORDINATES(*;"VLine"+String($i);$l;$t;$r;$b)
OBJECT MOVE(*;"VLine"+String($i);$l;$t;$r;$final_pos;*)
End for
End if
`Cálculo del espacio disponible
$detail_pos:=Get print marker(Form detail)
$header_pos:=Get print marker(Form header)
$hght_to_print:=$detail_pos-$header_pos
$hght_remaining:=vLprint_height-vLprinted_height
If($hght_remaining<$hght_to_print) `Altura insuficiente
CANCEL `Pasar el formulario 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
Producto: 4D
Tema: Impresión
Número
709
Modificado: 4D 2003
Manual de lenguaje 4D ( 4D v15.4)
Manual de lenguaje 4D ( 4D v15.3)