| 4D v13.4SET PRINT MARKER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | 
    4D v13.4
 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 imprimaEl 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