Posição do ROW() dentro de Achoice

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Posição do ROW() dentro de Achoice

Mensagem por microvolution »

Caro Antônio, boa noite!
Uso uma função ACHOICE para cadastrar os produtos (num total de 16 por venda), mas, como o espaço da tela (visual é apertado) esse achoice trabalha entre as linhas 12 e 16, ou seja, quando ocupa 5 produtos a tela fica rolando.
Até aí tudo bem.

O problema é que, quando pressionamos ENTER em qualquer das linhas que estivermos deveria o cursor ficar entre as linhas 12 e 16.
Para isso, usamos a função ROW() para pegar a posição correta do cursor.
No clipper isso estava tudo correto, mas, no harbour, não está não
Quando pressionamos ENTER o ROW() fornece uma posição diferente (deveria ser entre 12 e 16) mas, pude observar que ele sempre vai para a linha 18.

Vejam o trecho do meu código onde esta função funciona:

Código: Selecionar todos

      do while .t.
//           ? ROW()  // só pra teste migração clipper/harbour pois na hora de se cadastrar o produto, tá ficando 6 linhas abaixo do lugar correto 6/3/15w.
//           INKEY(0) // só pra teste migração clipper/harbour pois na hora de se cadastrar o produto, tá ficando 6 linhas abaixo do lugar correto 6/3/15w.
           CAN_TECLA_F3  := .t.
           set key TECLA_CONT_ANT to
           mIND := achoice (12,01,16,77,mLINHA,.T.,'fACH_001',mIND)
           set key TECLA_CONT_ANT to CONTEUDO_ANTERIOR
           CAN_TECLA_F3  := .f.
//           ? ROW()   // só pra teste migração clipper/harbour pois na hora de se cadastrar o produto, tá ficando 6 linhas abaixo do lugar correto 6/3/15w.
//           INKEY(0)  // só pra teste migração clipper/harbour pois na hora de se cadastrar o produto, tá ficando 6 linhas abaixo do lugar correto 6/3/15w.
           if lastkey () = 27
               SALVA_CP := savescreen (0,0,maxrow (),maxcol ())
               if .not. CONFIRMA ('Confirma Dados')
                    loop
               endif
               exit
           elseif lastkey () = 13
               //? 'estou na linha 2344'        //   Somente para testes provis¢rios. Walcledson 21/2/02w // reacrescentada novamente para migração para harbour 6/3/15w
               //? mIND                          // acrescentada novamente para migração para harbour 6/3/15w
               //? row()                         // acrescentada novamente para migração para harbour 6/3/15w
               //inkey(0)                       //   Somente para testes provis¢rios. Walcledson 21/2/02w // reacrescentada novamente para migração para harbour 6/3/15w
                mCDPRODUTO := val (substr (mLINHA [mIND],01,13))
                aCDPRODUTO := mCDPRODUTO
                mDSPRODUTO := substr (mLINHA [mIND],15,32)
                mCD_GRADE  := substr (mLINHA [mIND],48,02)
                mCD_GRADE  := iif (mCD_GRADE='  ',DCI10010->DSUNIDADE,substr (mLINHA [mIND],48,02))      // Modificado p/Walcledson em 09/05/01 p/func. mt,cm,kg.
                aCD_GRADE  := mCD_GRADE
                mQT_VENDA  := val (substr (mLINHA [mIND],51,07))      // Modificado p/Walcledson em 09/05/01 p/func. mt,cm,kg.
                aQT_VENDA  := mQT_VENDA
                mVR_UNITAR := val (substr (mLINHA [mIND],59,01) +;
                              substr (mLINHA [mIND],61,03) + '.'+;
                              substr (mLINHA [mIND],65,02))
                aVR_UNITAR := mVR_UNITAR
                mLIN := row()
                * Consulta se j  existe o produto/grade na venda
                EXISTE_PRD := EXISTE_PRDUTO () // modificado o nome de EXISTE_PROD e EXISTE_PRODUTO p/ EXISTE_PRD e EXISTE_PRDUTO, pois está gerando conflito com a função EXISTE_PROGRAMA q pertence ao arquivo ROTINAS.PRG (e seus derivados, no caso ROTINAS5.PRG). 02-11-11w.
            	*? EXISTE_PRD // modificado o nome de EXISTE_PROD e EXISTE_PRODUTO p/ EXISTE_PRD e EXISTE_PRDUTO, pois está gerando conflito com a função EXISTE_PROGRAMA q pertence ao arquivo ROTINAS.PRG (e seus derivados, no caso ROTINAS5.PRG). 02-11-11w.
              //? row() // acrescentado apenas para teste de migração harbour 6/3/15w.
              //inkey(0) // acrescentado apenas para teste de migração harbour 6/3/15w.
                @ row(),01 get mCDPRODUTO picture pCDPRODUTO  when empty (mCDPRODUTO)      valid fCDPRODUTO ()  // modificado pela linha abaixo, pois na migração do clipper/harbour o cursor na hora de cadastrar um produto aparece 6 linhas abaixo do lugar correto 6/3/15w.
                *@ 16,01 get mCDPRODUTO picture pCDPRODUTO  when empty (mCDPRODUTO)      valid fCDPRODUTO ()
                *@ row(),48 get mCD_GRADE  picture pCD_GRADE  when mCD_GRADE = 'PC' .and. .not. EXISTE_PRD  valid fQT_VENDA () // modificado o nome de EXISTE_PROD e EXISTE_PRODUTO p/ EXISTE_PRD e EXISTE_PRDUTO, pois está gerando conflito com a função EXISTE_PROGRAMA q pertence ao arquivo ROTINAS.PRG (e seus derivados, no caso ROTINAS5.PRG). 02-11-11w.
                *@ row(),48 get mCD_GRADE  picture pCD_GRADE      when mCD_GRADE = 'UN' .and. .not. EXISTE_PRD  valid fCD_GRADE () // Substitu¡da pela linha abaixo. 27/1/3w: // modificado o nome de EXISTE_PROD e EXISTE_PRODUTO p/ EXISTE_PRD e EXISTE_PRDUTO, pois está gerando conflito com a função EXISTE_PROGRAMA q pertence ao arquivo ROTINAS.PRG (e seus derivados, no caso ROTINAS5.PRG). 02-11-11w.
                @ row(),48 get mCD_GRADE  picture pCD_GRADE       when .not. EXISTE_PRD  valid fCD_GRADE () // modificado o nome de EXISTE_PROD e EXISTE_PRODUTO p/ EXISTE_PRD e EXISTE_PRDUTO, pois está gerando conflito com a função EXISTE_PROGRAMA q pertence ao arquivo ROTINAS.PRG (e seus derivados, no caso ROTINAS5.PRG). 02-11-11w.
                private mQT_ESTOQ2 := nil         // Acrescentado para que qd§ o estoque estiver zerado, pe‡a senha para liberara‡Æo. Walcledson 09/09/02.
                *@ row(),52 get mQT_VENDA  picture pQT_VENDA   valid fQT_VENDA () // Modificado p/Walcledson em 27/01/03 p/func. mt,cm,kg.
                @ row(),51 get mQT_VENDA  picture pQT_VENDA   valid fQT_VENDA () // Modificado p/Walcledson em 27/01/03 p/func. mt,cm,kg.
                read
Bom, o que os Srs. acham que está acontecendo?
Grato,
MICROVOLUTION, DE PAULA
PS: grifo nosso[/b em parte do código acima
O anexo ROW 1.JPG não se encontra mais disponível
O anexo ROW 2 - ERRO.JPG não se encontra mais disponível
Anexos
ROW 2 - ERRO.JPG
ROW 1.JPG
Editado pela última vez por Toledo em 08 Mar 2015 09:14, em um total de 1 vez.
Razão: As mensagens deste tópico foram divididas de um outro tópico que tratava de um outro assunto
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Posição do ROW() dentro de Achoice

Mensagem por JoséQuintas »

Sobre o tbrowse, uma alternativa é abrir uma janela individual pro produto.

Quando passei pro Harbour usando tbrowse não tive esse problema da linha, mas tive problema na coluna, porque o alinhamento do Harbour era diferente do Clipper.
Abrindo uma janela individual resolve qualquer problema, principalmente se tiver mais informações sobre o produto, ou se tiver que acrescentar mais informações depois.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Posição do ROW() dentro de Achoice

Mensagem por microvolution »

JOSÉQUINTAS disse: Sobre o tbrowse, uma alternativa é abrir uma janela individual pro produto.
Prezado JoséQuintas, pra mim é um prazer ter você me respondendo a alguma dúvida de nossa parte.
Bom, acho que quando responde sobre o TBROWSE está se referindo à nossa dúvida sobre ACHOICE. Estou correto né?

Prezado professor, quando o amigo sugere um TBROWSE está se referindo a uma tela à parte para que seja feito cadastro dos produtos e só após concluir que é pra sair e voltar à tela anterior que seria essa minha antiga?
E, V.Sa. poderia me passar um exemplo de como seria?

E, quanto ao ROW() tem como resolver ou realmente é um conflito?

Abraços, e aguardo vosso retorno.
Grato,
Microvolution, W. de Paula.
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Posição do ROW() dentro de Achoice

Mensagem por JoséQuintas »

No seu CASE Lastkey() == 13, os mesmos GETs, mas dentro de uma janela:

Código: Selecionar todos

SAVE SCREEN
@ 10, 5 CLEAR TO 20, 60
@ 10, 5 TO 20, 60
@ 12, 7 SAY "PRODUTO:" GET mCODIGO
...
READ
RESTORE SCREEN
Só ajustar para seu estilo/bibliotecas.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Posição do ROW() dentro de Achoice

Mensagem por Toledo »

Amigo W de Paula, depois da linha que tem o lastkey=13 tem tantos ? e também algumas funções (EXISTE_PRDUTO()) que com certeza estão mudando o valor do ROW(), então quando chega na linha do GET o valor do ROW() não é o mesmo da hora que você pressionou Enter.

Faça um teste assim...

Logo após o lastkey()=13, incluir uma variável para receber o valor do ROW():

Código: Selecionar todos

elseif lastkey () = 13
   nLinGet:=Row()
No GET use esta variável no lugar do ROW():

Código: Selecionar todos

@ nLinGet,01 get mCDPRODUTO picture pCDPRODUTO when empty(mCDPRODUTO) valid fCDPRODUTO()
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Posição do ROW() dentro de Achoice

Mensagem por microvolution »

Prezado TOledo, obrigado por mais uma vez estar disposto a nos ajudar nessa migração de clipper/harbour.

[qute] Toledo disse:Amigo W de Paula, depois da linha que tem o lastkey=13 tem tantos ? e também algumas funções (EXISTE_PRDUTO()) que com certeza estão mudando o valor do ROW(), então quando chega na linha do GET o valor do ROW() não é o mesmo da hora que você pressionou Enter.[/quote]
Prezado professor, se V.Sa. observar:
1) verá que meus "?" foram incluídos apenas pra eu fazer esse teste de descobrir o que está errado. Mas, no momento do código correto, pode-se notar que os comandos PRINT (aqui abreviado com "?") não estão ativos, eles estão comentados com "//" ou "*", tanto faz... V.Sa. concorda?

2) A função EXISTE_PRD existe (segue o código dela) não tem nenhuma alteração do local do cursor. Veja:

Código: Selecionar todos

static function EXISTE_PRDUTO ()
      for mI = 1 to 15
          mCD_PROD := val (substr (mLINHA [mI],01,13))
          mCD_GRAD := substr (mLINHA [mI],48,02)
          *? 'mCD_PROD,mCDPRODUTO',mCD_PROD,mCDPRODUTO
          *? 'mCD_PROD,mCDPRODUTO,mCD_GRAD,mCD_GRADE,mLINHA[mI],01,13' ,mCD_PROD,mCDPRODUTO,substr(mLINHA[mI],01,13),mCD_GRAD,mCD_GRADE,substr(mLINHA[mI],48,02)
          *inkey(0)
          if mCD_PROD = mCDPRODUTO .and. mCD_GRAD = mCD_GRADE
               return (.t.)
          endif
      next
