Página 1 de 1

Iniciante em xHarbour pede ajuda

Enviado: 10 Mar 2008 15:51
por locio
Contratei um colega para fazer a conversão do meu programa do Clipper para o xharbour. Ficaram algumas pendências e eu não estou conseguindo resolver com o colega. Se alguem poder me ajudar eu agradeço.

Alguns problemas:

A rotina de impressão de tamanho > 80 quando retorna para o programa principal diminue o tamanho da janela. Tem algum comando que eu possa dar para retornar o tamanho para o padrão;

Será que existe algum Manual de Programação para xHarbour que eu possa acessar.

Eu queria aprender a fazer um formulario para inclusão/alteração de dados utilizando botões.

Se alguem puder me dá uma luz eu agradeço.

Estou de mãos atadas.

Enviado: 10 Mar 2008 15:59
por sygecom
Post as rotinas com problema ! e explique melhor onde e como esta acontecendo o problema !

Iniciante em xHarbour pede ajuda

Enviado: 10 Mar 2008 16:43
por locio
Segue o fonte do programa:

//
// FUNCAO QUE PREPARA A IMPRESSAO EM TELA
//

ImpressoraOK()

SELE EMPRESAS
WCGCCEI = 'CNPJ:'
WEMPTPINS = STR(EMPTINS,1)
DO CGCCEI77B WITH WEMPTPINS, WCGCCEI

NPAG = 0

LL = 70

SELE FPEMPREG
SET ORDER TO 1

SEEK CODEMPRESA

DO WHILE !EOF() .AND. EMEMPR = CODEMPRESA

IF SUBSTR(WINI,1,1) <> SPACE(1)
WDTADMS = DTOS(EMDTADMS)
WDTADMS = SUBSTR(WDTADMS,1,6)
IF !(WDTADMS >= WINI .AND. WDTADMS <= WFIM)
sele fpempreg
SKIP
LOOP
ENDIF
ENDIF

IF wop1 = 'S' .OR. (wop1 = 'N' .AND. EMSITC < '70')

SELE FPEMPREG

DO CAB19D1
LL = LL + 1
@ LL,01 SAY 'MATRICULA: '
@ LL,12 SAY EMMATR PICT '999999'
@ LL,20 SAY 'NOME: ' + EMNOME
@ LL,75 SAY 'SITUACAO: ' + EMSITC + '-' + TRADUZ_TAB('05',EMSITC)
LL = LL + 1
SELE FPEMPREG
@ LL,01 SAY 'SEXO: ' + EMSEXO
@ LL,10 SAY 'EST.CIVIL: ' + EMCIVIL + '-' + TRADUZ_TAB('12',EMCIVIL)
SELE FPEMPREG
@ LL,50 SAY 'GRAU INSTR.: ' + EMGRINS + '-' + TRADUZ_TAB('13',EMGRINS)
SELE FPEMPREG
@ LL,90 SAY 'SANGUE: ' + EMSANGUE
LL = LL + 1
@ LL,01 SAY 'DATA NASC.: ' + DTOC(EMDTNASC)
@ LL,25 SAY 'DATA ADM.: ' + DTOC(EMDTADMS)
@ LL,50 SAY 'DATA RESC.: ' + DTOC(EMDTRESC)
@ LL,75 SAY 'HRS TRAB.: ' + EMHRSTRB
SELE FPEMPREG
@ LL,95 SAY 'MODO PAGTO: ' + TRIM(EMMODPAG) + '-' + TRADUZ_TAB ('25',EMMODPAG)
LL = LL + 1
SELE FPEMPREG
@ LL,01 SAY 'DEPEND.: IR ' + STR(EMDEPIR,2) + ' SF ' + STR(EMDEPSF,2)
@ LL,26 SAY '%INSAL.: ' + STR(EMINSAL,2)
@ LL,40 SAY '%PERIC.: ' + STR(EMPERIC,2)
@ LL,55 SAY 'SINDIC.: ' + TRIM(EMSIND) + '-' + TRADUZ_TAB('22',EMSIND)
SELE FPEMPREG
@ LL,85 SAY 'VALE TRANSP.: ' + EMVALE
@ LL,105 SAY 'TRAB.SAB.: ' + EMSAB
LL = LL + 1
@ LL,01 SAY 'BCO/AGEN: '
@ LL,11 SAY EMBCO PICT '999/99999'
@ LL,21 SAY 'CONTA: ' + EMCONTA
@ LL,50 SAY 'FGTS-BCO/AGEN: '
@ LL,65 SAY EMFGTSBCO PICT '999/99999'
@ LL,75 SAY 'CONTA: ' + EMFGTSCTA
@ LL,94 SAY 'DEPTO: ' + TRIM(EMDEPTO) + '-' + TRADUZ_TAB('18',EMDEPTO)
SELE FPEMPREG
LL = LL + 1
@ LL,01 SAY 'FUNCAO: ' + EMFUNCAO + '-' + TRADUZ_TAB('23',EMFUNCAO)
SELE FPEMPREG
@ LL,45 SAY 'CBO: ' + EMCBO + '-' + TRADUZ_TAB('21',EMCBO)
SELE FPEMPREG
@ LL,85 SAY 'CPF: '
@ LL,90 SAY EMCPF PICT '@ZE 999,999,999/99'
@ LL,108 SAY 'PIS/PASEP: '
@ LL,119 SAY EMPIS

