Página 4 de 9

Converter de Clipper para Harbour

Enviado: 07 Fev 2015 17:55
por aprendiz_ce
Vou fazer uns teste sim. Pode deixar!
De repente pode precisar algo do tipo:
SET( _SET_EVENTMASK, INKEY_ALL - INKEY_MOVE )
Esse "SET" que você recomenda, já faz parte do Harbour, correto?

Converter de Clipper para Harbour

Enviado: 07 Fev 2015 18:08
por Itamar M. Lins Jr.
Pergunta:

Por acaso tem algo contra mostrar o caminho aos usuários?

Isso de desviar assunto espanta usuários do fórum.
Isso também acontece comigo, o pessoal manda private p/ mim do LetoDb, HBQT, HBIDE... vc é contra a HBIDE ? é contra HBQT ???
Porque eu uso GTWVT, GTWVG, HWgui, etc e tal... e quando perguntam eu respondo.
O rapaz perguntou qual a IDE ? porque ele usa EDIT do DOS, eu apenas recomendei a HBIDE!
Aprender ou não centenas de funções da GTWVG ou aprender HBQT é melhor ? mas É CLARO!!!! QUE É APRENDER HBQT é da mesma pessoa que criou a GTWVG ele mesmo recomenda usarmos a HBQT porque aprender uma coisa que depois vc vai largar para outra melhor ? vai logo p/ melhor... isso não é afugentar ninguém se seu sistema infelizmente ou felizmente ainda roda em DOS digo via PROMPT ok isso é de cada um, mas me aponte algo novo feito em PROMPT ? O programa velho está feito, tudo bem é só para ganhar mais um tempo. Eu apenas estou informando. A pessoa ela que faça a melhor escolha para ela lógico!

Eu não disse que o notepad++ é ruim ou xDev é ruim, eu indiquei outra ferramenta que tem DBU e DEBUG embutido entre outras coisas.
Vc é que está dizendo que na época que vc testou estava com bugs...bla,bla,bla.. Não queira inverter a situação não.

Saudações,
Itamar M .Lins Jr.

Converter de Clipper para Harbour

Enviado: 07 Fev 2015 18:24
por Itamar M. Lins Jr.
Um "LastKey()" dentro de uma função do "DBEdit" não está detectando o toque de teclas. F1, F2 e etc nada, somente ESC. O que pode ser?
Tem que funcionar da mesma forma que no clipper. Qual é a versão do Harbour que vc está usando ?
E poste o código que está com problema, de preferência o menor possível para as outras pessoas analisarem.

Saudações,
Itamar M. Lins Jr.

Converter de Clipper para Harbour

Enviado: 07 Fev 2015 18:36
por aprendiz_ce
Olá Itamar,

Pois é, concordo com você que deveria funcionar, mas deve ser alguma "coisinha".

Segue a parte do código:

Código: Selecionar todos

DBedit(05,16,18,64,oCampo,'DBedit31','',oCabeca,' ')

Function DBedit31
Parameters Modo
Aguarde('F2-Muda ordem "'+IndexKey()+'"')
//Tecla := LastKey()
RetDb := 1
If Modo = 4
   If LastKey() = 27
      RetDb := 0
   ElseIf LastKey() = -1
      If IndexKey() = 'CODIGRU'
         Set Order To 2
      ElseIf IndexKey() = 'DESCGRU'
         Set Order To 1
      Endif
      Go Top
      RetDb := 2
   Endif
Endif
Return (RetDb)

Como dá para perceber não estou usando #include "inkey.ch". Será que é isso? Vou até testar para ver.

Grato pela atenção.

Converter de Clipper para Harbour

Enviado: 07 Fev 2015 18:54
por JoséQuintas
SET( _SET_EVENTMASK, INKEY_ALL - INKEY_MOVE )

Essa é a que uso, que atende o modo geral, que inclui as teclas do mouse, e retira a movimentação do mouse pra não atrapalhar.

A intenção por enquanto é rodar essa rotina isolada, ver se são detectadas as teclas de função.

Lembrando, não sei se é o seu caso, alguns teclados deixam desativar as teclas de função.
Vai que aconteceu isso justo agora.

o inkey.ch é interessante pra não depender do código da tecla.

Mas comece testando aquela rotina isolada.
Vai ficar mais fácil identificar se precisa algo mais.

Converter de Clipper para Harbour

Enviado: 07 Fev 2015 18:54
por Itamar M. Lins Jr.
Outra coisa que acho não prestaram a atenção. A primeira pergunta do rapaz tem uma palavrinha lá não e mesmo ? chamada LINUX!
Então meu amigo, no LINUX esquece xDEV e tudo quando não rodar no LINUX, então GTWVG,GTWVT não vai no LINUX, nem GTWVW...
Para roda 100% no Windows e Linux somente a HBIDE e HBQT modo gráfico ou a HWGUI. Em modo não gráfico sem mexer no código eu dei uma olhada aqui num fonte nosso de 1996... no Linux usamos GTTERM, GTXWC, GTSLN, GTCRS -> eu usava este ultimo nCurses.

Código: Selecionar todos

// Para vc verem que eu já usei essas coisas... GTWVW, GTWVG etc e tals... agora vc já pegam tudo sem bugs, no inicio era dureza!!!

#IFdef __PLATFORM__Windows
  wvw_setcodepage(,255)
  wvw_SetMainCoord( .t. )
  setmode(wvw_maxmaxrow(),wvw_maxmaxcol())

  if gtinfo(GTI_DESKTOPWIDTH) > 1023   
    wvw_SetFont(,'Courer New',29,12)
  else
     wvw_SetFont(, 'Courier New', 22, 10, 0 )
  endif

  set dirseparator("\")
  hb_setcodepage([PTISO])
  hb_langselect([PT])

#ELSE

  hb_settermcp([LINUX],[PT850])
  hb_setcodepage([PTISO])
  hb_langselect([PT])

 Hb_settermcp("LINUX","ACSC")
 set dirseparator("/") 
 set FileCase("lower")
 set DirCase("lower")
#ENDIF
Então vc precisa colocar isso nos fontes separando comando do LINUX e do Windows.
Impressão mesmo é outra coisa que precisa modificar, deverá criar em arquivo p/ depois enviar.

Saudações,
Itamar M. Lins Jr.

Converter de Clipper para Harbour

Enviado: 07 Fev 2015 20:07
por Itamar M. Lins Jr.
Ola!
Peguei aqui na net mesmo esse exemplo. Porque não usam a classe tBrowse ? Não tinha nos livros que esse tal dbedit estava descontinuado ?
http://nelson-pires.blogspot.com.br/201 ... chive.html

Código: Selecionar todos

   @24,0 SAY "SPACE-Tag/Untag ESC-End   F2-List by code    F3-List by name"
   DBEDIT(0,0,20,79,{"IIF(aScan(aTagList,field->code)!=0,'X',' ')",;  
                     "code",;
                     "name"},"myFunc",,{"Tag","Code","Name"})
   DBCLOSEALL()
   RETURN 0

// ------------------------------------------------
// Dbedit Key Handle routine
FUNCTION MyFunc(status, fld_ptr)
   Local nReturn := 1, nKey, nPos
              
   nKey = LASTKEY()
            
   DO CASE
      CASE status == 4
         IF nKey == K_SPACE
            IF (nPos := aScan(aTagList,field->code)) != 0
               ADEL(aTagList,nPos)
               ASIZE(aTagList,LEN(aTagList)-1)
            ELSE
               aadd(aTagList,field->code)
            ENDIF
            nReturn := 2  
         ELSEIF nKey == K_ESC
            nReturn := 0
         ELSEIF nKey == K_F2     
            doReport(1)
         ELSEIF nKey == K_F3     
            doReport(2)  
         ENDIF  
      ENDCASE
              
   RETURN nReturn
No seu exemplo, vc faz diferente usa lastkey() várias vezes, basta ler o buffer do teclado uma vez só.

Saudações,
Itamar M. Lins Jr.

Converter de Clipper para Harbour

Enviado: 07 Fev 2015 20:14
por aprendiz_ce
SET( _SET_EVENTMASK, INKEY_ALL - INKEY_MOVE )

Essa é a que uso, que atende o modo geral, que inclui as teclas do mouse, e retira a movimentação do mouse pra não atrapalhar.

A intenção por enquanto é rodar essa rotina isolada, ver se são detectadas as teclas de função.

Lembrando, não sei se é o seu caso, alguns teclados deixam desativar as teclas de função.
Vai que aconteceu isso justo agora.

o inkey.ch é interessante pra não depender do código da tecla.

Mas comece testando aquela rotina isolada.
Vai ficar mais fácil identificar se precisa algo mais.
Entendido. Já estou fazendo uns teste aqui.

Converter de Clipper para Harbour

Enviado: 07 Fev 2015 20:21
por aprendiz_ce
No seu exemplo, vc faz diferente usa lastkey() várias vezes, basta ler o buffer do teclado uma vez só.
Eu sei, mas é porque antes deu mexer para encontrar o que poderia ser acabei modificando. Observe que tem a variável "tecla" e a mesma esta comentada. Mas pelo visto tanto faz eu fazer lendo o buffer uma única vez ou várias vezes separadamente que no meu caso não funcionou.

Vou dar uma olhada mais criteriosa nisso, pois tenho outras rotinas super extensas aonde o usuário usa um dezena de teclas, comparar como o exemplo passado por você e ver como me saiu.

Mais uma vez obrigado.

Converter de Clipper para Harbour

Enviado: 07 Fev 2015 20:27
por aprendiz_ce

Então vc precisa colocar isso nos fontes separando comando do LINUX e do Windows.
Impressão mesmo é outra coisa que precisa modificar, deverá criar em arquivo p/ depois enviar.
Pois é, o meu objetivo final é chega a colocar o mesmo para rodar no Linux. Mas no meu caso se roda no terminal sem o ambiente gráfico (GNome, KDE e etc) já estaria de bom tamanho. Com relação a impressão, eu já imaginava que seria assim, pois já mexi com o "Clip" (Linux) e nele era dessa forma que deveria ser feito, ou seja, gerar o arquivo depois imprimir.

Converter de Clipper para Harbour

Enviado: 07 Fev 2015 20:41
por JoséQuintas
Acho que faltou outra coisa também, não sei se faz diferença, mas qual a versão do Harbour que está usando?

E naquele programa isolado, aparecem as teclas de função?

Se estiver usando harbour 3.2 ou 3.4, outra coisa que pode ajudar a desvendar o mistério, mas vamos por partes:

Tem lá o projeto em HBP.
Inclua no projeto -inc
Isso é compilação incremental, só compila o que for alterado.

Num primeiro momento, pra forçar recompilação de tudo:

hbmk2 seuprojeto.hbp -rebuild

altere esse fonte que está brigando com ele, só pra que ele mude de data e seja recompilado.

agora recompile com debug:

hbmk2 seuprojeto.hbp -b

e agora é só rodar o programa, teclar ctrl-D, e acompanhar pelo debug pra ver o que acontece nesse módulo.

Converter de Clipper para Harbour

Enviado: 08 Fev 2015 01:39
por Itamar M. Lins Jr.
Não lê não estuda fica difícil, depois acha que é da forma como ele pensa, teorias, teorias... Imagine o Win7 Ultimate como servidor em uma rede com apache... abrindo apenas 240 arquivos ou 255 como queiram... serve para quê ? Um SO que só abre 255 arquivos ???

http://weblogs.asp.net/israelio/max-num ... a-resolved
O rapaz não conseguia abrir 15 arquivos... Sabe porque ?
http://forum.baboo.com.br/index.php?/to ... -arquivos/
o problema ocorre no momento de abrir arquivos simultaneamente e não sequencialmente, desculpe minha falha. O problema também pareçe ser uma limitação real dos sistemas operacionais XP, 2k3 e Vista como mencionado pelo MVP no MS Group e que infelizmente não foi corrigido e muito menos sofre qualquer alteração na mudança do valor do dado Windows no parametro SharedSection.
Tem que abrir um de cada vez se tentar abrir tudo junto da pau! Pelo menos foi isso que entendi.
Com o Windows 2000 server, o limite de identificadores de arquivos abertos foi expandido para 16.384 (conforme observado com "Net Config server"). Enquanto o limite de identificadores de arquivos abertos foi expandido, o erro ainda pode ocorrer a menos que o uso de um circuito virtual separado por cada servidor de Terminal foi ativado.
No 2000 server já abre 16.384 !! conforme nota da MS imagine no Win7/8 segundo Quintas só abre 240 e sou eu que estou fazendo confusão.
http://support.microsoft.com/kb/219956/ ... wsignin1.0

Menos, menos... não viaja na maionese...

Saudações,
Itamar M. Lins Jr.

Converter de Clipper para Harbour

Enviado: 08 Fev 2015 09:09
por JoséQuintas
Sobre minha mensagem do debug: coloquei Ctrl-D, mas é Alt-D, falha minha.
segundo Quintas só abre 240
Eu disse que atualmente meu aplicativo possui 120 arquivos, e como o cliente usa duas janelas, de empresas diferentes, totaliza 240 arquivos.
Isso é diferente de dizer que o limite é 240.
separado por cada servidor de Terminal
Servidor de Terminal, não é o Terminal Service?
Isso seria uso direto no servidor.

Em todo caso, fiz um pequeno teste aqui, e reparei que cada arquivo aberto reserva memória FÍSICA no servidor.
Então a quantidade de memória física no servidor também pode limitar o total de arquivos abertos.

Converter de Clipper para Harbour

Enviado: 09 Fev 2015 09:44
por aprendiz_ce
Acho que faltou outra coisa também, não sei se faz diferença, mas qual a versão do Harbour que está usando?

E naquele programa isolado, aparecem as teclas de função?

Se estiver usando harbour 3.2 ou 3.4, outra coisa que pode ajudar a desvendar o mistério, mas vamos por partes:

Tem lá o projeto em HBP.
Inclua no projeto -inc
Isso é compilação incremental, só compila o que for alterado.

Num primeiro momento, pra forçar recompilação de tudo:

hbmk2 seuprojeto.hbp -rebuild

altere esse fonte que está brigando com ele, só pra que ele mude de data e seja recompilado.

agora recompile com debug:

hbmk2 seuprojeto.hbp -b

e agora é só rodar o programa, teclar ctrl-D, e acompanhar pelo debug pra ver o que acontece nesse módulo.
Olá José Quintas,

Esqueci de mencionar a versão do Harbour que estou usando. Atualmente estou "mexendo" com a 3.2.

Vou seguir todas as suas recomendações e ver se consigo descobrir (debugando) o porque que um função tão simples dessas não está funcionando.

Grato.

Converter de Clipper para Harbour

Enviado: 09 Fev 2015 10:06
por JoséQuintas
Fiz um teste aqui e funcionou normalmente.
Só não funcionou na primeira vez, quando esqueci de abrir o índice.
Também não vai funcionar se ao chamar a rotina não estiver em um dos dois índices por CODGRU ou DESCGRU.
Confirme isso no seu programa.

Aqui a rotina que usei pra teste, baseada na sua:

Código: Selecionar todos

PROCEDURE Main
   SetMode( 25, 80 )
   CLS
   oStru := { { "CODIGRU", "C", 10, 0 }, { "DESCGRU", "C", 10, 0 } }
   dbCreate( "teste", oStru )
   USE teste
   INDEX ON CODIGRU TAG ( "PRIMEIRO" )
   INDEX ON DESCGRU TAG ( "SEGUNDO" )
   APPEND BLANK
   REPLACE CODIGRU WITH "PRIMEIRO", DESCGRU WITH "SEGUNDO"
   APPEND BLANK
   REPLACE CODIGRU WITH "SEGUNDO", DESCGRU WITH "PRIMEIRO"
   USE teste
   SET INDEX TO teste
   SET ORDER TO 1
   DBedit(05,16,18,64,,'DBedit31','',,' ')
   CLOSE DATABASES
   RETURN

FUNCTION DBedit31
   PARAMETERS Modo
   @ 24, 0 SAY 'F2-Muda ordem "'+IndexKey()+'"'
   //Tecla := LastKey()
   RetDb := 1
   If Modo = 4
      If LastKey() = 27
         RetDb := 0
      ElseIf LastKey() = -1
         If IndexKey() = 'CODIGRU'
            Set Order To 2
         ElseIf IndexKey() = 'DESCGRU'
            Set Order To 1
         Endif
         Go Top
         RetDb := 2
      Endif
   Endif
   Return RetDb
E só pra ilustrar, a tela de acompanhando do debug ao teclar F2 na primeira vez, passando aonde tem que passar:
teladebug.png
Se for o caso, compile este programa a parte pra confirmar. Não depende de nada externo.
E verifique no seu programa se o índice é correto. Como F2 só funciona pra essas duas chaves de índice, se estiver em uma terceira não vai funcionar.
Não lembro aonde era, mas lembro de alguma coisa sobre ser obrigado a indicar a ordem default, senão mesmo abrindo índices ficava na ordem zero. Mas faz tempo, não lembro nem se foi no Harbour isso.