Página 1 de 1

como imprimir com xharbour

Enviado: 05 Jan 2006 16:48
por joseduarte
mandei um tópico perguntando sobre como usar recursos gráficos com o xharbour no modo console, e o vagner me respondeu, e me desanimou ao mesmo tempo, mas agora tenho outra dúvida, quando usamos o clipper, enviar relatórios para impressoras for windows, usb, etc, é um parto, temos que fazer malabarismos para conseguir imprimir, ou usar produtos de terceiros (as vezes pirata, o que não ficaria correto), então pergunto, como fazer para em um programa xharbour imprimir em qualquer impressora, seja usb ligada ao micro, seja uma impressora de uma rede, etc. Obrigado !!!!

xHarbour, MiniGUI

Enviado: 05 Jan 2006 17:15
por gransoft
ARAGUARI-MG, 5 de janeiro de 2006.

Prezado José Duarte,

Baixe um simples exemplo, "Projeto_0.0.20.exe" no link abaixo:
http://www.gransoft.com/download/minigui

xHarbour, MiniGUI, etc.

SEMPRE utilizarei matriciais (baixo custo de materiais) e Jato de tinta/toner...

Atenciosamente,
Janis Peters Grants.

Skype: gransoft
http://www.gransoft.com.br
gransoft@zipmail.com.br

Enviado: 06 Jan 2006 09:15
por joseduarte
Janis, obrigado pelo exemplo, porém, por me expressar mal, acabei não falando corretamente a minha dúvida.
Eu quero imprimir em qualquer impressora, seja local ou de rede, seja usb ou não, mas usando o xharbour no modo console, sem nenhuma lib grafica junto, só xharbour em modo caracter, pois pretendo fazer um fonte para rodar tanto no windows como no linux, e como não tem lib grafica 100% pronta para rodar no linux, o melhor, na minha opinião, é usar no modo caracter mesmo. Obrigado !!!

Enviado: 06 Jan 2006 11:19
por MARCELOG
Caro JoseDuarte,
a classe Win32prn efetua a impressão da forma e (em qualquer) impressora que você quiser, inclusive USB.
Ela simplesmente pega as configurações da impressora e o texto produzido, converte o mesmo em pixel´s e monta um device context para impressão.
O problema, e estou trabalhando nisso, é a impossilidade de visualização do trabalho (por enquanto) - Estou tendo dificuldade com a linguagem C.
Em um tópico anterior, para quem pretende trabalhar com texto puro, com utilização da classe win32prn dei dicas para montar um preview capenga (mas que funciona perfeitamente, especialmente com texto).
Todavia, em virtude de visual, estou simplesmente criando os relatórios e convertendo os mesmos numa página html e exibindo a mesma pelo browse padrão do computador.
Nessa situação, sem perda de performace (os browsers são rápidos e a página html gerada localmente é puro texto), o usuário vê o que vai ser impresso e pode até copiar este relatório para um outro aplicativo (word, 602Txt, etc.).
Eu também gosto do estilo console (texto), mas um relatório visualizado da forma mais próxima do que vai ser impresso (true type) é bem melhor.
Não brigue com o Windows, apenas use o que ele tem de bom!

Espero ter ajudado.

PS: nos sources do xHarbour, há exemplo de como imprimir arquivos utilizando a classe Win32Prn. Não deixe de ver.

MarceloG

Enviado: 06 Jan 2006 11:30
por MARCELOG
JoseDuarte, completando,
eu respeito muito a posição do Vagner, mas pelo que andei verificando, com uso das apis do windows é possível fazer muito coisa em modo texto.
É lógico que, e se você gosta da Jane (aquela do Tarzan) de tanga, não pretende vê-la num "taierzinho" preto né?
Assim, modo texto é texto, e modo gráfico é gráfico.
Conforme exposição anterior, você deve apenas utilizar os recursos realmente bons dessa estrutura de informação, e não descaracterizar um "projeto conservador" em modo texto.
Com o uso da api do Windows, a classe Win32Prn cria um DC, então é so pegar o DC, convertê-lo num bitmap e exibí-lo numa janela criada pelo windows.
A impressão!? Deixa pra lá. A turma do Bill (Gates) já cuidiou disso e sabe imprimir o DC ou o bitmap em qualquer situação e na hora que você madar.
Ah! O Vagner ainda deu a dica do WMF, que também é uma alternativa a ser estudada e, para delírio de todos, a consagração da classe Win32Prn imprimindo e exibindo o que você quiser.

Sem desânimo tá?

MarceloG

Enviado: 06 Jan 2006 14:42
por joseduarte
Onde posso conseguir documentação dessa classe win32prn ?
Obrigado !!

Enviado: 07 Jan 2006 01:32
por vagucs
O modo console ou modo janela são apenas a capa do sistema, claro que, reproduzir o relatorio grafico na tela em modo console, vc precisaria de uma lib grafica para o mesmo, coisa que acho não vai existir nem tão cedo, pois se for exibir uma tela em modo janela seu programa será minimizado, enfim, independente de modo texto ou não, vc poderá utilizar todos os recursos do sistema operacional, com esta pequena limitação de que o que era visual não aparecerá no modo console por ser modo texto.

O PRWIN foi feito usando a classe WIN32PRN.

Enviado: 07 Jan 2006 09:21
por joseduarte
amigo Vagner, obrigado por sua explanação, mas eu pedi documentação da classe win32prn, explicando os seus recursos, para eu poder utilizar tudo o que ela oferece, se alguém souber, por favor poste aqui ! obrigado !!!

Enviado: 08 Jan 2006 18:10
por Antonio
Em \xharbour\source\rtl existem os fontes da classe win32prn, ja a documentação, acredito não existir ainda.

Teste da Classe:

Código: Selecionar todos


#define FORM_A4 9

#define PS_SOLID            0

#define RGB( nR,nG,nB )   ( nR + ( nG * 256 ) + ( nB * 256 * 256 ) )

#define BLACK          RGB( 0x0 ,0x0 ,0x0  )
#define BLUE           RGB( 0x0 ,0x0 ,0x85 )
#define GREEN          RGB( 0x0 ,0x85,0x0  )
#define CYAN           RGB( 0x0 ,0x85,0x85 )
#define RED            RGB( 0x85,0x0 ,0x0  )
#define MAGENTA        RGB( 0x85,0x0 ,0x85 )
#define BROWN          RGB( 0x85,0x85,0x0  )
#define WHITE          RGB( 0xC6,0xC6,0xC6 )

FUNCTION Main()
  LOCAL nPrn:=1, cBMPFile:= SPACE( 40 )
  LOCAL aPrn:= GetPrinters()
  LOCAL GetList:= {}
  CLS
  IF EMPTY(aPrn)
    Alert("No printers installed - Cannot continue")
    QUIT
  ENDIF
  DO WHILE !EMPTY(nPrn)
    CLS
    @ 0,0 SAY 'Win32Prn() Class test program. Choose a printer to test'
    @ 1,0 SAY 'Bitmap file name' GET cBMPFile PICT '@!K'
    READ
    @ 2,0 TO maxRow(),maxCol()
    nPrn:= ACHOICE(3,1,maxRow()-1,maxCol()-1,aPrn,.T.,,nPrn)
    IF !EMPTY(nPrn)
        PrnTest(aPrn[nPrn], cBMPFile)
    ENDIF
  ENDDO
  RETURN(NIL)

STATIC FUNCTION PrnTest(cPrinter, cBMPFile)
  LOCAL oPrinter:= Win32Prn():New(cPrinter), aFonts, x, nColFixed, nColTTF, nColCharSet
  oPrinter:Landscape:= .F.
  oPrinter:FormType := FORM_A4
  oPrinter:Copies   := 1
  IF !oPrinter:Create()
    Alert("Cannot Create Printer")
  ELSE
    IF !oPrinter:startDoc('Win32Prn(Doc name in Printer Properties)')
      Alert("StartDoc() failed")
    ELSE
      oPrinter:SetPen(PS_SOLID, 1, RED)
      oPrinter:Bold(800)
      oPrinter:TextOut(oPrinter:PrinterName+': MaxRow() = '+STR(oPrinter:MaxRow(),4)+'   MaxCol() = '+STR(oPrinter:MaxCol(),4))
      oPrinter:Bold(0)     // Normal
      oPrinter:NewLine()
      oPrinter:TextOut('   Partial list of available fonts that are available for OEM_')
      oPrinter:NewLine()
      oPrinter:UnderLine(.T.)
      oPrinter:Italic(.T.)
//      oPrinter:SetFont('Courier New',7,{3,-50})  // Compressed print
      nColFixed:= 40 * oPrinter:CharWidth
      nColTTF  := 48 * oPrinter:CharWidth
      nColCharSet  := 60 * oPrinter:CharWidth
      oPrinter:TextOut('FontName')
      oPrinter:SetPos(nColFixed)
      oPrinter:TextOut('Fixed?')
      oPrinter:SetPos(nColTTF)
      oPrinter:TextOut('TrueType?')
      oPrinter:SetPos(nColCharset)
      oPrinter:TextOut('CharSet#',.T.)
      oPrinter:NewLine()
      oPrinter:Italic(.F.)
      oPrinter:UnderLine(.F.)
      aFonts:= oPrinter:GetFonts()
      oPrinter:NewLine()
      FOR x:= 1 TO LEN(aFonts) STEP 2
        oPrinter:CharSet(aFonts[x,4])
        IF oPrinter:SetFont(aFonts[x,1])       // Could use "IF oPrinter:SetFontOk" after call to oPrinter:SetFont()
          IF oPrinter:FontName == aFonts[x,1]  // Make sure Windows didn't pick a different font
            oPrinter:TextOut(aFonts[x,1])
            oPrinter:SetPos(nColFixed)
            oPrinter:TextOut(IIF(aFonts[x,2],'Yes','No'))
            oPrinter:SetPos(nColTTF)
            oPrinter:TextOut(IIF(aFonts[x,3],'Yes','No'))
            oPrinter:SetPos(nColCharSet)
            oPrinter:TextOut(STR(aFonts[x,4],5))
            oPrinter:SetPos(oPrinter:LeftMargin, oPrinter:PosY + (oPrinter:CharHeight*2))
            IF oPrinter:PRow() > oPrinter:MaxRow() - 10  // Could use "oPrinter:NewPage()" to start a new page
              EXIT
          ENDIF
          ENDIF
        ENDIF
        oPrinter:Line(0, oPrinter:PosY+5, 2000, oPrinter:PosY+5)
      NEXT x
      oPrinter:SetFont('Lucida Console',8,{3,-50})  // Alternative Compressed print
      oPrinter:CharSet(0)  // Reset default charset
      oPrinter:Bold(800)
      oPrinter:NewLine()
      oPrinter:TextOut('This is on line'+STR(oPrinter:Prow(),4)+', Printed bold, ' )
      oPrinter:TextOut(' finishing at Column: ')
      oPrinter:TextOut(STR(oPrinter:Pcol(),4))
      oPrinter:SetPrc(oPrinter:Prow()+3, 0)
      oPrinter:Bold(0)
      oPrinter:TextOut("Notice: UNDERLINE only prints correctly if there is a blank line after",.T.)
      oPrinter:TextOut("        it. This is because of ::LineHeight and the next line",.T.)
      oPrinter:TextOut("        printing over top of the underline. To avoid this happening",.T.)
      oPrinter:TextOut("        you can to alter ::LineHeight or use a smaller font")
      oPrinter:NewLine()
      oPrinter:NewLine()
      oPrinter:SetFont('Lucida Console',18, 0)  // Large print
      oPrinter:SetColor( GREEN )
      oPrinter:TextOut("Finally some larger print")
      oPrinter:Box(  0, oPrinter:PosY+100, 100, oPrinter:PosY+200)
      oPrinter:Arc(200, oPrinter:PosY+100, 300, oPrinter:PosY+200)
      oPrinter:Ellipse(400, oPrinter:PosY+100, 500, oPrinter:PosY+200)
      oPrinter:FillRect(600, oPrinter:PosY+100, 700, oPrinter:PosY+200, RED)

//    To print a barcode;
//    Replace 'BCod39HN' with your own bar code font or any other font
//      oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 30 ) , oPrinter:MM_TO_POSY(60 ), '1234567890', 'BCod39HN', 24, 0 )
//
      PrintBitMap( oPrinter, cBMPFile )

      oPrinter:EndDoc()
    ENDIF
    oPrinter:Destroy()
  ENDIF
  RETURN(NIL)


procedure PrintBitMap( oPrn, cBitFile )
  LOCAL oBMP

  IF EMPTY( cBitFile )
    *
  ELSEIF !FILE( cBitFile )
    Alert( cBitFile + ' not found ' )
  ELSE
    oBMP:= Win32BMP():new()
    IF oBmp:loadFile( cBitFile )

      oBmp:Draw( oPrn,  { 200,200, 2000, 1500 } )

      // Note: Can also use this method to print bitmap
      //   oBmp:Rect:= { 200,2000, 2000, 1500 }
      //   oPrn:DrawBitMap( oBmp )

    ENDIF
    oBMP:Destroy()
  ENDIF
  RETURN


como imprimir com xharbour

Enviado: 03 Jun 2015 15:14
por microvolution
olá Gente!

Como vocês, também sou um clippeiro apaixonado. Acontece que depois que consegui migrar para HMG 3.0.35, percebi que se não estiver uma impressora LPT1 conectada não é possível usar o DOSPRN (ou DOS2USB que algumas pessoas usam), pois o sistema percebe que não tem nada ligado na LPT1 então a impressão não é liberada. Uso a função ISPRINTER() pra fazer essa verificação.

Então, preciso de algo prático para fazer essa migração também, pois os exemplos do Itamar que peguei no tópico https://pctoledo.org/forum/viewto ... 956#p96956 não rodaram e deram erro PRINTFILERAW (duplicidade nas libs HBWIN LIBHMG).

Enfim, se não conseguir fazer isso funcionar,como já programa um pouco em DELPHI 7 e estou aprendendo DELPHI XE3 sairei definitivamente do clipper/harbour, pois além desse problema aqui relatado, encontro também a dificuldade de migração de CONSOLE para GRÁFICO pois temos que mudar os códigos originais em muito e não temos uma IDE de fácil manuseio.

Só não fiz ainda, pois encontrei outro problema que está impedindo isso:
- Meus aplicativos estão usando DBF/NTX e não DBF/CDX. Um amigo aqui da "internet" me mandou uns exemplos de como migrar de DBF/NTX para DBF/CDX e achei bem interessante, mas, é muito complexo e terei que fazer as mudanças nos códigos originais e isso é muito complexo(como disse).
- Outra opção seria instalar um componente que lesse DBF/NTX no DELPHI, mas, isso não deu certo. Testei um montão de componentes tDBF (é um deles) mas, nada.

Então, alguém aqui, tem alguma coisa prática para imprimir no clipper/harbour?
OBS:
1 - lembrando que uso a HMG 3.0.35 e estou aprendendo a 3.0.46
2 - tem que ser algo semelhante e de fácil compreensão ao que já usamos (SET DEVICE TO PRINTER / SET PRINTER TO LPT1).
3 - eliminar os aplicativos externos como DOS2USB, DOSPRN, PRINTFIL, etc...

Vlw professores.

Enfim,
agradeço à sua atenção!

como imprimir com xharbour

Enviado: 03 Jun 2015 16:57
por Kapiaba
Vamos por partes,

Código: Selecionar todos