LL = LL + 1
@ LL,01 SAY 'IDENT.: '
@ LL,09 SAY EMID
@ LL,21 SAY 'ORG.: ' + EMIDEXP
@ LL,31 SAY 'UF: ' + EMIDUF
@ LL,38 SAY 'DT.EMIS.: ' + DTOC(EMIDDAT)
@ LL,58 SAY 'CART.PROF.: '
@ LL,70 SAY EMCP
@ LL,78 SAY 'SERIE: '
@ LL,85 SAY EMCPSER
@ LL,90 SAY 'UF: ' + EMCPUF
@ LL,98 SAY 'VINC.: ' + TRIM(EMVINC) + '-' + TRADUZ_TAB('07',EMVINC)

SELE FPEMPREG
LL = LL + 1
@ LL,01 SAY 'PONTO: '
@ LL,08 SAY EMPONTO
@ LL,15 SAY 'GRAT.TEMPO SERV.(%): '
@ LL,36 SAY EMANOS
@ LL,40 SAY 'SALARIO: '
@ LL,49 SAY EMSALARIO PICT '@ZE 99,999.99'
@ LL,60 SAY 'SALARIO SEMANAL: '
@ LL,78 SAY EMSALSEM PICT '@ZE 99,999.99'
@ LL,90 SAY 'HORARIO TRAB.: ' + EMENTRADA + ' ' + EMINTERSAI + ' ' + EMINTERENT + ' ' + EMSAIDA + ' ' + EMREPSEM

LL = LL + 1
@ LL,01 SAY 'ENDERECO: ' + EMENDER + ' ' + embairro + ' ' + EMCIDADE +;
' CEP: ' + STR(EMCEP,8)
@ LL,98 SAY 'NAC.: ' + EMNAC + '-' + TRADUZ_TAB('20',EMNAC)
SELE FPEMPREG
@ LL,118 SAY 'ANO CHEG.: '
@ LL,128 SAY EMANOCHEG

LL = LL + 1
@ LL,01 SAY 'TIPO ADM.: ' + TRIM(EMTPADMS) + '-' + TRADUZ_TAB('30',EMTPADMS)
SELE FPEMPREG
@ LL,60 SAY 'MAE: ' + EMPMAE

LL = LL + 1
@ LL,00 SAY REPL ('-',132)
ENDIF

SELE FPEMPREG
SKIP

ENDDO

EJECT
//
// FUNCAO PARA APRESENTAR O RELATORIO NA TELA
//
SAIREL('CADASTRO COMPLETO DOS EMPREGADOS ', 133)

SET DEVICE TO SCREEN
MENS(COR3,'EMISSAO DE RELATORIO ENCERRADA')

RETURN

PROCEDURE CAB19D1

IF LL > 48
NPAG = NPAG + 1
@ 01,00 SAY TRIM(EMPRESA)
@ 01,45 SAY 'CADASTRO COMPLETO DOS EMPREGADOS '
// @ 01,45 SAY 'CADASTRO COMPLETO DOS EMPREGADOS '
@ 01,123 SAY 'PG.:'
@ 01,127 SAY NPAG PICT '9999'
@ 02,00 SAY WCGCCEI + CGC
@ 02,123 SAY DATE()
@ 03,00 SAY REPL ('-',132)
LL = 03
ENDIF


