sobre leitor de código de barra..desafio.
Moderador: Moderadores
Compensaria se não houvessem tantas marcas de relógios. Daria pra fazer algo até melhor e sairiam muitas vendas. Mas não é o caso.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Pois é...se esse povo usase um tipo só de comunicação...um unico software....seria Monopolio.....hehe...cara tem muitos clientes com problema de relogio ponto...esses povo que venda esses relogio...vende e depois nunca mais aparecem...hehe...pos-venda.....zero......
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
Depedendo da empresa, isso acontece em qualquer negócio. Por isso é preciso pesquisar. Não sei qual é a marca do relógio do meu cliente, mas ele diz que está satisfeito. Em 10 anos juntos, sei que esse é o apenas o segundo relógio dele.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Semana que vem eu vou lá e vejo. Depois te digo.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Dinada.
Aliás, acho que vou ver isso amanhã. Dependo de uma ligação do cliente. Mas depois volto ao assunto.
Aliás, acho que vou ver isso amanhã. Dependo de uma ligação do cliente. Mas depois volto ao assunto.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
ola amigos.
bom dia a todos..estava viajando esse final de semana.
primeiremante o brigado a todos pela força e principalmente a maligno e sysgecon.
Será necessário apenas criar uma função que seja a única chamadora de InKey() em todo o programa. Ao receber o tal código de tecla "extra", que identifica uma seqüência de teclas vindas do leitor de código de barras, essa própria rotina chamaria uma função de registro do funcionário. Se não for o tal caractere "extra", ela passa o código da tecla pra frente, como se ela própria fosse a InKey(). Não é necessário pendurar nada em background.
bom eu não sei se entendi bem mas, pelo que entendi seria que o leitor alem de ler o código de barra vai passar junto um caracter "extra" . tipo :
000021A OU 000021ACK onde os 6 primeiros é o código do funcionário e o restante a tecla exta?
agora sobre a função to mais perdido ainda...como faria essa função??? funcionar em todo o programa???
pois o usuário esta por exemplo em um tela de cadastro com varios GETS e como esta hoje ele tecla o [F6] abre a tela do ponto e [ESC] volta ao GETS onde estava anteriormente.
to confuso....mas a lógica eu entendi só não to conseguindo coloca-la em prática.
Se puder me dar um exemplo dessa função.
é cada coisa que nós temos que passar, cada cliente, mas vou tenter se der beleza se não o cliente vai ter que aceitar assim mesmo.
atenciosamente
Robson
primeiremante o brigado a todos pela força e principalmente a maligno e sysgecon.
Será necessário apenas criar uma função que seja a única chamadora de InKey() em todo o programa. Ao receber o tal código de tecla "extra", que identifica uma seqüência de teclas vindas do leitor de código de barras, essa própria rotina chamaria uma função de registro do funcionário. Se não for o tal caractere "extra", ela passa o código da tecla pra frente, como se ela própria fosse a InKey(). Não é necessário pendurar nada em background.
bom eu não sei se entendi bem mas, pelo que entendi seria que o leitor alem de ler o código de barra vai passar junto um caracter "extra" . tipo :
000021A OU 000021ACK onde os 6 primeiros é o código do funcionário e o restante a tecla exta?
agora sobre a função to mais perdido ainda...como faria essa função??? funcionar em todo o programa???
pois o usuário esta por exemplo em um tela de cadastro com varios GETS e como esta hoje ele tecla o [F6] abre a tela do ponto e [ESC] volta ao GETS onde estava anteriormente.
to confuso....mas a lógica eu entendi só não to conseguindo coloca-la em prática.
Se puder me dar um exemplo dessa função.
é cada coisa que nós temos que passar, cada cliente, mas vou tenter se der beleza se não o cliente vai ter que aceitar assim mesmo.
atenciosamente
Robson
S COM INFORMÁTICA
CLIPPER 5.3 / FIVEWIN 2.0 / BLINKER 7
XHARBOUR/ BCC582
CLIPPER 5.3 / FIVEWIN 2.0 / BLINKER 7
XHARBOUR/ BCC582
Seria +/- isso. Mas o código extra deveria vir primeiro, já que ao detectá-lo, a função especial saberia o que esperar. A função em si é simples. Se chamaria, por exemplo, MyInKey(). Nela você teria um while, por exemplo. Dentro deste, uma chamada à InKey() original. Lido o caractere, se não for o caractere especial, você simplesmente sai do while e retorna com o código da tecla que veio. Sendo o caractere especial, você saberia que estão pra chegar outros 13 caracteres do código do funcionário (EAN13). Uma vez que tenham vindo todos esses caracteres, de posse do número, você chama a função que faz o registro, lhe passando esse código. Assim que ela retornar, o while de sua MyInKey() continua.000021ACK
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Em tempo: <ACK> é um código de um byte apenas. Significa acknowledged ou "reconhecido". Ele é representado por Chr(6). Mas você pode escolher o que quiser.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
a sim..
ok maligno entendi agora o caractere especial.
e tambem a função que pegaria o inkey() e verificaria o caractere especial só não consegui ainda é quando e como faço isso. sendo que o usuário pode estar em um menu, dbedit,prompt, etc...como faço para que essa função fique ativa o tempo todo no sistema?
me desculpe mas ainda não consegui pensar em nada para fazer essa idéia funcionar....para que como vc me explicou a MYINKEY() ficar ativa no sistema!!
como faria isso?
Robson
e tambem a função que pegaria o inkey() e verificaria o caractere especial só não consegui ainda é quando e como faço isso. sendo que o usuário pode estar em um menu, dbedit,prompt, etc...como faço para que essa função fique ativa o tempo todo no sistema?
me desculpe mas ainda não consegui pensar em nada para fazer essa idéia funcionar....para que como vc me explicou a MYINKEY() ficar ativa no sistema!!
como faria isso?
Robson
S COM INFORMÁTICA
CLIPPER 5.3 / FIVEWIN 2.0 / BLINKER 7
XHARBOUR/ BCC582
CLIPPER 5.3 / FIVEWIN 2.0 / BLINKER 7
XHARBOUR/ BCC582
Pense na técnica como se fosse um afunilamento. Tudo passa por InKey(). São várias chamadas a esta função no seu programa. Substituindo todas essas chamadas por chamadas à sua MyInKey(), você forçará todos os pontos do seu programa a se "afunilarem", a passarem por esta nova função. Haverá então, apenas uma chamada à InKey(). Dentro da sua MyInKey(). Portanto, nela você terá controle total sobre tudo o que for digitado. Inclusive, através desta técnica você consegue fazer muito mais do que detectar um código especial de controle. Eu próprio uso isso para executar várias funções "diferentes", como screen saver, log-out automático, checagens periódicas, etc.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
sim a técnica do afunilamento saquei.
o maligno a técnica do afunilamento eu saquei o problema é que eu não faço varias chamadas da função INKEY(), uso geralmente quando abro uma tela somente para visualizção de dados ai eu uso o inkey() para parar.
no caso teria que acionar essa função toda a vez que uma tecla fosse acionada. por exemplo nos gets seria facil indetificar a tecla especial pois nudaria no GETSYS pois ja testei e ficou beleza, mas se o sistema tiver parado em um PROMPT, ACHOICE e DBEDIT. ou seja não to usando inkey() !
*-)
ou seja a lógica seria interceptar a tecla antes de qualquer coisa.
agora como deixar isso ativo.
Robson
no caso teria que acionar essa função toda a vez que uma tecla fosse acionada. por exemplo nos gets seria facil indetificar a tecla especial pois nudaria no GETSYS pois ja testei e ficou beleza, mas se o sistema tiver parado em um PROMPT, ACHOICE e DBEDIT. ou seja não to usando inkey() !
*-)
ou seja a lógica seria interceptar a tecla antes de qualquer coisa.
agora como deixar isso ativo.
Robson
S COM INFORMÁTICA
CLIPPER 5.3 / FIVEWIN 2.0 / BLINKER 7
XHARBOUR/ BCC582
CLIPPER 5.3 / FIVEWIN 2.0 / BLINKER 7
XHARBOUR/ BCC582
Eu não uso nada disso. Meu menu é customizado. Mas então a coisa fica difícil desta forma. Mas por aí você vê a complicação desnecessária que é ter duas vias diferentes para receber uma entrada via teclado. A função InKey() deveria ser a única via de entrada, mesmo em alto nível. Mas a AChoice(), que acabei de ver no NG, parece usar uma função customizada.
Se tudo utilizasse InKey() como via de entrada, seria fácil, como eu comentei. Mas você pode fazer um teste pra confirmar. De repente, essas funções integradas, como é a AChoice(), fazem uma chamada à InKey(). Acho difícil, mas não custa tentar. Crie uma MyInKey() como eu disse e não faça nada além de tocar um bip curto a cada tecla pressionada, retornando com o código da tecla sem alteração. Assim, se na execução de AChoice() você ouvir um bip, já sabe que é possível implementar sua MyInKey(). Mas ainda duvido que dê.
Se tudo utilizasse InKey() como via de entrada, seria fácil, como eu comentei. Mas você pode fazer um teste pra confirmar. De repente, essas funções integradas, como é a AChoice(), fazem uma chamada à InKey(). Acho difícil, mas não custa tentar. Crie uma MyInKey() como eu disse e não faça nada além de tocar um bip curto a cada tecla pressionada, retornando com o código da tecla sem alteração. Assim, se na execução de AChoice() você ouvir um bip, já sabe que é possível implementar sua MyInKey(). Mas ainda duvido que dê.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
/*
Nao deu para testar meu CCD queimou, extrai do meu sistema apenas o que foi necessario, se der erro..
post ou mande um e-mail para deboni@ibest.com.br
CCD Teclado:
Recomendo você usar um micro separado, pois cada vez que alguem passar o cartão e tiver sendo usado, ira atrabalhar o trabalho podendo gerar erro.
EXEMPLO:
*/
/*
CCD Serial:
Recomendo você usar em precesso separado, um novo EXE no mesmo micro que tenha o leitor de CCD, não deu para testar meu CCD queimou, mas qualquer duvida e so postar ou mandar para deboni@ibest.com.br
EXEMPLO SEM BGEvents:
*/
/*
EXEMPLO com BGEvents:
EXBGEvents - inicializa monitor desativado
AtivaCCD - Ativa e Desativa leitura CCD
LeCCD - funcao que contera o processamento
*/
Maligno, achei como colocar no modo codigo, valeu...
Nao deu para testar meu CCD queimou, extrai do meu sistema apenas o que foi necessario, se der erro..
CCD Teclado:
Recomendo você usar um micro separado, pois cada vez que alguem passar o cartão e tiver sendo usado, ira atrabalhar o trabalho podendo gerar erro.
EXEMPLO:
*/
Código: Selecionar todos
STATIc nPortaSerial := 0
#command DEFAULT <var> TO <def> [, <varn> TO <defn>] => ;
<var> := if(<var> = nil,<def>,<var>) [; <varn> := if(<varn> = nil,<defn>,<varn>)]
function ExTeclado()
local Test := Space(20), UltCartaoLido := "", GetList := {}
SetKey( 255, {|| UltCartaoLido := LerCartao() } )
KEYB chr(255) //colocado para testar chamada
WHIL !LastKey() = 27
@ 10, 10 say "Esperando passar cartao" Get Test
READ
ENDDO
RETU .T.
FUNCTION LerCartao()
LOCAL sStrCartao := ""
WHIL NextKey() > 0
sStrCartao += Inkey()
ENDDO
Alert( "Passou Cartao: " + sStrCartao ) //retirar este Alert apos teste
RETU sStrCartaoCCD Serial:
Recomendo você usar em precesso separado, um novo EXE no mesmo micro que tenha o leitor de CCD, não deu para testar meu CCD queimou, mas qualquer duvida e so postar ou mandar para deboni@ibest.com.br
EXEMPLO SEM BGEvents:
*/
Código: Selecionar todos
Function ExSerial( nPorta, nIrq, nIo, nBufferIn, nBufferOut, lTrapMode, nBaud, sPar, nBit, nStop )
LOCAL UltCartaoLido := "", nWait := 500
//nWait - Muito Alto demora a ler CodBarra, Muito Baixo (trava ou deixa lenta) a maquina
DEFA nPorta TO 1
DEFA nIrq TO 4
DEFA nIo TO "03F8"
DEFA nBufferIn TO 1000
DEFA nBufferOut TO 1000
DEFA lTrapMode TO .T.
DEFA nBaud TO 9600
DEFA sPar TO "N"
DEFA nBit TO 8
DEFA nStop TO 1
IF !AbreCom( nPorta, nIrq, nIo, nBufferIn, nBufferOut, lTrapMode, nBaud, sPar, nBit, nStop )
nPortaSerial := 0
RETU .F.
ENDIF
nPortaSerial := nPorta
WHILE .T.
UltCartaoLido := LeSerial()
IF !Empty(UltCartaoLido)
//salva em DBF ou TXT
ENDIF
IF LastKey() = 27
IF Alert("Sair", {"Nao", "Sim"} ) = 2 //procure trocar esta funcao por uma que se passar nSegundos sem pressionar qualquer tecla volta a fazer o monitoramento
RETU .T.
ENDIF
ENDIF
millisec( nWait )
ENDDO
RETU .T.
Function LeSerial()
LOCAL CodBarra := "", TimeOut := 0, Cod := "", Cod1 := ""
IF !Com_Count( nPortaSerial ) > 0
RETU ""
ENDIF
TimeOut := Seconds() + 2
WHILE .T.
IF Com_Count( nPortaSerial ) > 0
Cod := com_read( nPortaSerial, 1)
Cod1 := Asc(Cod)
IF Cod1 = 13 //ENTER ENCONTRADO FIM DE CODBARRA, configure o CCD para sinalizar FIM com Chr(13)
Com_Flush( nPortaSerial ) //limpa porta caso tenha algum lixo
EXIT
ENDIF
CodBarra += Cod
ELSEIF Seconds() > TimeOut
//TIMEOUT na porta COM" + cStr(CCDPortaCom), 79)
Com_Flush( nPortaSerial )
CodBarra := ""
EXIT
ENDIF
MILLISEC(5)
ENDDO
RETU CodBarra
//Generica pode ser usada independente, abre COM com tratamento de erro
function AbreCom( nPorta, nIrq, nIo, nBufferIn, nBufferOut, lTrapMode, nBaud, sPar, nBit, nStop )
DEFA nPorta TO 1
DEFA nIrq TO 4
DEFA nIo TO "03F8"
DEFA nBufferIn TO 1000
DEFA nBufferOut TO 1000
DEFA lTrapMode TO .T.
DEFA nBaud TO 9600
DEFA sPar TO "N"
DEFA nBit TO 8
DEFA nStop TO 1
//definir antes de abrir a porta
IF !com_setirq( nPorta, nIrq ) //util para multserial como NETMOS que so funciona se definir IRQ/IO
ALERT( "NAO FOI POSSIVEL ALTERAR IRQ - " + LTrim(Str( nIrq )) + " - PORTA COM" + LTrim(Str( nPorta)) )
RETU .F.
ENDIF
//definir antes de abrir a porta
IF !com_setio( nPorta, nIo )
ALERT( "NAO FOI POSSIVEL ALTERAR ENDERECO I/O - " + LTrim(Str(nIo)) + " - PORTA COM" + LTrim(Str( nPorta) ))
RETU .F.
ENDIF
/*
nBufferIn=buffer de entrada - padrao=100 byte
nBufferOut=buffer de saida - padrao=quantidade sendo enviada
lTrapMode=Interompe tramissao em caso de erro
*/
IF !Com_Open( nPorta, nBufferIn, nBufferOut, lTrapMode )
ALERT( "NAO FOI POSSIVEL ABRIR A PORTA COM" + LTrim(Str( nPorta )) )
RETURN .F.
ENDIF
//controle por SOFT ou HARD de dados, de preferencia a SOFT
com_soft( nPorta, .T. )
//com_hard( nPorta, .T. )
/*
Inicializa porta com valores, que difere de acordo com periferico conectado
nPorta= 300, 600, 1200, 2400, 4800, 9600, 19200 - padrao=300
nBaud = (E)ven, (O)dd, (M)ark, (S)pace, (N)one - padao=N
nBit=8, 7 - padrao=8
nStop=1, 2 - padrao=1
*/
IF !com_init( nPorta, nBaud, sPar, nBit, nStop )
com_close( nPorta )
ALERT( "NAO FOI POSSIVEL INICIALIZAR A PORTA COM" + lTrim(Str( nPorta )) ;
+ "," + LTrim(Str(nBaud)) ;
+ "," + Upper(sPar) ;
+ "," + LTrim(Str(nBit)) ;
+ " " + LTrim(Str(nStop)))
RETURN .f.
ENDIF
COM_FLUSH( nPorta ) //limpa porta
RETURN .T.
EXEMPLO com BGEvents:
EXBGEvents - inicializa monitor desativado
AtivaCCD - Ativa e Desativa leitura CCD
LeCCD - funcao que contera o processamento
*/
Código: Selecionar todos
#INCLUDE "bgevents.ch"
Function ExBGEvent( nPorta, nIrq, nIo, nBufferIn, nBufferOut, lTrapMode, nBaud, sPar, nBit, nStop )
LOCAL UltCartaoLido := "", nWait := 500
//nWait - Muito Alto demora a ler CodBarra, Muito Baixo (trava ou deixa lenta) a maquina
DEFA nPorta TO 1
DEFA nIrq TO 4
DEFA nIo TO "03F8"
DEFA nBufferIn TO 1000
DEFA nBufferOut TO 1000
DEFA lTrapMode TO .T.
DEFA nBaud TO 9600
DEFA sPar TO "N"
DEFA nBit TO 8
DEFA nStop TO 1
IF !AbreCom( nPorta, nIrq, nIo, nBufferIn, nBufferOut, lTrapMode, nBaud, sPar, nBit, nStop )
nPortaSerial := 0
RETU .F.
ENDIF
nPortaSerial := nPorta
AtivaCCD( .f. )
RETU .T.
Function LeCCD()
LOCAL sCodBarra := ""
sCodBarra := LeSerial()
IF !Empty(sCodBarra)
//incluir aqui salvar CODBARRA
ENDIF
RETU .T.
FUNC AtivaEventoCCD()
STATIC lAtivado := .f.
IF lAtivado
RETU .t.
ENDIF
lAtivado := .t.
//nao retire, desativa monitoramento quanto esta debugando
IF IsDebug()
background events debug off
SetReEntrant(.F.)
ELSE
SetReEntrant(.T.)
ENDIF
BACKGROUND EVENTS AUTOACTIVATE
BACKGROUND EVENTS EXECUTE ALL
Define backgroundevent Action LeCCD() interval .5 name ccd
RETU .T.
Function AtivaCCD( lSet )
DEFA lSet TO .T.
AtivaEventoCCD()
IF lSet
BGE_Start()
ELSE
BGE_Stop()
ENDIF
RETU .T.
Editado pela última vez por dbsh em 01 Ago 2007 21:06, em um total de 2 vezes.

