Justificar un texto con impresion grafica

Post Reply
User avatar
noe aburto
Posts: 420
Joined: Wed Nov 26, 2008 6:33 pm
Location: Morelia, Mich. Mexico.

Justificar un texto con impresion grafica

Post by noe aburto »

Saludos.

Tengo la necesidad de justificar textos al estilo de Office Word.

Con impresiones de DOS no tego ningun problema, de hecho diseñe mis funciones y funcionan perfecto, pero con impresiones de CmSay o Say no se como resolverlo ya que se manejan en puntos.

Alquien que me pueda hechar una manita con esto.

Gracias.

Fwh 8.11, xH 9.1, bcc 5.1
Noé Aburto Sánchez
Tec. Prog. de Sistemas. -Morelia, Mich. México.
fwh 20.06, Harbour 3.2.0, bcc 7.4
TsBrowse 9.0, TsButton 7.0, xEdit 6.1
naburtos@gmail.com, noeaburto67@hotmail.com
User avatar
ADBLANCO
Posts: 299
Joined: Mon Oct 22, 2007 3:03 pm
Location: Valencia - Venezuela

Re: Justificar un texto con impresion grafica

Post by ADBLANCO »

Aunque esto es parte de algo más complejo, te puede servir para que desarrolles tu propia función para imprimir justificado una cadena de texto;

Code: Select all

***************************************************************************************
FUNCTION pSay3(nline,ncol,cTexto,nFont,nJust)
 * pSay3(Linea,Col,"texto",nroFont,nroJustificacion)
 * Linea: Coordenadas del Punto (en caracteres)
 * Col: Coordenadas del Punto (en ctm)
 * nroJustificacion: 1=>texto a la Izquierda del punto,2=>Centrada al punto,3=>Derecha del punto
 * NroFont 1 => Arial 10 bold
 * NroFont 2 => Arial 10
 * NroFont 3 => Arial  8 bold
 * NroFont 4 => Arial  8
 * NroFont 5 => Arial  6 bold
 * NroFont 6 => Arial  6
 // Solo para usar con salida()
***************************************************************************************
LOCAL nVert,nHorz,cFont:="oFont"+str(iif(nFont<7 .and. nFont>0,nFont,1),1)
  oPrn:setfont(&cFont )
  IF nFont<3
    nVert:=0.3939 //0.4
    nHorz:=0.26   //0.45
  ELSE
    nVert:=0.3939
    nHorz:=0.13
  ENDIF
  IF PCOUNT()=5
    oPrn:CmSay(nVert*nline+1,nCol,cTexto,&cFont ,,,,iif(nJust<4 .and. nJust>0,nJust,1))
  ELSE
    oPrn:CmSay(nVert*nline+1,nCol,cTexto,&cFont )
  ENDIF
  RETURN nil

******************************************************************************************
FUNCTION Imp_MemoW(cTxt,nline,nLpos,nWid,nFont,nSkp,lJust)   // IMPRIME CAMPO MEMO
******************************************************************************************
  // cTxt  - dato tipo memo, en relidad basta con que sea texto
  // nLpos - posicion en cm del inicio del texto en la linea
  // oPrn  - objeto TPrinter
  // nWid  - ancho mAximo de texTo (en cmt)
  // oFont - fuente               (Numero Salida)
  // nSkp  - salto o espaciado por renglon
  // lJust - (Opcional) si no va a justificar => .f.
  // Nota solo para usar con salida()
LOCAL cLin, lCont:=.T., nP:=0, lNext, cC, nW,cFont,cPatron,nIp,nlcT,nCol := 1,nRow := 1
  DEFAULT nSkp := 01.0
  DEFAULT nWid := 19.0
  DEFAULT nFont:= 01.0
  DEFAULT nLpos:= 01.6
  DEFAULT lJust:= .T.
  oPrn:Cmtr2Pix(0,@nWid)
  cTxt  := Alltrim(cTxt)
  nW    := nWid-0.2
  cFont := "oFont"+STR(IIF(nFont<7 .and. nFont>0,nFont,1),1)
  line  := nline
  DO WHILE lCont            // un desmadre para separar
    cLin  := cC := ""       // y justificar los memos!!
    lNext := .T.
    DO WHILE oPrn:GetTextWidth(cLin,&cFont)<nWid .AND. nP<=Len(cTxt) .AND. lNext
      nP++
      cC:=Substr(cTxt,nP,1)
      IF ASC(cC)<>13
        cLin+=cC
      ELSE
        nP++
        lNext := .F.
      ENDIF
    ENDDO
    IF ASC(cC)<>13 .AND. ASC(cC)<>0
      CPATRON := CLIN
      cC      := Substr(cTxt,nP+1,1)
      IF " "$cLin .AND. cC<>" "
      ELSE
        // palabra cortada, retrocede
        nIp  := 1
        nlct := len(clin)
        DO WHILE Substr(cLin,nlct-nIp,1)<>" " .and. nIP<nlct
          nIp++
        ENDDO
        IF nIp>0
          cLin := SubStr(cLin,1,nlct-nIp-1)
          nP -=nIp
        ENDIF
      ENDIF
      DO WHILE cC<>" " .AND. Len(cLin)>0
        cLin := Substr(cLin,1,Len(cLin)-1)
        cC   := Right(cLin,1)
        nP--
      ENDDO
      nlct := len(clin)
      IF lJust
        IF AT(" ",CLIN)>0 .AND. AT(" ",CLIN)<NLCT  .AND. AT(" ",CLIN)<>1 // SOLO SI TIENE MAS DE UNA PALABRA
          DO WHILE oPrn:GetTextWidth(cLin,&cFont)<nWid  // JUSTIFICADO
            nIp  := 1
            DO WHILE oPrn:GetTextWidth(cLin,&cFont)<nWid .and. nIP<nlct
              nIP++
              DO WHILE Substr(cLin,nlct-nIp,1)<>" " .and. nIP<nlct
                nIp++
              ENDDO
              IF Substr(cLin,nlct-nIp,1)=" "
                cLin := Substr(cLin,1,nlct-nIp-1)+" "+SubStr(cLin,nlct-nIp,len(clin))
                nIp++
              ENDIF
            ENDDO
          ENDDO                                        // FIN DEL JUSTIFICADO
        ENDIF
      ENDIF
      pagina(1)
      nline:=line
      PSAY3(line,nLpos,cLin,nFont)
      nline += nSkp
      line  := nline
    ELSE
      pagina(1)
      nline:=line
      PSAY3(line,nLpos,cLin,nFont)
      nline += nSkp
      line  := nline
    ENDIF
    IF nP >= Len(cTxt)
      lCont := .F.
    ENDIF
  ENDDO
  RETURN nline


 
espero te ayude..

:roll:
Saludos

Angel, Valencia, Venezuela

xH .997 - FW 7.9 - BCC55 - WorkShop - MySql
mantonio_08
Posts: 330
Joined: Fri May 25, 2007 9:06 pm

Re: Justificar un texto con impresion grafica

Post by mantonio_08 »

USA LA CLASE TIMPRIME DE FULLL..... ES LO UNICO Q HE ENCONTRADO QUE SOLUCIONA EL PROBLEMA DE JUSTIFICAR LOS TEXTO, NUMEROS,,, ES SUPER SIMPLE DE APLICAR::
ADEMAS HEREDA TODO DE LA CLASE NATIVA DE FWH...


SI TIENES PROBLEMAS PARA USARLA ME HECHAS UN GRITITO...


ATTE. UN COLEGA
Post Reply