***********************
FUNCTION IMPRESSORAOK()
***********************
public _nomerel, _linhas, _pagina, _tamrel

_nomerel := fGeraNomeArq()
_linhas := 0
_pagina := 1

set device to printer
set printer on
set console off
set printer to ( _nomerel )
setprc(0,0)
RETURN NIL

******************************************
FUNCTION SAIREL( cTitulo, tamrel, lFinal )
******************************************
default lFinal to .T.

// if lFinal
// @ prow()+2, 0 say padc( " Fim normal do processamento ", tamrel, '=')
// endif
// @ prow()+1, 00 say ""
eject
set printer off
set printer to
set device to screen
set console on
ShowRel( cTitulo, _nomerel, tamrel )
RETURN NIL


*****************************************
FUNCTION ShowRel( cTitulo, cArq, tamrel )
*****************************************
local cOPENFILE := cArq, lUNIPAG := .F.
local cCor := setcolor(), nCursor := setcursor(), lMudouFonte := .F.

private nWIN, nPG, nLASTPG, cTEXTO := space(30), nLPT := 1
private aFONTIMP := {"Lucida Console", 9, 0, 0, 0 }

_tamrel := tamrel

if at(".",cOPENFILE) == 0
cOPENFILE += ".PRN"
endif

cIMPFILE := cOPENFILE
cIMPTITLE := cTITULO

if !file( cImpFile )
fAlerta("Problemas com a impressao do relatorio")
return NIL
endif

if tamrel > 80 .and. len(aFONTIMP) > 0
WVW_SetFont(,aFONTIMP[1],aFONTIMP[2],aFONTIMP[3],aFONTIMP[4],aFONTIMP[5])
lMudouFonte := .T.
endif

wvw_setmaincoord(.F.)
SetInkeyAfterBlock({|nkey| fAfterInkeyPRN( nkey ) })

setcolor("0/N*")

nWIN := OpenWinRel( 0, 0, 25, 98, cTITULO )
wvw_centerwindow()
setmode(wvw_maxmaxrow()-1,wvw_maxmaxcol())
wvw_enablemaximize(nWIN, .T.)
wvw_maximize(nWIN)

wvw_tbcreate( nWIN, .F., NIL, 1)
wvw_tbAddButton( nWIN )
wvw_tbAddButton( nWIN )
wvw_tbAddButton( nWIN, IDM_PRINT , 14 , "Imprimir (I)" , 1 )
wvw_tbAddButton( nWIN, IDM_FONTPRINT , IMG_FONTE , "Alterar Fonte", 0, .T. )
wvw_tbAddButton( nWIN )
wvw_tbAddButton( nWIN, IDM_BACK , IMG_VOLTAR , "Voltar" , 1 )
wvw_tbAddButton( nWIN, IDM_FORWARD , IMG_AVANCAR , "Avancar", 1 )
wvw_tbAddButton( nWIN )
wvw_tbAddButton( nWIN, IDM_PROCURAR , IMG_PROCURAR , "Procurar (F)" , 0, .T. )
wvw_tbAddButton( nWIN, IDM_IRPARA , IMG_IRPARA , "Pagina (P)" , 0, .T. )
wvw_tbAddButton( nWIN )
wvw_tbAddButton( nWIN, IDM_SAIR , IMG_SAIR , "Sair" , 0, .T. )

//
// APRESENTAR TODOS OS system bitmaps possiveis
//
// wvw_tbAddButton( nWIN, 401, 0, "401", 1 )
// wvw_tbAddButton( nWIN, 402, 1, "402", 1 )
// wvw_tbAddButton( nWIN, 403, 2, "403", 1 )
// wvw_tbAddButton( nWIN, 404, 3, "404", 1 )
// wvw_tbAddButton( nWIN, 405, 4, "405", 1 )
// wvw_tbAddButton( nWIN, 406, 5, "406", 1 )
// wvw_tbAddButton( nWIN, 407, 6, "407", 1 )
// wvw_tbAddButton( nWIN, 408, 7, "408", 1 )
// wvw_tbAddButton( nWIN, 409, 8, "409", 1 )
// wvw_tbAddButton( nWIN, 410, 9, "410", 1 )
// wvw_tbAddButton( nWIN, 411, 10, "411", 1 )
// wvw_tbAddButton( nWIN, 412, 11, "412", 1 )
// wvw_tbAddButton( nWIN, 413, 12, "413", 1 )
// wvw_tbAddButton( nWIN, 414, 13, "414", 1 )
// wvw_tbAddButton( nWIN, 415, 14, "415", 1 )
// wvw_tbAddButton( nWIN, 416, 15, "416", 1 )
// wvw_tbAddButton( nWIN, 417, 16, "417", 1 )
// wvw_tbAddButton( nWIN, 418, 17, "418", 1 )
// wvw_tbAddButton( nWIN, 419, 18, "419", 1 )
// wvw_tbAddButton( nWIN, 420, 19, "420", 1 )
// wvw_tbAddButton( nWIN, 421, 20, "421", 1 )
// wvw_tbAddButton( nWIN, 422, 21, "422", 1 )
// wvw_tbAddButton( nWIN, 423, 22, "423", 1 )
// wvw_tbAddButton( nWIN, 424, 23, "424", 1 )
// wvw_tbAddButton( nWIN, 425, 24, "425", 1 )
// wvw_tbAddButton( nWIN, 426, 25, "426", 1 )
// wvw_tbAddButton( nWIN, 427, 26, "427", 1 )
// wvw_tbAddButton( nWIN, 428, 27, "428", 1 )
// wvw_tbAddButton( nWIN, 429, 28, "429", 1 )
// wvw_tbAddButton( nWIN, 430, 29, "430", 1 )
// wvw_tbAddButton( nWIN, 430, 29, "430", 1 )
// wvw_tbAddButton( nWIN, 431, 30, "431", 1 )
// wvw_tbAddButton( nWIN, 432, 31, "432", 1 )

WVW_SBcreate()
WVW_SBaddPart(nWin,space(10))

//
// CRIACAO DO ARQUIVO TEMPORARIO ( EM CADA ESTACAO DE TRABALHO )
//
fErase("PREVIEW.DBF")
if !file("PREVIEW.DBF")
dbcreate("PREVIEW.DBF", STRU_REL)
endif
if select("PREVIEW") > 0
select("PREVIEW")
else
use ("PREVIEW.DBF") exclusive new
endif

append from (cIMPFILE) sdf
dbGoTop()
nPG := 1
nLINHA := 0
preview->config := "I"
while !preview->(eof())
nLINHA++
if substr(preview->coluna1,1,1) == SALTO_PAGINA .and. !lUNIPAG
preview->config := "I"
nPG++
nLINHA := 0
preview->(dbSkip(-1))
preview->config := "F"
preview->(dbSkip())
endif
preview->pagina := nPG
preview->(dbSkip())
enddo
//
// ELIMINANDO ESPACO DO EJECT NO FINAL
//
preview->(dbGoBottom())
if preview->config == "I"
preview->(dbDelete())
nPG--
endif
//
// ACERTANDO O FINAL DA PAGINA
//
if lUNIPAG
preview->(dbGoBottom())
preview->config := "F"
endif

dbGoTop()
nLASTPG := nPG
nPG := 1
if lUNIPAG
set filter to preview->pagina == nPG .and. alltrim(preview->coluna1) # SALTO_PAGINA
endif

preview->(Imp_Video_PG( lUNIPAG ))

if select("PREVIEW") # 0
preview->(dbCloseArea())
endif
wvw_lCloseWindow()
SetInkeyAfterBlock({|nkey| fAfterInkey( nkey ) })
wvw_setmaincoord(.T.)
if lMudouFonte
WVW_SetFont(,'Ms Sans Serif', 16, 8 )
endif
RETURN NIL

Estas são as principais rotinas envolvidas no processo. O problema é: quando retorno da linha

SAIREL('CADASTRO COMPLETO DOS EMPREGADOS ', 133)

e retorno para o programa principal, a tela apresentada vem com um tamanho reduzido. Isso só ocorre quando o tamanho do relatório é maior que 80.

Atenciosamente,

Enviado: 10 Mar 2008 17:01
por sygecom
Edite seu post e coloque o codigo dentro de [ CODE ] , fica mais facil para poder lhe ajudar