cPorta := PrnGetPort()

cPrinter := PrinterPortToName( cPorta )

if empty(cPrinter)

   cPrinter := PrinterPortToName( "USB002" )

   if empty(cPrinter)

      cPrinter := PrinterPortToName( "USB001" )

   endif

endif
 

Grave seu texto em MINUTA.TXT ou a gosto.


PrintFileRaw( cPrinter, TrueName("MINUTA.TXT"), "Impressão de Vendas" )

como imprimir com xharbour

Enviado: 03 Jun 2015 17:03
por Kapiaba
Passar a .CDX sem segredos:

Código: Selecionar todos

ANNOUNCE RDDSYS
REQUEST DBFCDX, DBFFPT

REQUEST OrdKeyNo, OrdKeyCount, OrdCreate, OrdKeyGoto

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850

FUNCTION Main()

    RDDSETDEFAULT( "DBFCDX" )
    SET CENTURY ON
    SET DATE BRITISH
    SET EPOCH TO YEAR( DATE() ) - 30
    SET SOFTSEEK OFF
    SET WRAP ON
    SETCANCEL( .F. )
    SET CONFIRM OFF
    SET DELETED ON
    SET ESCAPE ON
    SET EXCLUSIVE OFF
    SET MULTIPLE OFF

    HB_LANGSELECT("PT")
    HB_SETCODEPAGE( "PT850" )

LIBS a Incorporar:

Código: Selecionar todos

\xHarbour\lib\rtl.lib +
\xHarbour\lib\vm.lib +
\xHarbour\lib\ct.lib +
\xHarbour\lib\gtgui.lib +
\xHarbour\lib\lang.lib +
\xHarbour\lib\macro.lib +
\xHarbour\lib\rdd.lib +
\xHarbour\lib\dbfntx.lib +
\xHarbour\lib\dbfcdx.lib +
\xHarbour\lib\dbffpt.lib +
\xHarbour\lib\hbsix.lib +
\xHarbour\lib\Debug.lib +
\xHarbour\lib\common.lib +
\xHarbour\lib\pp.lib +
\xHarbour\lib\HbComm.lib +
\xHarbour\lib\pcrepos.lib +
\xHarbour\lib\codepage.Lib +
\xHarbour\lib\cw32.lib +
\xHarbour\lib\HbZip.lib +
\xHarbour\lib\ZLib.lib +
\xHarbour\lib\Tip.lib +
\Borland\Bcc55\lib\cw32.lib +
\Borland\Bcc55\lib\import32.lib +
\Borland\Bcc55\lib\uuid.lib +
\Borland\Bcc55\lib\psdk\odbc32.lib +
\Borland\Bcc55\lib\psdk\rasapi32.lib +
\Borland\Bcc55\lib\psdk\nddeapi.lib +
\Borland\Bcc55\lib\psdk\msimg32.lib +
\Borland\Bcc55\lib\psdk\psapi.lib   +
\Borland\Bcc55\lib\psdk\Shell32.lib +
\Borland\Bcc55\lib\psdk\iphlpapi.lib

como imprimir com xharbour

Enviado: 03 Jun 2015 17:27
por microvolution
Kapiaba escreveu:Vamos por partes,

Código: Selecionar todos

cPorta := PrnGetPort()

cPrinter := PrinterPortToName( cPorta )

if empty(cPrinter)

   cPrinter := PrinterPortToName( "USB002" )

   if empty(cPrinter)

      cPrinter := PrinterPortToName( "USB001" )

   endif

endif
 

Grave seu texto em MINUTA.TXT ou a gosto.


PrintFileRaw( cPrinter, TrueName("MINUTA.TXT"), "Impressão de Vendas" )
Prezado professor, infelizmente deu a seguinte tela de erro:

Código: Selecionar todos

Harbour 3.2.0dev (Rev. 18443)
Copyright (c) 1999-2012, http://harbour-project.org/
C:\MVinfo\hb32\migrar\SiCCOSV\SiCCOSV.343\sci10000\pci10000.prg: In function 'HB_FUN_HB_GETIMAGESIZE':
C:\MVinfo\hb32\migrar\SiCCOSV\SiCCOSV.343\sci10000\pci10000.prg:3028:4: warning: implicit declaration of function 'GetImageSize' [-Wimplicit-function-declaration]
C:/MVinfo/hmg.3.0.46/hmg.3.0.46/harbour/lib/win/mingw/libxhb.a(xhbprn.o):xhbprn.c:(.text+0x10): multiple definition of `HB_FUN_GETDEFAULTPRINTER'
C:/MVinfo/hmg.3.0.46/hmg.3.0.46/lib/libhmg.a(c_controlmisc.o):c_controlmisc.c:(.text+0x2be0): first defined here
C:/Users/wal/AppData/Local/Temp/hbmk_ahurnf.dir/pci10043.o:pci10043.c:(.data+0x1758): undefined reference to `HB_FUN_PRNGETPORT'
collect2: ld returned 1 exit status
hbmk2: Erro: Executando linkeditor. 1
gcc.exe C:/Users/wal/AppData/Local/Temp/hbmk_ahurnf.dir/pci10000.o C:/Users/wal/AppData/Local/Temp/hbmk_ahurnf.dir/dci10000.o C:/Users/wal/AppData/Local/Temp/hbmk_ahurnf.dir/dci10001.o C:/Users/wal/AppData/Local/Temp/hbmk_ahurnf.dir/dci10002.o C:/Users/wal/AppData/Local/Temp/hbmk_ahurnf.dir/enviarerro.o C:/Users/wal/AppData/Local/Temp/hbmk_ahurnf.dir/ext.o C:/Users/wal/AppData/Local/Temp/hbmk_ahurnf.dir/impresso.o C:/Users/wal/AppData/Local/Temp/hbmk_ahurnf.dir/pci10001.o C:/Users/wal/AppData/Local/Temp/hbmk_ahurnf.dir/pci10002.o C:/Users/wal/AppData/Local/Temp/hbmk_ahurnf.dir/pci10003.o C:/Users/wal/AppData/Local/Temp/hbmk_ahurnf.dir/pci10004.o C:/Users/wal/AppData/Local/Temp/hbmk_ahurnf.dir/pci10005.o C:/Users/wal/AppData/Local/Temp/hbmk_ahurnf.dir/pci10006.o C:/Users/wal/AppData/Local/Temp/hbmk_ahurnf.dir/pci10007.o C:/Users/wal/AppData/Local/Temp/hbmk_ahurnf.dir/pci10008.o C:/Users/wal/AppData/Local/Temp/hbmk_ahurnf.dir/pci10009.o C:/Users/wal/AppData/Local/Temp/hbmk_
(...)
Coloquei os seus códigos nos seguintes métodos:

Código: Selecionar todos

      if .not. isprinter ()
         cPorta := PrnGetPort()
         cPrinter := PrinterPortToName( cPorta )
         if empty(cPrinter)
            cPrinter := PrinterPortToName( "USB002" )
               if empty(cPrinter)
                  cPrinter := PrinterPortToName( "USB001" )
               endif
         endif
         // Grave seu texto em MINUTA.TXT ou a gosto.
         PrintFileRaw( cPrinter, TrueName("PCI10043"), "Impressão de OSV " )
      else
         do while (lastkey () <> K_ESC .and. .not. isprinter ())
            // if .not. CONFIRMA ('A impressora est  pronta')
            if .not. CONFIRMA ('A impressora está pronta','SiCCoSV - Problema de Comunicação com a(s) Impressora(s)')
                * Abandona o programa
                keyboard chr (K_ESC)
                inkey ()
                exit
            endif
         enddo
      endif

O que pode estar errado? lembrando que uso a HMG 3.0.35 e 3.0.46 (experimentando).
vlw

como imprimir com xharbour