return (.f.)
Toledo disse:Logo após o lastkey()=13, incluir uma variável para receber o valor do ROW():
Código:

Código: Selecionar todos

elseif lastkey () = 13
   nLinGet:=Row()
No GET use esta variável no lugar do ROW():
Código:

Código: Selecionar todos

@ nLinGet,01 get mCDPRODUTO picture pCDPRODUTO when empty(mCDPRODUTO) valid fCDPRODUTO()
Bom, por incrível que parece, parece uma comentário de quem não sabe nada da linguagem o que vou dizer:
Infelizmente deu erro "undefined reference to 'NLINGET'"

Bom, aí pensei imediatamente, ah já sei, falta criar a variável como LOCAL,PRIVATE,PUBLIC... etc...

Então fiz isso no início do módulo. Deu o mesmo erro.

Ah, coloquei dentro da função em questão como LOCAL ou PRIVATE... xiiiiiii o mesmo erro.

E, agora "Toledo" o que está errado?

PS: por isso disse que parece ser uma pergunta idiota de minha parte... mas, perdoe a fragilidade!!!

Grato!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Posição do ROW() dentro de Achoice

Mensagem por microvolution »

Prezado Toledo,

mil perdões a respeito do UNDEFINED FUNCTION

Favor desconsiderar, pois ao colocar a variável está correta eu quem digitei erroneamente assim:

Código: Selecionar todos

                @ nLinGet(),01 get mCDPRODUTO picture pCDPRODUTO  when empty (mCDPRODUTO)      valid fCDPRODUTO ()
rsrsrs esqueci de tirar o parêntesis do row() rsrsrs

Bom, mas, corrigida a minha falha, apesar que eu já sabia do resultado, o problema continua:
no momento que damos ENTER o cursor aparece na linha 18.
Apesar de se fizermos ali a entrada do produto, o cursor volta para o lugar correto (entre linha 12 e 16 - que é o tamanho do ACHOICE).