Enviado: 11 Mar 2008 10:07
por locio
Caro Sygecom,

Desculpe-me mais não sei como fazer o que vc me pede:

"Edite seu post e coloque o codigo dentro de [ CODE ]"

Dois termos não me são familiar: POST e colocar dentro de [ code].

Lamento, se vc tiver como me explicar terei prazer em faze-lo. Já que é do meu total interesse.

Caso vc queira me contactar para melhor esclarecer, meu msn é locio2y@hotmail.com

Obrigado e desculpe a minha ignorância.

Atenciosamente,

Enviado: 11 Mar 2008 10:57
por Luciano Bonfim
Caro Lócio,

sempre que for postar (enviar uma pergunta) um código dentro de uma mensagem faça assim:

Código: Selecionar todos


... aqui entra seu código 

Simples assim....

Iniciante em xHarbour pede ajuda

Enviado: 11 Mar 2008 11:22
por locio
Desculpem. Ainda não aprendí. Vou tentar doutra maneira.


Código:

Código: Selecionar todos


// 
// FUNCAO QUE PREPARA A IMPRESSAO EM TELA 
// 

ImpressoraOK() 

SELE EMPRESAS 

LL = 70 

SELE FPEMPREG 
SET ORDER TO 1 

SEEK CODEMPRESA 

DO WHILE !EOF() .AND. EMEMPR = CODEMPRESA 

SELE FPEMPREG 

LL = LL + 1 
@ LL,01 SAY 'MATRICULA: ' 
@ LL,12 SAY EMMATR PICT '999999' 
@ LL,20 SAY 'NOME: ' + EMNOME 

SELE FPEMPREG 
SKIP 

ENDDO 

EJECT 
// 
// FUNCAO PARA APRESENTAR O RELATORIO NA TELA 
// 
SAIREL('CADASTRO COMPLETO DOS EMPREGADOS ', 133) 

SET DEVICE TO SCREEN 
MENS(COR3,'EMISSAO DE RELATORIO ENCERRADA') 

RETURN 

*********************** 
FUNCTION IMPRESSORAOK() 
*********************** 
public _nomerel, _linhas, _pagina, _tamrel 

_nomerel := fGeraNomeArq() 
_linhas := 0 
_pagina := 1 

set device to printer 
set printer on 
set console off 
set printer to ( _nomerel ) 
setprc(0,0) 
RETURN NIL 

****************************************** 
FUNCTION SAIREL( cTitulo, tamrel, lFinal ) 
****************************************** 
default lFinal to .T. 

eject 
set printer off 
set printer to 
set device to screen 
set console on 
ShowRel( cTitulo, _nomerel, tamrel ) 
RETURN NIL 


***************************************** 
FUNCTION ShowRel( cTitulo, cArq, tamrel ) 
***************************************** 
local cOPENFILE := cArq, lUNIPAG := .F. 
local cCor := setcolor(), nCursor := setcursor(), lMudouFonte := .F. 

private nWIN, nPG, nLASTPG, cTEXTO := space(30), nLPT := 1 
private aFONTIMP := {"Lucida Console", 9, 0, 0, 0 } 

_tamrel := tamrel 

if at(".",cOPENFILE) == 0 
cOPENFILE += ".PRN" 
endif 

cIMPFILE := cOPENFILE 
cIMPTITLE := cTITULO 

if !file( cImpFile ) 
fAlerta("Problemas com a impressao do relatorio") 
return NIL 
endif 

if tamrel > 80 .and. len(aFONTIMP) > 0 
WVW_SetFont(,aFONTIMP[1],aFONTIMP[2],aFONTIMP[3],aFONTIMP[4],aFONTIMP[5]) 
lMudouFonte := .T. 
endif 

wvw_setmaincoord(.F.) 
SetInkeyAfterBlock({|nkey| fAfterInkeyPRN( nkey ) }) 

setcolor("0/N*") 

nWIN := OpenWinRel( 0, 0, 25, 98, cTITULO ) 
wvw_centerwindow() 
setmode(wvw_maxmaxrow()-1,wvw_maxmaxcol()) 
wvw_enablemaximize(nWIN, .T.) 
wvw_maximize(nWIN) 