Enviado: 03 Jun 2015 17:40
por Itamar M. Lins Jr.
Putz! que mangue!
Vc está usando Mingw, o Kapiaba passou libs do BCC...

Saudações,
Itamar M. Lins Jr.

Passar a .CDX sem segredos

Enviado: 05 Jun 2015 10:08
por microvolution
Kapiaba escreveu:Passar a .CDX sem segredos:

Código: Selecionar todos

ANNOUNCE RDDSYS
REQUEST DBFCDX, DBFFPT

REQUEST OrdKeyNo, OrdKeyCount, OrdCreate, OrdKeyGoto

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850

FUNCTION Main()

    RDDSETDEFAULT( "DBFCDX" )
    SET CENTURY ON
    SET DATE BRITISH
    SET EPOCH TO YEAR( DATE() ) - 30
    SET SOFTSEEK OFF
    SET WRAP ON
    SETCANCEL( .F. )
    SET CONFIRM OFF
    SET DELETED ON
    SET ESCAPE ON
    SET EXCLUSIVE OFF
    SET MULTIPLE OFF

    HB_LANGSELECT("PT")
    HB_SETCODEPAGE( "PT850" )

LIBS a Incorporar:

Código: Selecionar todos

\xHarbour\lib\rtl.lib +
\xHarbour\lib\vm.lib +
\xHarbour\lib\ct.lib +
\xHarbour\lib\gtgui.lib +
\xHarbour\lib\lang.lib +
\xHarbour\lib\macro.lib +
\xHarbour\lib\rdd.lib +
\xHarbour\lib\dbfntx.lib +
\xHarbour\lib\dbfcdx.lib +
\xHarbour\lib\dbffpt.lib +
\xHarbour\lib\hbsix.lib +
\xHarbour\lib\Debug.lib +
\xHarbour\lib\common.lib +
\xHarbour\lib\pp.lib +
\xHarbour\lib\HbComm.lib +
\xHarbour\lib\pcrepos.lib +
\xHarbour\lib\codepage.Lib +
\xHarbour\lib\cw32.lib +
\xHarbour\lib\HbZip.lib +
\xHarbour\lib\ZLib.lib +
\xHarbour\lib\Tip.lib +
\Borland\Bcc55\lib\cw32.lib +
\Borland\Bcc55\lib\import32.lib +
\Borland\Bcc55\lib\uuid.lib +
\Borland\Bcc55\lib\psdk\odbc32.lib +
\Borland\Bcc55\lib\psdk\rasapi32.lib +
\Borland\Bcc55\lib\psdk\nddeapi.lib +
\Borland\Bcc55\lib\psdk\msimg32.lib +
\Borland\Bcc55\lib\psdk\psapi.lib   +
\Borland\Bcc55\lib\psdk\Shell32.lib +
\Borland\Bcc55\lib\psdk\iphlpapi.lib
Prezado professor "kapiaba", bom dia!

Esse assunto também me interessou muito, mas, apesar de não ser o tópico aqui mencionado, no meu caso, mudei até o títulopara que os "moderadores" tomem as providências necessárias quanto à mudança dele de lugar (se acharem necessário).

Então, já que V.Sa. intitulou "passar a .CDX sem segredos", pra mim tem muita informação secreta (por trás das entrelinhas) que não entendo.

Atualmente, meus arquivos DBFNTX funcionam mais ou menos assim:
dbf clientes, abre uns 8 NTX para pesquisar por nome, cpf, endereço, rua, pai, mãe, esposa, etc.. etc...
então são abertos o DBF e seus 8 NTX.

Por isso, digo, que está muito difícil compreender suas linhas. Não quero apenas CTRL+C/V, quero - apesar do tempo estar avançado pra mim, quero aprender e compreender as linhas para que em todos os módulos do meu aplicativo eu faça as alterações de forma compreensiva.

Portanto, explicite "por favor" cada linha do seu código postado para que eu melhor compreenda esse novo universo HARBOUR/HMG/etc...
aguardo suas considerações!