Bom, digo isso e repito, pois no clipper o código já era assim (do jeito que estava antes da criação de nLinGet e não acontecia essa falha.
Acredito que ela seja do HARBOUR.
Caso contrário, V.Sa. apresente contra-argumentos ou os demais tenham uma resposta para a função ROW() dentro do ACHOICE().

Grato, e aguardando...
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Posição do ROW() dentro de Achoice

Mensagem por ANDRIL »

Poste o conteudo da função 'fACH_001' utilizada dentro do aChoice.
Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Posição do ROW() dentro de Achoice

Mensagem por microvolution »

Prezados Senhores, conforme pedido de V.Sas. que querem ajudar-me, segue o código da função fACH_001:

Código: Selecionar todos

function fACH_001 (mPAR1)
if lastkey()=13
   return 1
elseif lastkey()=27
   return 0
endif
return 2
Está aí...
bom, paliativamente até alguém achar uma solução para resolução desse pequeno(grande) problema dentro do nosso pedido (row()/achoice()), fizemos as seguintes alterações em nosso código:

// mIND := achoice (12,01,16,77,mLINHA,.T.,'fACH_001',mIND) // mudei em 9/3/15w para a linha abaixo, pois o harbour está confundindo a função ROW() dentro da ACHOICE().

Código: Selecionar todos

//mIND := achoice (12,01,16,77,mLINHA,.T.,'fACH_001',mIND)  // mudei em 9/3/15w para a linha abaixo, pois o harbour está confundindo a função ROW() dentro da ACHOICE().
mIND := achoice (12,01,15,77,mLINHA,.T.,'fACH_001',mIND)
Com isso, sobrou uma linha (a 16) para que eu possa programar o ENTER no lugar errado que está na linha 18, volto pra linha 16. Então a alteração desse item ficou assim no código:

Código: Selecionar todos

@ 16,01 get mCDPRODUTO picture pCDPRODUTO  when empty (mCDPRODUTO)      valid fCDPRODUTO ()  // modificado pela linha abaixo, pois na migração do clipper/harbour o cursor na hora de cadastrar um produto aparece 6 linhas abaixo do lugar correto 6/3/15w. // mudei p/ 16,01 pois o harbour está confundindo a função ROW() dentro do ACHOICE() 9/3/15w.
//@ row(),01 get mCDPRODUTO picture pCDPRODUTO  when empty (mCDPRODUTO)      valid fCDPRODUTO ()  // modificado pela linha abaixo, pois na migração do clipper/harbour o cursor na hora de cadastrar um produto aparece 6 linhas abaixo do lugar correto 6/3/15w.
Por enquanto, está resolvido, o cursor cadastra o(s) produto(s) na linha 16 e quando dou ENTER para finalizar ele volta para o lugar certo (entre 12 e 15).

Mas, ainda, acredito numa solução correta.
Abraços!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Posição do ROW() dentro de Achoice

Mensagem por Toledo »

Amigo, o correto seria colocar estes GET, que você usa quando pressiona Enter no Achoice, dentro da função fACH_001, mas como isto será mais trabalhoso, então faça o seguinte:

No início deste PRG que tem o Achoice, declare a seguinte variável:

Código: Selecionar todos

Private nLinGet:=12
Altere sua função fACH_001 para:

Código: Selecionar todos

function fACH_001(mPAR1, nElement, nRow )
nLinGet:=nRow
if lastkey()=13
   return 1
elseif lastkey()=27
   return 0
endif
return 2
No GET use esta variável no lugar do ROW():

Código: Selecionar todos

@ nLinGet,01 get mCDPRODUTO picture pCDPRODUTO when empty(mCDPRODUTO) valid fCDPRODUTO()
Acho que isto vai resolver.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Posição do ROW() dentro de Achoice

Mensagem por microvolution »

Olá pessoal, foi de muita valia a ajuda. Já estamos quase corrigindo a falha. Mas, ainda não chegou.

Só gostaria de entender esses 2 elementos que são recebidos dentra da função "fACH001", e, o que eles trazem?

Agora, com a aplicação das alterações sugeridas pelo TOLEDO, a linha de digitação não mais está na linha 18, e, sim, na linha 1.
Enquanto estava na linha 18, tudo que se digitava, estava apenas apontando o ROW() para esta linha, independentemente se rolávamos para cima ou para baixo dentro do limite do ACHOICE (12 a 15/16).
Agora com essa sugestão, ele (o cursor) não fica estagnado apenas na linha 0, mas, se descermos com a seta ele vai para a linha 1, e se continuarmos a descer, para a linha 2, e se subirmos ele também sobe.

Falta pouco para concluir...
bom, em anexo, fiz um PRINTSCREEN de minha tela com as explicações aqui por mim apresentadas.

Aguardo novas alterações para finalizarmos esse erro.
Anexos
ROW e ACHOICE quase funcionando corretamente!
ROW e ACHOICE quase funcionando corretamente!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Posição do ROW() dentro de Achoice

Mensagem por Toledo »

microvolution escreveu:Agora, com a aplicação das alterações sugeridas pelo TOLEDO, a linha de digitação não mais está na linha 18, e, sim, na linha 1.
Opa, esqueci de um pequeno detalhe, altere a linha do GET para:

Código: Selecionar todos

@ 12+nLinGet,01 get mCDPRODUTO picture pCDPRODUTO when empty(mCDPRODUTO) valid fCDPRODUTO()
microvolution escreveu:Só gostaria de entender esses 2 elementos que são recebidos dentra da função "fACH001", e, o que eles trazem?
Para a função usada no Achoice é passada os seguintes parâmetros:

1º parâmetro: O modo atual do achoice()
0 = Ocioso/sem ação
1 = o usuário tentou mover o cursor antes do primeiro item superior
2 = o usuário tentou mover o cursor depois do último item inferior
3 = tecla desconhecida foi pressionada
4 = Sem itens selecionaveis

2º parâmetro: O número do elemento atual na matriz de itens.

3º parâmetro: A posição da linha relativa da barra do cursor dentro da região do Achoice na janela.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Posição do ROW() dentro de Achoice

Mensagem por ANDRIL »

Toledo foi mais rápido que eu! O "problema" do não funcionamento era justamente a correção para @ 12+nLinGet.

microvolution, detalhe qual a versão do Harbour esta usando? Fiz um teste na v3.2.0 e funcionou sem problemas posicionando na linha correta com uso de ROW().

Até+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Posição do ROW() dentro de Achoice

Mensagem por microvolution »

Prezados Toledo e demais professores!
Aqui os meus parabéns!
Deu certinho e já até alterei noutro módulo que é de cadastro de produtos e serviços (lá o problema era duplo). Não havia informado, pois, preferi informar o mais fácil...
com a ajuda desse resolvi o outro. Para não embolar renomeei função "fACH_001" para "fACH_002" e "fACH_003". para produtos e serviços, respectivamente.

Bom, agradeço por enquanto.

Finalmente, o meu próximo passo (já fiz mouse funcionar em modo console, já mudei os caracteres para terem um visual parecido com o da VisualLib - sem necesidade dela)...
preciso imprimir em USB e LPT1, pesquisei nos tutoriais, mas, não consegui ver qual é o correto, podem me passar o link do tutorial que faz com que o próprio programa imprima sem necessidade programas terceiros, com por exemplo:

Código: Selecionar todos

 set printer to lpt1
alguma coisa assim:

Código: Selecionar todos

 set printer to usb 
(*) se existir, é claro!!!

Vlw, por enquanto é só!
Microvolution, W de Paula.
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Posição do ROW() dentro de Achoice

Mensagem por rubens »

Toledo..

Quando você diz
Para a função usada no Achoice é passada os seguintes parâmetros:

1º parâmetro: O modo atual do achoice()
0 = Ocioso/sem ação
1 = o usuário tentou mover o cursor antes do primeiro item superior
2 = o usuário tentou mover o cursor depois do último item inferior
3 = tecla desconhecida foi pressionada
4 = Sem itens selecionaveis

2º parâmetro: O número do elemento atual na matriz de itens.

3º parâmetro: A posição da linha relativa da barra do cursor dentro da região do Achoice na janela.
Como eu recebo esse segundo parametro dentro da função.
Eu uso uma matriz para armazenar os arquivos xml da pasta
Eu gostaria de hora que ativar a função do usuário no achoice apresentasse o nome do xml. Mas para isso preciso saber a posição atual da linha do achoice.

aciono o achoice desta forma

Código: Selecionar todos

,
nOpcao  := Achoice(06,03,nLINHADOWN,78,cLista,.t.,'TKCOMPRAXML')
A funcao TKCOMPRAXML

Código: Selecionar todos

********************************************************************************
FUNCTION TKCOMPRAXML()
LOCAL lAPAGOU := .F.
LOCAL TK:=LASTKEY()
LOCAL cFILEDANFE := cPASTAXML+mListaArq[nOpcao,1]  // Aqui eu preciso da posicao da linha no achoice para selecionar o arquivo

@ nLINHADOWN+1,04 SAY cFILEDANFE

IF MODO=0
	RETURN(2)
ELSEIF MODO=1
	KEYBOARD CHR(30)
	RETURN(2)
ELSEIF MODO=2
	KEYBOARD CHR(31)
	RETURN(2)
ELSEIF MODO=3
	DO CASE
		CASE TK = K_DEL
			IF ALERT( 'Confirma exclusao do arquivo XML: '+HB_EOL()+ cFILEDANFE +' ?', {'Sim','Nao'})=1 .AND. !ESC()
				nVEZES := 0
				WHILE FILE( cFILEDANFE )
					nVEZES++
					IF nVEZES=10
						IF ALERT('Nao consigo apagar o arquivo XML...',{'Continua','Cancela'})=2 .and. !ESC()
							EXIT
						ENDIF
						nVEZES := 0
					ENDIF
					MILLISEC(1000)
				ENDDO
				IF !FILE( cFILEDANFE )
					lAPAGOU := .T. 
					RETURN(0)
				ENDIF
			ENDIF
	ENDCASE
	RETURN(2)
ENDIF

RETURN(2)
Não estou conseguindo enviar a linha atual do achoice para a funçao...
Como posso fazer isso?

Obrigado
"Eu e minha casa servimos ao Senhor e você ???"
Responder