wvw_tbcreate( nWIN, .F., NIL, 1) 
wvw_tbAddButton( nWIN ) 
wvw_tbAddButton( nWIN ) 
wvw_tbAddButton( nWIN, IDM_PRINT , 14 , "Imprimir " , 1 ) 
wvw_tbAddButton( nWIN, IDM_FONTPRINT , IMG_FONTE , "Alterar Fonte", 0, .T. ) 
wvw_tbAddButton( nWIN ) 
wvw_tbAddButton( nWIN, IDM_BACK , IMG_VOLTAR , "Voltar" , 1 ) 
wvw_tbAddButton( nWIN, IDM_FORWARD , IMG_AVANCAR , "Avancar", 1 ) 
wvw_tbAddButton( nWIN ) 
wvw_tbAddButton( nWIN, IDM_PROCURAR , IMG_PROCURAR , "Procurar " , 0, .T. ) 
wvw_tbAddButton( nWIN, IDM_IRPARA , IMG_IRPARA , "Pagina " , 0, .T. ) 
wvw_tbAddButton( nWIN ) 
wvw_tbAddButton( nWIN, IDM_SAIR , IMG_SAIR , "Sair" , 0, .T. ) 


WVW_SBcreate() 
WVW_SBaddPart(nWin,space(10)) 

// 
// CRIACAO DO ARQUIVO TEMPORARIO ( EM CADA ESTACAO DE TRABALHO ) 
// 
fErase("PREVIEW.DBF") 
if !file("PREVIEW.DBF") 
dbcreate("PREVIEW.DBF", STRU_REL) 
endif 
if select("PREVIEW") > 0 
select("PREVIEW") 
else 
use ("PREVIEW.DBF") exclusive new 
endif 

append from (cIMPFILE) sdf 
dbGoTop() 
nPG := 1 
nLINHA := 0 
preview->config := "I" 
while !preview->(eof()) 
nLINHA++ 
if substr(preview->coluna1,1,1) == SALTO_PAGINA .and. !lUNIPAG 
preview->config := "I" 
nPG++ 
nLINHA := 0 
preview->(dbSkip(-1)) 
preview->config := "F" 
preview->(dbSkip()) 
endif 
preview->pagina := nPG 
preview->(dbSkip()) 
enddo 
// 
// ELIMINANDO ESPACO DO EJECT NO FINAL 
// 
preview->(dbGoBottom()) 
if preview->config == "I" 
preview->(dbDelete()) 
nPG-- 
endif 
// 
// ACERTANDO O FINAL DA PAGINA 
// 
if lUNIPAG 
preview->(dbGoBottom()) 
preview->config := "F" 
endif 

dbGoTop() 
nLASTPG := nPG 
nPG := 1 
if lUNIPAG 
set filter to preview->pagina == nPG .and. alltrim(preview->coluna1) # SALTO_PAGINA 
endif 

preview->(Imp_Video_PG( lUNIPAG )) 

if select("PREVIEW") # 0 
preview->(dbCloseArea()) 
endif 
wvw_lCloseWindow() 
SetInkeyAfterBlock({|nkey| fAfterInkey( nkey ) }) 
wvw_setmaincoord(.T.) 
if lMudouFonte 
WVW_SetFont(,'Ms Sans Serif', 16, 8 ) 
endif 
RETURN NIL 

Relembrando o problema. Esse codigo emite uma linha de impressão com mais de 80 colunas e quando retorno para o programa principal a tela inicial do programa aparece na forma minimizada, quando era para permanecer maximizada.

Vamos ver se agora eu acerto.

Enviado: 11 Mar 2008 14:46
por sygecom
Seu problema esta em:

Código: Selecionar todos

if tamrel > 80 .and. len(aFONTIMP) > 0
WVW_SetFont(,aFONTIMP[1],aFONTIMP[2],aFONTIMP[3],aFONTIMP[4],aFONTIMP[5])
lMudouFonte := .T.
endif 
Tente salvar a fonte que esta usando antes desse comando acima e depois que sair do relatorio volto sua fonte original.

Enviado: 11 Mar 2008 14:46
por sygecom
Em tempo, sua fonte de uso do sistema deve esta setada no inicio do seu sistema !

Manual de referência em Português

Enviado: 12 Mar 2008 11:58
por locio
Agradeço a todos o empenho em me ajudar.

Muito obrigado.

José Malta Lócio Campos
Recife-PE