| 4D v20.1SET PRINT MARKER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | 
    4D v20.1
 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
									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 v20)
	
	
	Manual de linguagem 4D ( 4D v20.1)
	
	
	
 Adicionar um comentário
Adicionar um comentário