Boa noite, eu passei por isso ai descobri que a etiqueta tem uma rotina específica para impressão, diferente da opcoes_rhb , presente na gasp40hb, então fiz o seguinte criei uma copia da opcoes_rbh como opcoes_ehb com o seguinte código:
Código: Selecionar todos
******[LAURO DE OLIVEIRA]*************************************************
FUNC OPCOES_EHB(l_m,c_m,linmin_,colmin_,sos_cod,fil_ini)
LOCAL li_, tpx, i_, op_x:=1, ant_, cr_i, or_i, t_opc:=SAVESCREEN(0,0,MAXROW(),79)
LOCAL aPrinters := WIN_PRINTERLIST()
IF Empty( aPrinters )
ALERTA(4)
DBOX("Nenhuma impressora Instalada!",,,,,"ATEN€ŽO, "+usuario)
RETU .F.
ENDIF
for i=1 to len(aPrinters)
IF aPrinters[i] == WIN_PRINTERGETDEFAULT()
//drvprn:=i comentado para deixar sempre a ultima impressora que escolhe igual ao anterior
exit
ENDIF
next
nucop=1
or_i=cpord // salva ordenacao inicial
fil_ini=IF(fil_ini=NIL,"",fil_ini)
ant_=STR(qtlin_)+STR(qtcol_)+; // salva situacao atual da etiqueta
STR(qtcse_)+STR(qtcar_)+qtreg_
DO WHIL op_x>0
cod_sos=sos_cod
msg="Prosseguir|Sa¡da: " // monta menu de opcoes
IF tps=1 .AND. !EMPTY(drvporta) // se a saida e para prn
msg+=aPrinters[drvprn]
ELSE // caso contrario
msg+="Arquivo" // coloca a palavra "Arquivo"
ENDI
msg+="|Filtrar|Ordenar"+;
"|C¢pia(s). ("+TRAN(nucop ,"999")+")"+;
"|Altura... ("+TRAN(qtlin_,"99")+")"+;
"|Largura.. ("+TRAN(qtcol_,"999")+")"+;
"|Separa‡„o ("+TRAN(qtcse_,"99")+")"+;
"|Carreiras ("+TRAN(qtcar_,"99")+")"+;
"|Qtde/Reg. ("
msg+=IF(LEN(qtreg_)>30,LEFT(qtreg_,20)+"...",qtreg_)+" )"
RESTSCR(0,0,MAXROW(),79,t_opc)
op_x=DBOX(msg,l_m,c_m,E_MENU,NAO_APAGA,,,,op_x)
DO CASE
CASE op_x=1 // prossegue...
IF tps=1 // vai para impressora.....
drvporta:=drvdbf+"TMP"+ide_maq
ENDI
IF LEN(fil_ini)>0 // se tem filtro inicial
IF LEN(criterio)>0 // vamos concatenar com filtro feito pelo usuario
criterio=fil_ini+".AND. ("+criterio+")"
ELSE
criterio=fil_ini // usuario nao fez filtro. Pega o inicial...
ENDI
ENDI
INDTMP() // verifica/indexa o arquivo se for necessario
EXIT
CASE op_x=2 // tipo de saida
tps=TP_SAIDA(IF(l_m=NIL,NIL,l_m+2),IF(c_m=NIL,NIL,c_m+8),.t.)
CASE op_x=3 // pega criterio de selecao dos registro
FILTRA(.f.) // parametro .f. = nao indexa ao final da selecao
CASE op_x=4 // escolhe uma nova ordem
cpord=or_i // inicializa ordenacao
CLASS(.f.)
CASE op_x=5 // numero de copias
nucop=DBOX("(de 1 a 999)",IF(l_m=NIL,NIL,l_m+2),IF(c_m=NIL,NIL,c_m+8),,,"QUANTIDADE DE C¢PIAS",nucop,"999")
nucop=IF(nucop<1.OR.LASTKEY()=K_ESC,1,nucop)
CASE op_x=6 // modifica numero de linhas
i_=DBOX("(de"+TRAN(linmin_,"99")+" a 66 linhas)",IF(l_m=NIL,NIL,l_m+2),IF(c_m=NIL,NIL,c_m+8),,,"ALTURA DA ETIQUETA",qtlin_,"99")
IF i_>=linmin_.AND.i_<=66.AND.LASTKEY()!=K_ESC
qtlin_=i_
ENDI
CASE op_x=7 // modifica largura da etiqueta
i_=DBOX("(de"+TRAN(colmin_,"999")+" a 254 caracteres)",IF(l_m=NIL,NIL,l_m+2),IF(c_m=NIL,NIL,c_m+8),,,"LARGURA DA ETIQUETA",qtcol_,"999")
IF i_>=colmin_.AND.i_<=254.AND.LASTKEY()!=K_ESC
qtcol_=i_
ENDI
CASE op_x=8 // separacao entre carreiras
i_=DBOX("(de 1 a 99 caracteres)",IF(l_m=NIL,NIL,l_m+2),IF(c_m=NIL,NIL,c_m+8),,,"SEPARA€ŽO ENTRE AS CARREIRAS",qtcse_,"99")
IF i_>=1.AND.LASTKEY()!=K_ESC
qtcse_=i_
ENDI
CASE op_x=9 // num de carreiras do formulario
i_=DBOX("(de 1 a 30)",IF(l_m=NIL,NIL,l_m+2),IF(c_m=NIL,NIL,c_m+8),,,"CARREIRAS DO FORMULRIO",qtcar_,"99")
IF i_>=1.AND.i_<=30.AND.LASTKEY()!=K_ESC
qtcar_=i_
ENDI
CASE op_x=10 // numero de qtde por registro
tpx=qtreg_
DO WHILE .t.
cod_sos=59
SET KEY K_F10 TO ve_campos// F10 monta menu de campos
tpx=DBOX("F10=Campos do arquivo",IF(l_m=NIL,NIL,l_m+2),IF(c_m=NIL,NIL,c_m+8),,,"QTDE POR REGISTRO",PADR(tpx,100),"@S40")
SET KEY K_F10 TO
IF LASTKEY()=K_ESC // cancelou
EXIT
ENDI
tpx=ALLTRIM(tpx) // retira brancos do expressao
i_=TYPE(tpx) // se a expressao=indeterminada
IF i_="UI" // existe funcao fora da clipper.lib na
i_=VALTYPE(&tpx.) // expressao, logo avalia o seu
ENDI // conteudo
IF i_="N" // se o tipo da expressao for
qtreg_=tpx // numerico, entao segue em frente
EXIT
ENDI // expressao e' ilegal avisa
ALERTA(3) // e recebe outra expressao
DBOX("EXPRESSŽO ILEGAL",15)
ENDD
ENDC
ENDD
IF ant_!=STR(qtlin_)+; // se alterou parametros da etiqueta
STR(qtcol_)+STR(qtcse_)+; // entao grava na variavel de memoria
STR(qtcar_)+qtreg_ // monta nome da variavel a publicar
vr_memo="drv"+; // com "drv" + as ultima 7 letras do
RIGHT(PROCNAME(1),7) // nome do prg da etiqueta
i_=TRAN(qtlin_,"999")+; // prepara parametros da etiqueta
TRAN(qtcol_,"999")+; // para serem gravados
TRAN(qtcse_,"999")+;
TRAN(qtcar_,"999")+qtreg_
PUBL &vr_memo.:=i_ // publica/inicializa variavel
SAVE TO (arqconf) ALL LIKE drv*
REST FROM (arqconf) ADDI // grava/restaura variaveis
ENDI // restaura a tela
RESTSCR(0,0,MAXROW(),79,t_opc)
RETU(op_x=1) // retorna .t. se quiser prosseguir
******[PCToledo]****************************************************
FUNC OPCOES_RHB(l_m,c_m,op_rel,sos_cod,fil_ini)
LOCAL li_, op_x, ant_, cr_i, or_i, t_opc:=SAVESCREEN(0,0,MAXROW(),79)
LOCAL aPrinters := WIN_PRINTERLIST()
IF Empty( aPrinters )
ALERTA(4)
DBOX("Nenhuma impressora Instalada!",,,,,"ATEN€ŽO, "+usuario)
RETU .F.
ENDIF
for i=1 to len(aPrinters)
IF aPrinters[i] == WIN_PRINTERGETDEFAULT()
//drvprn:=i comentado para deixar sempre a ultima impressora que escolhe igual ao anterior
exit
ENDIF
next
op_x=LRELA(l_m,c_m,op_rel) // verifica/seleciona relatorios gravados
IF op_x=2 // leu um relatorio gravado anteriormente
improk=.t.
IF tps=1 // vai para impressora...
improk=PREPIMP() // confima preparacao da impressora
ENDI
IF !improk // cancelou
op_x=0
ELSE
INDTMP() // verifica/indexa o arquivo se for necessario
ENDI
RETU .t. // retorna
ENDI
fil_ini=IF(fil_ini=NIL,"",fil_ini)
nucop=1
or_i=cpord // salva ordenacao inicial
ant_=criterio+cpord+titrel // salva criterio, ordenacao e titulo atuais
DO WHIL op_x>0
cod_sos=sos_cod
msg="Prosseguir|Sa¡da: " // monta menu de opcoes
IF tps=1 .AND. !EMPTY(drvporta) // se a saida e para prn
msg+=aPrinters[drvprn] // pega conf atual
ELSE // caso contrario
msg+="Arquivo/Video" // coloca a palavra "Arquivo/Video"
ENDI
msg+="|Filtrar|C¢pia(s) ("+TRAN(nucop,"99")+")"+;
"|Ordenar|T¡tulo"
IF !EMPTY(titrel) // se tem titulo coloca-o no menu
msg+=": "+IF(LEN(titrel)>30,LEFT(titrel,30)+"...",titrel)
ENDI
cr_i=criterio+cpord+titrel // se tem alteracao, liga
gr_rela=(ant_!=cr_i) // flag de gravacao de relatorio
RESTSCREEN(0,0,MAXROW(),79,t_opc)
op_x=DBOX(msg,l_m,c_m,.t.,.f.,,,,op_x)
DO CASE
CASE op_x=1 // prossegue...
IF tps=1 // vai para impressora.....
drvporta:=drvdbf+"TMP"+ide_maq
ENDI
IF LEN(fil_ini)>0 // se tem filtro inicial
IF LEN(criterio)>0 // vamos concatenar com filtro feito pelo usuario
criterio=fil_ini+".AND. ("+criterio+")"
ELSE
criterio=fil_ini // usuario nao fez filtro. Pega o inicial...
ENDI
ENDI
INDTMP() // verifica/indexa o arquivo se for necessario
EXIT
CASE op_x=2 // tipo de saida
tps=TP_SAIDAHB(IF(l_m=NIL,NIL,l_m+2),IF(c_m=NIL,NIL,c_m+8),.t.,aPrinters)
CASE op_x=3 // pega criterio de selecao dos registro
FILTRA(.f.) // parametro .f. = nao indexa ao final da selecao
CASE op_x=4 // numero de copias a emitir
nucop=DBOX("(de 1 a 99)",IF(l_m=NIL,NIL,l_m+2),IF(c_m=NIL,NIL,c_m+8),,,"QUANTIDADE DE C¢PIAS",nucop,"99")
nucop=IF(nucop<1.OR.LASTKEY()=K_ESC,1,nucop)
CASE op_x=5 // escolhe uma nova ordem
cpord=or_i // inicializa ordenacao
CLASS(.f.)
CASE op_x=6 // recebe um titulo para o sistema
msg="Informe, se Desejar:"
titrel=LEFT(titrel+SPAC(70),70)
titrel=ALLTRIM(DBOX(msg,,,,,"T¡TULO DO RELAT¢RIO",titrel))
RESTSCREEN(0,0,MAXROW(),79,t_opc)
ENDC
ENDD // restaura a tela
RESTSCREEN(0,0,MAXROW(),79,t_opc)
RETU(op_x=1) // retorna .t. se quiser prosseguir
nos relatórios da etiqueta também é preciso fazer a seguinte alteração , para não ter que alterar manualmente todos já que pode haver muitas etiquetas inclui os seguintes códigos no gas4harbour.prg
inclui esse comando para trocar a opcoes_etq pela que foi listada acima com o seguinte código: