ACHOICE - travando ao pressionar Tecla UP

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:

ACHOICE - travando ao pressionar Tecla UP

Mensagem por microvolution »

Prezados colegas, nobre professores, bom dia, bom domingo e ótimo 1º dia sem horário de verão a todos! X:) #téquenfim #acabouOhorárioDeVerão

Bom, a um tempo atrás os prezados clippeiros/harboueiros me ajudaram quanto à "posição do row() dentro de um achoice"...
No clipper nunca tive esse problema, mas, após migrar para o harbour em em 2015, está acontecendo uma coisa muito estranha com o meu código (uma das partes) onde tem um determinado achoice.
O problema está no cadastro de compras para o estoque, onde por exemplo existe um local para cadastro de grades (empresas de calçados, por exemplo).
O usuário cadastra apenas um código e gera sub-códigos através da numeração dos calçados (grades) dos tamanhos adquiridos na compra (36,38.. 44, etc).
Acontece que se tiver apenas uma grade cadastrada e o usuário pressionar a tecla (seta para cima UP) o sistema literalmente trava (o relógio showtime prova isso, parando de funcionar).
Agora se tiver 2 ou mais grades cadastradas, o ACHOICE navega entre elas, mas, repito:
se tiver apenas 1 grade e for pressionada a tecla (K_UP) seta para cima, o sistema trava totalmente!
Só consegue sair ou clicando no X da janela ou com o gerenciador de tarefas.
Os meus códigos são os seguintes:
1 - Após cadastrar o produto, vem a quantidade adquirida desse tal produto. Ao pressionar enter e acionada a função GRADE(). Vejam:

Código: Selecionar todos

static function GRADE ()
     local   ARQUIVO  := select (),;
             TECLAS   := {},;
             TELA_ANT := savescreen (0,0,maxrow (),maxcol ())
     // LOCAL bSetKey // acrescentado p/ recuperar a funcionalidade do ESC 29/12/15w.
     // bSetKey := Setkey( K_ESC, NIL ) // isto salva a configuratpo do ESC e volta o ESC ao normal 29/12/15w.
     private GETLIST  := {}
     private nLinGet := 12 // pctoledo em 9/3/15w. // acrescentado neste local em 5/12/15w.

     aadd (TECLAS,{'Esc','Retorna'})
     aadd (TECLAS,{'F1','Help'})
     aadd (TECLAS,{'F2','Utilit rios'})
     aadd (TECLAS,{'F4/Alt F4','Consulta'})
     TECLAS_FUNCAO (TECLAS)
     set key TECLA_CONT_ANT to

     UL := 5 + mQT_GRADE
     if UL > 17
          UL := 17
     endif
     MOLDURA (02,60,UL+2,77,.f.,'Prod./Grade')
     set cursor on
     @ 03,60   say '³ GRADE ³QUANTID.³'
     @ 04,60   say 'ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ´'
     @ UL,60   say 'ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ´'
     @ UL+1,61 say  ' TOTAL ³        '
     @ UL+2,61 say  'ÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄ'
     mIND := 1
     mQT_TOTCOM := 0
     for mI = 1 to mQT_GRADE
         mQT_TOTCOM += val (right (mLINHA [mI],7))
     next
     @ UL+1,69 say transform (mQT_TOTCOM,pQT_COMPRA)
     do while .t.
          mIND := achoice (05,62,UL,75,mLINHA,.T.,'fACHOICE1',mIND)
          
          if lastkey () = 27
               if mQT_TOTCOM <> mQT_COMPRA
                    MENSAGEM ('Quantidade Total nÆo pode ser diferente que quantidade da nota')
                    // clear typeahead // acrescentado para parar de travar na quantidade 0 (zero) 20/2/16w.
                    // clear gets
                    loop
               else
                    // SetKey( K_ESC, bSetKey ) // isto devolve a configuratpo do ESC que estava antes 29/12/15w.
                    exit
               endif
          endif

          aQT_COMP := val (right (mLINHA [mIND],7))
          mQT_COMP := val (right (mLINHA [mIND],7))

          @ 05 + nLinGet,68 get mQT_COMP picture '@Z 999.999' valid fQT_COMP ()
          read
          
          if lastkey () <> 27
               mLINHA [mIND] := left (mLINHA [mIND],07) +;      
                                transform (mQT_COMP,'@Z 999.999')
               GRAVA_GRADE ()
          endif
          mQT_TOTCOM := 0
          for mI = 1 to mQT_GRADE
              mQT_TOTCOM += val (right (mLINHA [mI],7))
          next
          @ UL+1,69 say transform (mQT_TOTCOM,pQT_COMPRA)
     enddo

     TECLAS  := {}
     aadd (TECLAS,{'Esc','Retorna'})
     aadd (TECLAS,{'F1','Help'})
     aadd (TECLAS,{'F2','Utilit rios'})
     aadd (TECLAS,{'F3','Valor Anterior'})
     aadd (TECLAS,{'F4/Alt F4','Consulta'})
     TECLAS_FUNCAO (TECLAS)
     SetKey( K_ESC, bSetKey ) // isto devolve a configuratpo do ESC que estava antes 29/12/15w.
     set key TECLA_CONT_ANT to CONTEUDO_ANTERIOR
     restscreen (0,0,maxrow (),maxcol (),TELA_ANT)
return
A função acima, chama 2 outras funções importantes no processo de funcionamento do achoice.
2 - uma delas é acionada nesta linha: mIND := achoice (05,62,UL,75,mLINHA,.T.,'fACHOICE1',mIND) que é a função FACHOICE:

Código: Selecionar todos

function fACHOICE1(mPAR1,nElement,nRow) // pctoledo em 9/3/15w. // acrescentei em 5/12/15w
   nLinGet := nRow // pctoledo em 9/3/15w. // acrescentei em 5/12/15w
   if lastkey()=13
      return 1
   elseif lastkey()=27
      return 0
   elseif mPAR1=1
      keyboard chr(30)   
   elseif mPAR1=2
      keyboard chr(31)
   endif
return 2
A função acima no original, não tinha os argumentos NELEMENT e NROW, pois foi por este fórum que os nobres professores melhoraram-na pois quando se dava enter o posicionamento fica incorreto.
3 - Agora a próxima função que acho que é importante os senhores observarem é a que está no @GET a função fQT_COMP:

Código: Selecionar todos

static function fQT_COMP ()
     // LOCAL bSetKey // acrescentado p/ recuperar a funcionalidade do ESC 29/12/15w.
     // bSetKey := Setkey( K_ESC, NIL ) // isto salva a configuratpo do ESC e volta o ESC ao normal 29/12/15w.
     LIMPA_MENSAGEM ()
     if EXISTE_REG .or. lastkey () <> K_UP
          if mQT_COMP < 0.001 .or. mQT_COMP > 999.999
               MENSAGEM ('Quantidade deve estar entre 0.001 e 999.999 inclusive')
               // SetKey( K_ESC, bSetKey ) // isto devolve a configuratpo do ESC que estava antes 29/12/15w.
               return (.f.)
          endif

          if mQT_COMP > mQT_COMPRA
               MENSAGEM ('Quantidade nÆo pode ser maior que quantidade da nota')
               // SetKey( K_ESC, bSetKey ) // isto devolve a configuratpo do ESC que estava antes 29/12/15w.
               return (.f.)
          endif

          mQT_TOTCO1 := mQT_TOTCOM - aQT_COMP + mQT_COMP
          if mQT_TOTCO1 > mQT_COMPRA .and. mQT_COMP > 0
               MENSAGEM ('Quantidade Total nÆo pode ser maior que quantidade da nota')
               // SetKey( K_ESC, bSetKey ) // isto devolve a configuratpo do ESC que estava antes 29/12/15w.
               return (.f.)
          endif
     endif
     // SetKey( K_ESC, bSetKey ) // isto devolve a configuratpo do ESC que estava antes 29/12/15w.
return (SAIDA_VALIDA ())
Observem que tem as linhas comentadas: SETKEY e BSETKEY que na tentativa de solucionar o problema o qual não deu certo...
Bom "amiguinhos" (faço minha o jargão do Rochinha/Asimoes), prezados professores, já tem 2 dias no chutômetro tentando entender esse achoice e não consigo, e gostaria da ajuda de todos mais uma vez! :%
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!
rmlazzari
Usuário Nível 2
Usuário Nível 2
Mensagens: 64
Registrado em: 09 Dez 2013 14:18
Localização: são paulo

ACHOICE - travando ao pressionar Tecla UP

Mensagem por rmlazzari »

Puseram a bola na minha frente e mandaram chutar mas sem me mostrar onde está o gol, rs...

Vou inventar os nomes das variáveis, mas você sabe os nomes certos.

Digamos que a variável que guarda o número de grades de um determinado produto seja "QTGRADES".

Então antes de criar a achoice() ou na na própria fachoice() , faça algo assim:

Código: Selecionar todos

if qtgrades < 2 .and. lastkey() = 5 (K_UP)
   (tratamento especial para pegar as quantidades)
else
   (tratamento normal, pegar quantidades, etc...)
endi
Só não me pergunte porque diabos o usuário tecla seta prá cima num achoice de um único elemento, rs...

(Já se, já sei... mandei a bola prá fora do campo, né? rs...)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

ACHOICE - travando ao pressionar Tecla UP

Mensagem por asimoes »

Boa,
Pra que achoice de 1 linha?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

ACHOICE - travando ao pressionar Tecla UP

Mensagem por Kapiaba »

Tente assim:

Código: Selecionar todos

     mIND := achoice ( 05, 62, UL, 75, mLINHA, mIND, "fACHOICE1" )
Abs
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

ACHOICE - travando ao pressionar Tecla UP

Mensagem por microvolution »

asimoes escreveu:Pra que achoice de 1 linha?
opa
na verdade... como já disse é um achoice para grades...
repito, pra facilitar a compreensão novamente:
ex.: digamos que o nosso cliente (comprador do sistema) seja uma loja de calçados.
Aí ele cadastra - conforme NF de compra, uma grade inteira de um único sapato masculino de marca e modelo "fulano de tal"...
vou mostrar na tela abaixo a 2ª fase, pois a primeira (cadastro apenas da nota fiscal e seus encargos):
16-0223 - ACHOICE TRAVOU SISTEMA.png
Como vêem na imagem acima, o simples fato de pressionar a SETA PARA CIMA (K_UP no meu sistema) já travou... não faz mais nada. A não ser clicar no X da janela pra fechar - pois é a única coisa que responde. A prova que está travado é o SHOWTIME, ou seja, o relógio em tempo real para de funcionar, e, é claro, que nenhuma tecla funciona.
Agora, para se sair deste ACHOICE sem travá-lo é pressionando a tecla ESC.
. Vejam, o campo seguinte após pressionar o ESC (não trava):
16-0223 - ACHOICE após pressionar ESC.png
Por favor, vejam agora o mesmo ACHOICE, com as grades (no lugar de UN usou numeração), pois na penúltima imagem o usuário (cliente final) resolveu cadastrar os 10 sapatos com apenas a grade UN.
A imagem abaixo, podem observar que não mais usou a grade UN e sim os tamanhos (grades) de 36 a 44 e já estão todos preenchidos.
- Ah! este é o momento antes de PRESSIONAR A K_UP:
antes de pressionar a tecla UP
antes de pressionar a tecla UP
Agora na imagem abaixo, o cursor já aparece no ACHOICE da grade UN, pois foi pressionado K_UP e não travou. Basta ver a diferença de horários:
após pressionar a tecla K_UP
após pressionar a tecla K_UP
Bom, enquanto eu estava digitando, vários professores escreveram...
Então, pode ser que nas alterações sugeridas, venhamos a resolver esta questão...
Vou testar, e, com todo o respeito que os srs. merecem - o quanto antes, postarei os resultados. Espero que sejam positivos!!!
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:

ACHOICE - travando ao pressionar Tecla UP

Mensagem por microvolution »

Bom, por ser um código menor e mais rápido, tentei o do professor...
Kapiaba escreveu:Tente assim:
mas, infelizmente travou do mesmo jeito!
Esta alteração no mIND... não deu certo, infelizmente :(
Vamos ao outro teste... um instante, por favor!
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:

ACHOICE - travando ao pressionar Tecla UP

Mensagem por microvolution »

ou melhor... irei almoçar e já já volto... vamos almoçar, pra gente reenergizar os neurônios?
:)Pos
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!
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

ACHOICE - travando ao pressionar Tecla UP

Mensagem por Kapiaba »

Compile este exemplo e veja se trava...

Código: Selecionar todos

/*
 * $Id: ac_test.prg 9279 2011-02-14 18:06:32Z druzus $
 */

*+====================================================================
*+
*+    Source Module => E:\MULTI\AC_TEST.PRG
*+
*+    Released to Public Domain.
*+
*+    Functions: Procedure test()
*+               Function cUserFunction()
*+
*+       Tables: use vendor exclusive
*+
*+    Reformatted by Click! 1.10 on Aug-13-1997 at 11:39 pm
*+
*+====================================================================

#include "achoice.ch"
#include "inkey.ch"

*+--------------------------------------------------------------------
*+
*+    Procedure test()
*+
*+--------------------------------------------------------------------
*+
procedure main()

local aPrompts := {;
   "AGRI-PLANTS"                   ,;
   "ALAN R. SMITH GREENHOUSES"     ,;
   "ALLAN MURRAY NURSERY, INC."    ,;
   "APOPKA FOREST"                 ,;
   "LIGHT HOUSE NURSERIES"         ,;
   "BAUCOM'S"                      ,;
   "BAY HILL NURSERY, INC."        ,;
   "BAYWOOD NURSERIES"             ,;
   "BIG OAK NURSERY"               ,;
   "C & N NURSERY"                 ,;
   "CHARLES QUALITY PLANTS"        ,;
   "CONNELL FARMS"                 ,;
   "DEWAR NURSERIES, INC."         ,;
   "DIAMOND T NURSERY"             ,;
   "DISTINCTIVE PALMS NURSERIES"   ,;
   "DONKAY NURSERY"                ,;
   "DOUG INGRAM & SONS NURSERY"    ,;
   "DRIFTWOOD GARDENS, INC."       ,;
   "ELVA PLANT NURSERY, INC."      ,;
   "ERINON"                        ,;
   "EVANS NURSERY"                 ,;
   "FANCY PLANTS"                  ,;
   "FL.PLANT GROWERSCOOP"          ,;
   "FLORIDA CACTUS INC."           ,;
   "FLOWERING TREE GROWERS, INC."  ,;
   "FLOWERWOOD NURSERY"            ,;
   "FOLIAGE FACTORY TOO"           ,;
   "GATOR GROWERS NURSERY, INC."   ,;
   "GAZEBO LANDSCAPE DESIGN, INC." ,;
   "GEM ORNAMENTALS"               ,;
   "GRANNY'S GARDEN"               ,;
   "GRAY'S ORNAMENTALS"            ,;
   "GREEN MASTERS INC."            ,;
   "GREEN MEADOW NURSERY"          ,;
   "PIXLEY'S PLANT PLACE"          ,;
   "HARRISON'S NURSERY, INC."      ,;
   "G & G FOLIAGE"                 ,;
   "IVEY'S NURSERY, INC."          ,;
   "JB NURSERIES, INC."            ,;
   "JON'S NURSERY"                 ,;
   "JONES & JONES NURSERY, INC."   ,;
   "KAGER'S NURSERY"               ,;
   "KIRKLAND'S NURSERY"            ,;
   "LAND OF BROMELIADS"            ,;
   "LANDSCAPE NURSERY, INC."       ,;
   "LIEWALD'S NURSERY INC."        ,;
   "LLOYD & RINGS NURSERY"         ,;
   "LONG VAN DOUNG"                ,;
   "MAPEL'S LANDSCAPE NURSERY"     ,;
   "MILESTONE AGRICULTURE, INC."   ,;
   "MOJICA NURSERY & FRUITS"       ,;
   "NELSON'S ROSES"                ,;
   "PARK GARDENS"                  ,;
   "PAUL LUKAS INC."               ,;
   "PECKETT'S INC."                ,;
   "PENANG NURSERY, INC."          ,;
   "PINES III NURERIES"            ,;
   "PINEVIEW NURSERY"              ,;
   "POUL JENSEN NURSERY"           ,;
   "R.P. WELKER"                   ,;
   "RICHARD ROGERS NURSERY, INC."  ,;
   "SPRING HILL NURSERY"           ,;
   "T.O. MAHAFFEY, JR."            ,;
   "TUCKER NURSERY"                ,;
   "TURTLE POND NURSERY"           ,;
   "TUTTLE'S NURSERY INC."         ,;
   "VALLEY CACTUS"                 ,;
   "WHISPER WINDS, INC."           ,;
   "WHITE ROSE NURSERIES INC."     ,;
   "WOODWAY"                       ,;
   "FLORI-DESIGN"                  ,;
   "GREEN ACRES FOLIAGE, INC"      ,;
   "FLORAL EXPO"                   ,;
   "TORRES NURSERY"                ,;
   "DARRYL KOON"                   ,;
   "TRISTAR NURSERY"               ,;
   "KAY WEST NURSERY"              ,;
   "JAYMAR NURSERY"                ,;
   "J D F LANDSCAPE NURSERY"       ,;
   "DEROOSE PLANTS, INC."          ,;
   "THE TREEHOUSE"                 ,;
   "COSTELLO'S ARECAS, INC."       ,;
   "FLORICO FOLIAGE"               ,;
   "THE NATIVES"                   ,;
   "GREENS NURSERY"                ,;
   "STEWART NURSERIES"             ,;
   "G & T FOLIAGE, INC."           ,;
   "GOOD TIMES NURSERY"            ,;
   "CONCEPTS IN GREENERY, INC."    ,;
   "DUNN BROTHERS CITRUS, INC."    ,;
   "JOHN PLANK GREENHOUSES"        ,;
   "GREENER PASTURES NURSERY"      ,;
   "MULVEHILL NURSERY"             ,;
   "A NU LEAF"                     ,;
   "IVY DESIGNS, INC."             ,;
   "B & C TROPICALS"               ,;
   "SPANISH RIVER NURSERY, INC."   ,;
   "JACK CHRISTMAS & ASSOCIATES"   ,;
   "SPECIALIST GROWERS"            ,;
   "HOMRICH NURSERY, INC."         ,;
   "COUNTRYSIDE FOLIAGE, INC."     ,;
   "RFJ COMPANY"                   ,;
   "LAKE BRANTLEY PLANT CORP."     ,;
   "MARISTYME"                     ,;
   "MERISTEM NURSERY, INC."        ,;
   "TROPIC DECOR - EARL WILSON"    ,;
   "URQUHART'S NURSERY"            ,;
   "ACE PLANT NURSERY"             ,;
   "HATTAWAYS GREENHOUSE, INC."    ,;
   "Florida Plant Growers"         ,;
   "Junior Nursery"                ,;
   "Fox's Nurseries, Inc."         ,;
   "Vaughan Nursery"               ,;
   "MERRYGRO FARMS"                ,;
   "ALL SEASONS NURSERY"           ,;
   "BENCHMARK FOLIAGE"             ,;
   "SAMMY'S NURSERY"               ,;
   "SUNSHINE GROWERS"              ,;
   "Blooming-Fields Nursery"       }

local aPermits := {}
local x        := 1
local nChoice
local ncntr

clear screen
SET EVENTMASK TO INKEY_ALL
setcolor( 'GB+/B,GR+/R,,,W/N' )

asize( aPermits, Len( aPrompts ) )

for x := 1 to Len( aPrompts )
   aPermits[ x ] := !( 'V' $ aPrompts[ x ] )
next

#define TEST1
#ifdef TEST1
for ncntr := 1 to 17
   aPermits[ nCntr ]                       := .F.
   aPermits[ Len( aPrompts ) - nCntr + 1 ] := .F.
next
aPermits[ 32 ] := .F.
aPermits[ 33 ] := .F.
aPermits[ 34 ] := .F.
#endif

nChoice := achoice( 5, 10, 20, 70, aPrompts, aPermits, "cUserFunction" )

setpos( 0, 0 )
* clear screen
? nChoice

if nChoice > 0
   ? aPrompts[ nChoice ]
endif
setpos( maxrow() - 2, 0 )
SET EVENTMASK TO INKEY_KEYBOARD
? "Press a key to end"
Inkey(0)
return

*+--------------------------------------------------------------------
*+
*+    Function cUserFunction()
*+
*+--------------------------------------------------------------------
*+
function cUserFunction( nMode, nCurElement, nRowPos )

local nRetVal := AC_CONT                // Default, Continue
local nKey    := lastkey()
do case
   // After all pending keys are processed, display message
case nMode == AC_IDLE
   @  0,  0 say padr( ltrim( str( nCurElement ) ), 10 )
   nRetVal := AC_CONT                   // Continue ACHOICE()
case nMode == AC_HITTOP                 // Attempt to go past Top
   @  0,  0 say "Hit Top   "
// tone( 100, 3 )
case nMode == AC_HITBOTTOM              // Attempt to go past Bottom
   @  0,  0 say "Hit Bottom"
// tone( 100, 3 )
case nMode == AC_EXCEPT                 // Key Exception
   @  0,  0 say "Exception "
   do case
   case nKey == K_RETURN                // If RETURN key, select
      nRetVal := AC_SELECT
   case nKey == K_ESC                   // If ESCAPE key, abort
      nRetVal := AC_ABORT
   otherwise
      nRetVal := AC_GOTO                // Otherwise, go to item
   endcase
endcase
return nRetVal

*+ EOF: AC_TEST.PRG
rmlazzari
Usuário Nível 2
Usuário Nível 2
Mensagens: 64
Registrado em: 09 Dez 2013 14:18
Localização: são paulo

ACHOICE - travando ao pressionar Tecla UP

Mensagem por rmlazzari »

Apenas como palpite... se até o showtime() para de funcionar mas o botão que fecha a janela não, crendo que quem gerencia essa janela é seu programa e não o Windows, será que esse tecla, K_UP, não está fazendo o programa entrar em loop? Digo será que ter travado showtime() é prova de que o sistema travou mesmo? O que diz o Gerenciador de Tarefas do Windows, durante a travada? Se vc abri-lo antes de abrir seu programa, no momento em que o programa tava, aumenta, diminui ou não muda em nada o uso do processador, o movimento de I/O em disco, em memória... Naquela primeira aba do Gerenciador de Tarefas, aparece "Não está respondendo" ou "Executando"?
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

ACHOICE - travando ao pressionar Tecla UP

Mensagem por microvolution »

rmlazzari escreveu:será que esse tecla, K_UP, não está fazendo o programa entrar em loop?
prezado professor rmlazzari, faz sentido sua interpretação... vou verificar agora mesmo... pois já estou de "barriguinha cheia" rsrs
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:

ACHOICE - travando ao pressionar Tecla UP

Mensagem por microvolution »

rmlazzari escreveu:Apenas como palpite... se até o showtime() para de funcionar mas o botão que fecha a janela não
testei... e faz sentido, pois as outras operações do gerenciador estão se mantendo, mas, o processador está variando entre 44 a 47 % o tempo todo, aliás, agora deu 40% no meu aplicativo...
o loop... parece ser a alternativa mais provável...
vou testar o exemplo do...
Kapiaba escreveu:Compile este exemplo e veja se trava...
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:

ACHOICE - travando ao pressionar Tecla UP

Mensagem por microvolution »

rmlazzari escreveu:Só não me pergunte porque d***** o usuário tecla seta prá cima num achoice de um único elemento, rs...
Então, pegando a deixa no raciocínio do professor RMLAZZARI, fiz as seguintes alterações (apenas os locais onde alterei que vou postar) para funcionar, e a princípio está dando certo... está travando noutro lugar, mas, vai ser resolvido:

Código: Selecionar todos

static function fQT_COMP ()
...
          if mQT_TOTCOM <> mQT_COMPRA
               MENSAGEM ('Quantidade Total nÆo pode ser diferente que quantidade da nota')
               return (.f.)
          endif
...
acrescentei, na verdade mudei de lugar, e explico:

Código: Selecionar todos

static function GRADE ()
...
   do while .t.
         if mQT_GRADE > 1
            mIND := achoice ( 05, 62, UL, 75, mLINHA, .T. , 'fACHOICE1' , mIND)
         endif
          /*
          if lastkey () = 27
               if mQT_TOTCOM <> mQT_COMPRA
                    MENSAGEM ('Quantidade Total nÆo pode ser diferente que quantidade da nota')
                    clear typeahead // acrescentado para parar de travar na quantidade 0 (zero) 20/2/16w.
                    clear gets
                    loop
               else
                    SetKey( K_ESC, bSetKey ) // isto devolve a configuratpo do ESC que estava antes 29/12/15w.
                    exit
               endif
          endif
          */...
          if mQT_GRADE > 1 
               @ 05 + nLinGet, 68 get mQT_COMP picture '@Z 999.999' valid fQT_COMP ()
          else
               @ 05          , 68 get mQT_COMP picture '@Z 999.999' valid fQT_COMP ()
          endif
          read
...
Então, eliminei o LASTKEY()=27, pois está repetido e mudei o mQT_TOTCOM para dentro do fQT_COMP()
Agora está travando em MENSAGEM ('Quantidade Total nÆo pode ser diferente que quantidade da nota'), que fica dentro do fQT_COMP... e pelo meu pouco conhecimento - não sou expert como os renomados professores, é que a variável mQT_TOTCOM ou mQT_COMPRA não estão com os valores corretos...
vou colocar um ? (print) lá dentro pra descobrir e posto aqui o resultado...
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:

ACHOICE - travando ao pressionar Tecla UP

Mensagem por microvolution »

bom... pessoal... antes de encerrar a noite desta terça (23/2)... disse que postaria a imagem. Então vejam, por favor:
16-0223 - achoice - último travamento.png
Então, de acordo com as sugestões recebidas aqui, fiz aquela condição em 2 locais dentro das funções, e, o código principal ficou assim (somente trecho do DO WHILE):

Código: Selecionar todos

     do while .t.
         if mQT_GRADE > 1
            mIND := achoice ( 05, 62, UL, 75, mLINHA, .T. , 'fACHOICE1' , mIND)
         endif
          // mIND := achoice ( 05, 62, UL, 75, mLINHA, mIND, "fACHOICE1" ) // essa linha não deu certo (sugestão PCTOLEDO) ... continua travando o achoice quando tem apenas um elemento 23/2/16w.
         
          if lastkey () = 27
               
               if mQT_TOTCOM <> mQT_COMPRA
                    MENSAGEM ('Quantidade Total nÆo pode ser diferente que quantidade da nota')
                    clear typeahead // acrescentado para tentar parar de travar na quantidade 0 (zero) 20/2/16w.
                    clear gets // acrescentado para tentar parar de travar na quantidade 0 (zero) 23/2/16w.
                    loop
               else
                    exit
               endif
          endif
          
          aQT_COMP := val (right (mLINHA [mIND],7))
          mQT_COMP := val (right (mLINHA [mIND],7))

          if mQT_GRADE > 1 
               @ 05 + nLinGet, 68 get mQT_COMP picture '@Z 999.999' valid fQT_COMP ()
          else
               @ 05          , 68 get mQT_COMP picture '@Z 999.999' valid fQT_COMP ()
          endif
          read
          
          if lastkey () <> 27
                  mLINHA [mIND] := left (mLINHA [mIND],07) +;      
                                transform (mQT_COMP,'@Z 999.999')
                  GRAVA_GRADE ()
          endif
          
          mQT_TOTCOM := 0
          for mI = 1 to mQT_GRADE
              mQT_TOTCOM += val (right (mLINHA [mI],7))
          next
          @ UL+1,69 say transform (mQT_TOTCOM,pQT_COMPRA)
     enddo
Então meus nobres professores...
O único lugar que agora está travando são nessas linhas, que ratifico novamente (elas estão contidas no código acima):

Código: Selecionar todos

         if lastkey () = 27
               if mQT_TOTCOM <> mQT_COMPRA
                    MENSAGEM ('Quantidade Total nÆo pode ser diferente que quantidade da nota')
                    clear typeahead // acrescentado para tentar parar de travar na quantidade 0 (zero) 20/2/16w.
                    clear gets // acrescentado para tentar parar de travar na quantidade 0 (zero) 23/2/16w.
                    loop
               else
                    exit
               endif
          endif
Se colocar uma quantidade 0 (zero) o sistema entra em LOOP e não sai, a não ser clicando no X da janela. As únicas diferenças são:
- que o problema de dentro do achoice está resolvido;
- o travamento agora não para o SHOWTIME.
Já tentei descer essas linhas para ser as últimas antes do ENDDO (que está após a somatória do mQT_TOTCOM) ou mesmo dentro da outra condição, mas, nesse último caso, o MQT_TOTCOM ainda está zerado.

Enfim... alguém me ajuda a fechar esta questão?
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

ACHOICE - travando ao pressionar Tecla UP

Mensagem por asimoes »

Porque você usa showtime?
O windows já disponibiliza isso na barra de tarefas, eu aboli dos meus sistemas mostrar data e hora
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

ACHOICE - travando ao pressionar Tecla UP

Mensagem por Jairo Maia »

Microvolution, tente trocar esse bloco:

Código: Selecionar todos

if lastkey () = 27
       if mQT_TOTCOM <> mQT_COMPRA
              MENSAGEM ('Quantidade Total nÆo pode ser diferente que quantidade da nota')
              clear typeahead // acrescentado para tentar parar de travar na quantidade 0 (zero) 20/2/16w.
              clear gets // acrescentado para tentar parar de travar na quantidade 0 (zero) 23/2/16w.
              loop
       else
             exit
       endif
endif
Por esse, alterando o conteúdo de LastKey():

Código: Selecionar todos

if lastkey () = 27
       if mQT_TOTCOM <> mQT_COMPRA
              MENSAGEM ('Quantidade Total nÆo pode ser diferente que quantidade da nota')

              SetLastKey( 13 )  // mude o conteúdo de LastKey(), que acho que isso está fazendo o loop infinito.

              loop
       else
             exit
       endif
endif
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Responder