Página 2 de 4

TEXTBOX - edição tipo PDV / PAF / ECF

Enviado: 05 Dez 2017 00:36
por microvolution
Hasa, boa noite!

Tentei pegar trecho do programa e compilar como um novo, mas, são tantos os erros que fica grande do mesmo jeito pra eliminar os erros.

Bom, sinceramente, se alguém tiver mais uma opinião pra ajudar a entender se é erro de programação, incompatibilidade, ou qualquer que seja.
O negócio ao clicar na barra de rolagem do GRID_1, além de eliminar os itens já preenchidos nele, há uma interferência nos TEXTBOXs q param de funcionar corretamente.

vlw... Feliz Natal !

GRID_ com falhas

Enviado: 05 Dez 2017 09:11
por microvolution
bom dia amigos de guerra!

Alguém já passou por isso ou tem alguma outra sugestão?
... :%

TEXTBOX - edição tipo PDV / PAF / ECF

Enviado: 05 Dez 2017 11:34
por HASA
:-o
Amigão seguinte, na pasta da MINIGUI/HMG tem a pasta SAMPLES com vários exemplos de Grid provavelmente vc conseguira achar um parecido com o seu.
:)Pos
HASA

TEXTBOX - edição tipo PDV / PAF / ECF

Enviado: 06 Dez 2017 09:41
por microvolution
HASA escreveu: a pasta SAMPLES com vários exemplos de Grid
sim prezado HASA... eu já testei todos.
O que preciso entender mesmo, é o que está causando esse erro de lentidão ao apenas clicar na barra de rolagem.
Se, alguém tiver mais uma dica. :)Pos

TEXTBOX - edição tipo PDV / PAF / ECF

Enviado: 06 Dez 2017 12:06
por MSDN
W de Paula, estou vindo aqui responder sua questão no intuito de ajudar, por favor não entenda o contrário.
Na pasta Minigui\Samples\Aplications , tem uma pasta com o nome Super, é um sistema de pizzaria completo, funciona 100%, não é uma "Brastemp", mas para aprendizado é excelente, assim vc não fica perdido vendo exemplos isolados, e consegue entender o que é como funcionam juntos os componentes gráficos, além do mais, ele usa DBF, que vc já está acostumado.
Se eu fosse vc, olharia e testaria de trás pra frente e do avesso esse exemplo, para aí sim, quando vc vier aqui no fórum, já ter uma base boa.

Abraços

TEXTBOX - edição tipo PDV / PAF / ECF

Enviado: 08 Dez 2017 01:26
por Nascimento
aprendi muito aqui no fórum , sobre a minigui mais o pacote que comprei do amigo MSDN foi onde
comecei a pegar os conceitos , hj tenho meu soft 95% portado
o console foi feito com as telas do miro3
e devagarzinho portando pra minigui
o mais difícil foi manter algumas características do console pois os usuários gostam mais do uso do teclado do que do mouse

TEXTBOX - edição tipo PDV / PAF / ECF

Enviado: 08 Dez 2017 16:24
por rota66
Isso aí Marcelo Neves;

Eu, no início estava bastante apertado com a necessidade de um grande cliente e usei o teu exemplo (sistema para pizzaria) como base para a minha aplicação. Depois fui agregando de acordo com minhas necessidades e fazendo pesquisas no próprio repositótio dos exemplos. Lá existe um exemplo pra quase tudo.

Para 90 % do que foi necessário para portar Clipper -> Harbour/Hmg extended eu encontrei em exemplos práticos no repositório. O resultado é que em menos de 3 meses portei um sistema Fiscal inteiro para Harbour 3.4/HMG-Extended/Mingw.

Aqui não é espaço para curso intensivo for dummies.

TEXTBOX - edição tipo PDV / PAF / ECF

Enviado: 12 Jan 2018 10:18
por microvolution
"W de Paula, estou vindo aqui responder sua questão no intuito de ajudar, por favor não entenda o contrário." absolutamente.
vou experimentar.
obrigado!

TEXTBOX - edição tipo PDV / PAF / ECF

Enviado: 12 Jan 2018 10:22
por microvolution
MSDN, desculpa a minha infantilidade:
"a pasta Minigui\Samples\Aplications"
você se refere à HMG (Harbour MiniGui) ou está referindo-se à HMGE (MiniGui Extend)?

TEXTBOX - edição tipo PDV / PAF / ECF

Enviado: 12 Jan 2018 14:20
por MSDN
Refere-se a MiniGUI Extended.
Amigo, na boa, eu vi suas últimas postagens, mas acredite, não precisa "sofrer" tanto, eu não sou um gênio, e com certeza é raro achar um por ai, mas a gente, como programador, ainda mais do xBase, que não tem muitos por ai, tem que se esforçar sempre, ir atrás, testar, testar e testar, não pode a cada "warning" achar que o mundo acabou, a questão de vc ainda não ter acostumado com programação gráfica, é assim mesmo, eu demorei uns 3 meses até começar a ter segurança e entendimento da transição Clipper para Harbour+MiniGUI, então, tenha calma e muito esforço, conseguir vc consegue, mas....só depende única e exclusivamente de vc....

TEXTBOX - edição tipo PDV / PAF / ECF

Enviado: 31 Jan 2018 19:07
por microvolution
MSDN escreveu:Refere-se a MiniGUI Extended.
Infelizmente não testei pois o meu é HMG, infelizmente não tenho nada da HMG-E.
São tantas as LIBs gráficas - que acho que deveria haver um consenso entre os "mantenedores" que um comando/função que se usa em cada uma serviria para todas. rsrs
É uma tal de HMG, HWGUI, HMGE, HBQT, WVG, WVW, etc... que nem sei como funcionam o básico de cada... aí se a gente for testar tudo, acaba que não dá em nada.
Por hora, estou usando a HMG 3.4.2 e a WVG (JUNTAS na IDE/HMG) para que meu sistema funcione no modo CONSOLE (já migrado pra harbour) e eu acrescente alguns botões gráficos nas telas CONSOLE (recursos estes da WVG) e as novas telas tentando criar os formulários da própria HMG, que seria o caso aqui em questão.

Se eu soubesse que teria essa tantão de problemas, adiaria a questão gráfica, pois uso o ACHOICE e é nele que estou agarrando pra mudar pra o simples GRID, e, que trava do nada.

:%
rsrsrs

TEXTBOX - edição tipo PDV / PAF / ECF

Enviado: 04 Fev 2018 00:20
por microvolution
boa noite! ou melhor boa madrugada!
então, tô aqui revisando o(s) código(s) do GRID, mas, infelizmente não consigo entender o que está causando o erro - que é o mesmo desde a minha primeira postagem.
Vou explicar o que quero fazer com outras palavras:
1 - estou desenvolvendo uma tela de frente de loja 100% gráfica na lib HMG 3.4.4;
2 - o "usuário" ao fazer a venda para o "cliente", vai lançando os produtos individualmente - tipo no supermercado;
3 - cada produto que finaliza vai sendo mostrado num GRID - um após o outro. Até aí tudo bem;
4 - só que se o "usuário" - no caso euzinho aqui, clicar na barra de rolagem do GRID, o sistema fica todo doido - parece um tipo de bug;

E, aí, não consigo entender e resolver. Aí vem a "velha" questão:
- qual LIB usar?
a) pensei que GTWVW ou GTWVG me atenderiam - pois praticamente ela é estilo console, mas, pode ser 100% gráfica, 100% console, ou MIX - mas, neste caso ela não tem um GRID;
b) conheci a HMG e me apaixonei à primeira vista, pois tem uma IDE - que apesar de ser bem simples, no meu caso, facilita a compilação - que faço dentro dela, e, através dela abro os PRGs para alterações... show.
c) descobri também, que a HMG 3.4.4 já vem com a GTWVG inclusa na pasta contrib, e, aí fiquei mais animado ainda, pois posso compilar meu aplicativo com as 2 LIBs numa boa;
d) então, pensei, os novos módulos, posso tentar fazer em 100% GUI, usando a HMG. E, foi aí que tudo começou e deu pau logo numa coisa tão simples que é o/a GRID.

Por favor, socooooorro Roberto Lopez, Dr. Sotto, Bedi, sZakats, Pablo, Toledo, Sygecom, MSDN, Nascimento, Itamar, Quintas, Hasa, sei lá... alguém... quem tem uma ideia?

Vc pode perguntar: posta pra nós os códigos: qual parte? pois já postei, de repente, algo que ainda não vi...

help-me!!!

TEXTBOX - edição tipo PDV / PAF / ECF

Enviado: 04 Fev 2018 01:17
por microvolution
BOM, agora já é 01:11h da matina.
Uma coisa "tal tola" mas cheguei à conclusão.
Os itens são lançados no GRID à medida que os produtos "são passados no PDV";
Então, percebi que o GRID após ser criado ele:
1 - está sem nenhuma informação;
2 - como está sem informação, não há a barra de rolagem - rolar o quê?;
3 - quando é lançado no GRID o primeiro item, surge então a barra de rolagem;
4 - interessante que com apenas um 1 item, ao clicar (e segurar o click do botão esquerdo) na barra de rolagem ela não trava;
5 - com isso o sistema continua funcionando perfeita;
6 - mas, ao adicionar um novo item/produto, ele aparece na segunda linha do GRID;
7 - se não clicar no barra de rolagem posso continuar lançando produtos que tudo dá certo;
8 - mas, se após o segundo item lançado se clicar na barra de rolagem, aí o sistema "fica doidão" - mamonas assassinas, rsrrs;

Então, não sei o que fazer.
Quando começo a empolgar e concluir que a HMG junto com a GTWVG é o que resolverá meus problemas, percebo que volto à estaca zero.
Aí dá vontade de "esquecer que um dia aprendi programação - há 31 anos atrás" e voltar no passado e virar pedreiro, carpinteiro, contabilista, etc...

ah! se existisse "máquina do tempo" rsrsrs

TEXTBOX - edição tipo PDV / PAF / ECF

Enviado: 04 Fev 2018 01:52
por Claudio Soto
microvolution escreveu:BOM, agora já é 01:11h da matina.
Uma coisa "tal tola" mas cheguei à conclusão.
Os itens são lançados no GRID à medida que os produtos "são passados no PDV";
Então, percebi que o GRID após ser criado ele:
1 - está sem nenhuma informação;
2 - como está sem informação, não há a barra de rolagem - rolar o quê?;
3 - quando é lançado no GRID o primeiro item, surge então a barra de rolagem;
4 - interessante que com apenas um 1 item, ao clicar (e segurar o click do botão esquerdo) na barra de rolagem ela não trava;
5 - com isso o sistema continua funcionando perfeita;
6 - mas, ao adicionar um novo item/produto, ele aparece na segunda linha do GRID;
7 - se não clicar no barra de rolagem posso continuar lançando produtos que tudo dá certo;
8 - mas, se após o segundo item lançado se clicar na barra de rolagem, aí o sistema "fica doidão" - mamonas assassinas, rsrrs;

Então, não sei o que fazer.
Quando começo a empolgar e concluir que a HMG junto com a GTWVG é o que resolverá meus problemas, percebo que volto à estaca zero.
Aí dá vontade de "esquecer que um dia aprendi programação - há 31 anos atrás" e voltar no passado e virar pedreiro, carpinteiro, contabilista, etc...

ah! se existisse "máquina do tempo" rsrsrs
Por favor postear el código de un ejemplo donde se presenta el problema.

TEXTBOX - edição tipo PDV / PAF / ECF

Enviado: 04 Fev 2018 16:34
por microvolution
Claudio Soto escreveu:Por favor postear el código de un ejemplo donde se presenta el problema.
Dr. Soto, pra mim é uma honra tê-lo aqui no meu humilde tópico.
Bom, já postei desde o início deste tópico, mas, para não lhe cansar muito vou postar novamente, e aproveito pra acrescentar outras partes do código deste PRG que ainda "euzinho" não tinha julgado como necessário.
Todas as linhas deste PRG foram aproveitadas de outro PRG que faz a mesma coisa em MODO CONSOLE e que usa o ACHOICE pra fazer o que eu quero. Neste caso fiz modificações nas linhas, comentei muitas, e, eliminei outras partes que percebi não serem necessárias. Ah! pelo que entendi o ACHOICE é substituído pelo GRID, e, é isso que preciso que funcione.
Eis as linhas iniciais - não todas pra não ficar muito grande, deste PRG↓:

Código: Selecionar todos

set cursor on
// set delimiters to DELIMITADORES // eliminado temporariamante por usar HMG em modo GUI 7/12/17W
// set delimiters on // eliminado temporariamante por usar HMG em modo GUI 7/12/17W
// set intensity on // eliminado temporariamante por usar HMG em modo GUI 7/12/17W
// set key TECLA_HELP to HELP_CAMPO // modificado pela linha abaixo 7/12/17w
// on key TECLA_HELP of HELP_CAMPO
// TELA_PADRAO (procname (),'Or‡amento FDL GUI',COR_PADRAO) // esta fun‡ao foi desabilitada e tudo ‚ feito em TELA_ENTRADA_GUI() // 6/11/17w
// setcolor (COR_PADRAO) // eliminado temporariamante por usar HMG em modo GUI 7/12/17W
ABERTURA ()
select ('DCI10016')
INICIALIZA_CAMPOS ()
// MsgInfo('Ap¢s ABERTURA() e INICIALIZA_CAMPOS')
ATUALIZA_CONTEUDO_ANTERIOR ()
// do while .not. (FIM)
     // INICIALIZA_CAMPOS ()
     // TELA_ENTRADA ()
     // TELA_ENTRADA_GUI ()
     TELA_ENTRADA_GUI (procname (),'Orçamento FDL GUI',COR_PADRAO)
     // MsgInfo('Ap¢s TELA_ENTRADA_GUI')
     // TRATA_CAMPOS ()
     // EXIT // PROVISŸRIO 14/3/16w.
     // TRATA_CAMPOS_GUI () // integrei essa fun‡ao ao TELA_ENTRADA_GUI // 6/11/17w
     // MsgInfo('Ap¢s TRATA_CAMPOS_GUI')
     // if .not. FIM
        //   PEDE_OPCAO ()
     // endif
// enddo
close all
set (_SET_CURSOR,SALVA_CURSOR)
set (_SET_DELIMITERS,SALVA_DELIMITERS)
set (_SET_INTENSITY,SALVA_INTENSITY)
setcolor (SALVA_COR)
restscreen (0,0,maxrow (),maxcol (),SALVA_TELA)
return
Observe-se acima que comentei ("//" ou com "/* */" ou com "**" ou simplesmente "*") por entender que em 100% GUI não são necessárias.
As linhas abaixo são da função que cria o formulário:

Código: Selecionar todos

static function TELA_ENTRADA_GUI (PROGRAMA,SUB_TITULO,COR,ELEMENTO)
   hb_Default(@ELEMENTO, space(1)  )
   mCD_VENDED := mCDOPERADO
   Private fColor := { || if ( This.CellRowIndex/2 == int(This.CellRowIndex/2) , { 0,0,255 } , { 0,255,0 } ) }	

   mI := 1 // coloquei pra nao dar erro de limite de array 22/11/17w
 
   DEFINE WINDOW Frm_TELA_ENTRADA ;
      AT GetDesktopRealTop(),GetDesktopRealLeft() ;
      WIDTH GetDesktopRealWidth() HEIGHT GetDesktopRealHeight() ;
      TITLE PROGRAMA + SPACE (7) + SUB_TITULO ;
      CHILD ;
      ON INTERACTIVECLOSE CONFIRMA4 ('Deseja Cancelar sem Concluir', 6 ,'SiCCA v3.6.04 - Orçamento')       // para confirmação
      // TITLE 'Or‡amento FDL GUI' ;
      // AT 0,0 ;
      // WIDTH 800 ;
      // HEIGHT 600 ;
      // VIRTUAL WIDTH 1300 ;
      // VIRTUAL HEIGHT 800 ;

      
                        @ 410 ,  20 LABEL Label_0 ; // t¡tulo sub-total
                           VALUE 'SUBTOTAL' ;
                           AUTOSIZE // ;

                        @ 495 , 100 LABEL Label_0A ; // Informe o produto para o usu rio digitar
                           VALUE 'Informe o Produto...' ;
                           FONTCOLOR { 255, 0, 0 } ;
                           FONT "Arial" SIZE 24    BOLD ;
                           AUTOSIZE // ;

                        @ 250 , 460 LABEL Label_0B ; // nome da MVinfo
                           VALUE 'MVinfo Sistemas' ;
                           FONTCOLOR { 255, 0, 0 } ;
                           FONT "Arial" SIZE 24    BOLD ;
                           AUTOSIZE // ;
                        
                        @ 290 , 460 LABEL Label_0C ; // telefone da MVinfo
                           VALUE 'Fone(31) xxxx-xxxx' ;
                           AUTOSIZE // ;

                        // @ 310 , 460 LABEL Label_0D ;
                        // VALUE 'www.mvinfo.wmx.net.br' ;
                        // AUTOSIZE // ;

                        @ 10 ,  10 LABEL Label_1 ; // nome do operador do computador/sistema
                           VALUE 'Operador : '  + transform ( mCDOPERADO , pCDOPERADO ) ;
                           AUTOSIZE // ;

                        @ 10 , 150 LABEL Label_2 ; // nome do vendedor 
                           VALUE 'Vendedor : ' + strzero( mCD_VENDED ) ;
                           AUTOSIZE // ;

                        @ 10 , 300 LABEL Label_3 ; // no or‡amento anterior
                           AUTOSIZE ;
                           VALUE HB_AnsiToOem('Orçamento Anterior : ') +  transform ( aNU_VENDA  , pNU_VENDA ) // ;

                        @ 10 , 600 LABEL Label_4 ; // data do or‡amento
                           AUTOSIZE ;
                           VALUE HB_AnsiToOem('Data do Orçamento: ') + transform ( mDT_VENDA  , pDT_VENDA ) // ;
                        
                        @ 375, 479 LABEL Label_5 ; // aqui vai o nome do produto mNMPRODUTO 6/11/17w
                           VALUE '';
                           FONTCOLOR { 255, 200, 100 } ;
                           AUTOSIZE // ;
                           /*FONT "Arial" SIZE 14    BOLD ;*/

                        @ 375, 670 LABEL Label_6 ; // aqui vai o valor unit rio do produto mVRPRODUTO 6/11/17w
                           VALUE '';
                           FONTCOLOR { 255, 100, 200 } ;
                           AUTOSIZE // ;
                        /*FONT "Arial" SIZE 14    BOLD ;*/
                       
                        @ 325, 479 LABEL Label_7 ; // c¢digo do produto
                           AUTOSIZE ;
                           VALUE HB_AnsiToOem('Código do Produto') // acrescentado para informar ao usu rio que ‚ pra digitar o CàDIGO do produto

                        @ 325, 700 LABEL Label_8 ; // quantidade do produto a ser lan‡ado na nota
                           AUTOSIZE ;
                           VALUE 'Quant' // acrescentado para informar ao usu rio que ‚ pra digitar o CàDIGO do produto

                        @ 342 , 650 LABEL Label_11 ; // "x" que representa a multiplica‡ao do produto
                           VALUE 'X' ;
                           FONTCOLOR { 255, 0, 0 } ;
                           FONT "Arial" SIZE 24    BOLD ;
                           AUTOSIZE // ;

                        @ 430 , 20 LABEL Label_12 ; // para usar com mVT_MERCAD 14/11/17w
                           VALUE '' ;
                           FONT "Arial" SIZE 14    BOLD ;
                           AUTOSIZE

                        @ 450 , 20 LABEL LABEL_13 ; // para usar com mVR_DESCON 14/11/17w
                           AUTOSIZE ;
                           FONT "Arial" SIZE 14    BOLD ;
                           VALUE ''

                        @ 470 , 20   LABEL LABEL_14 ; // para usar com mVT_VENDA 14/11/17w
                           AUTOSIZE ;
                           FONT "Arial" SIZE 14    BOLD ;
                           VALUE ''

                        define GRID grid_1
                           row 50
                           col 08
                           WIDTH 440 
                           HEIGHT 350 
                           HEADERS {HB_AnsiToOem('Código'),HB_AnsiToOem('Descrição do Produto'),'Gr','Qte','Vr.Unit.','Total'}  // codigo=numeric | descri‡ao=textbox | gr=textbox | qte=numeric | vr.unit=numeric | total=numeric
                           WIDTHS {100,240,30,50,100,120}
                           ColumnCONTROLS { {'TEXTBOX','NUMERIC', '999999999999'} , 'TEXTBOX' , 'TEXTBOX' , 'TEXTBOX' , 'TEXTBOX' , 'TEXTBOX' } 
                           DYNAMICFORECOLOR { fColor , fColor , fColor , fColor , fColor , fColor } 
						   // VIRTUAL .t.
						   // ITEMCOUNT 1
                           // lines .f.
                           // cellnavigation .t.
                           // EDITOPTION GRID_EDIT_DEFAULT
                           // allowedit .t.
                        end GRID
                           // EDIT
                        

                        
                        @ 345 , 470 TEXTBOX txtCDPRODUTO  WIDTH 150 HEIGHT 30 FONTCOLOR BLUE BOLD NUMERIC MAXLENGTH 13  FONT "Arial" SIZE 14  ON ENTER { || fCDPRODUTO_GUI () }  // INPUTMASK '9999999999999' FORMAT 'E' PARENT Frm_TELA_ENTRADA 
                        @ 345 , 700 TEXTBOX txtQT_VENDA   PARENT Frm_TELA_ENTRADA WIDTH  50 HEIGHT 30 FONTCOLOR BLUE BOLD NUMERIC  MAXLENGTH 07 FONT "Arial" SIZE 16  ON ENTER { || fQT_VENDA_GUI ()  }  // INPUTMASK pQT_VENDA FORMAT 'E' 
                        // MsgInfo('dentro do CAD_PRODUTOS_GUI() ap¢s do textbox txtQT_VENDA')

      DEFINE STATUSBAR PARENT Frm_TELA_ENTRADA
         STATUSITEM " MVinfo Sistemas e Automação - www.mvinfo.wmx.net.br | microvolution@hotmail.com | (31) xxxx-xxxx "
         STATUSITEM "clock"
      END STATUSBAR
      
      DEFINE TIMER tempo PARENT Frm_TELA_ENTRADA ;
         INTERVAL 1000                 ;
         ACTION ShowTime()

      // OPCOES_CAMPOS ()  // eliminado temporariamante por usar HMG em modo GUI 7/12/17W
      // TRATA_DADOS_GUI () // substitu¡ para CAD_PRODUTOS_GUI 7/11/17w
      // MsgInfo('antes do CAD_PRODUTOS_GUI()') // linha tempor ria 10/11/17w
      // CAD_PRODUTOS_GUI()

    END WINDOW
      Frm_TELA_ENTRADA.txtCDPRODUTO.SetFocus

      CENTER WINDOW   Frm_TELA_ENTRADA
      ACTIVATE WINDOW Frm_TELA_ENTRADA
 ******** FORMUL†RIO PADRŽO DO WINDOWS PARA HARBOUR 5/3/15W ***********************************
 **********************************************************************************************
return         
Dr. Soto, esta é a tela do formulário criado e sem nenhum lançamento↓:
GRID sem nenhum lançamento ainda
GRID sem nenhum lançamento ainda
Agora a tela abaixo já é no momento em que digito o código do primeiro produto - no caso código 17 pressionado já o ENTER e digitado a quantidade - UMA no caso, e, só esperando o ENTER pra ser enviado o produto para o GRID↓:
GRID ainda sem nenhuma informação... mas após o ENTER as informações do produto digitado serão lançadas nele
GRID ainda sem nenhuma informação... mas após o ENTER as informações do produto digitado serão lançadas nele
A próxima tela já mostra o produto transferido para o GRID após o ENTER ↓:
GRID já com o produto lançado nele
GRID já com o produto lançado nele
Agora a tela abaixo é exatamente no momento de se clicar com o botão esquerdo (isso mesmo), segurar e arrastar a barra de rolagem pra gente ver mais detalhes do produto. De madrugada, cheguei a pensar que só acontecia após o lançamento do segundo produto, mas, não, já a partir do primeiro produto, o, GRID some o que já foi lançado e trava o FORMULÁRIO (não por completo, mas, os TEXTBOXs param de funcionar, etc) ↓:
GRID travado e os dados somem - não importa quantos já tenham sido lançados, todos somem dele
GRID travado e os dados somem - não importa quantos já tenham sido lançados, todos somem dele
Agora, o código abaixo, pertence à função que trata o TEXTBOX de digitação do CÓDIGO DO PRODUTO↓:

Código: Selecionar todos

static function fCDPRODUTO_GUI ()
     local ARQUIVO := select ()
    
     mCDPRODUTO := Frm_TELA_ENTRADA.txtCDPRODUTO.value // mudei para o final da fun‡ao 22/11/17w
          if empty(Frm_TELA_ENTRADA.txtCDPRODUTO.value)
               MsgExclamation ('Preenchimento obrigat¢rio','Or‡amento FDL GUI - SiCCA v3.6.04')
               CONSULTA_ARQUIVO ('','','MCDPRODUTO')
               select (ARQUIVO)
               return (.f.)
          endif
          if Frm_TELA_ENTRADA.txtCDPRODUTO.value < 1 .or. Frm_TELA_ENTRADA.txtCDPRODUTO.value > 9999999999999
               MsgInfo ('C¢digo do Produto deve estar entre 1 e 9999999999999 inclusive','Or‡amento FDL GUI - SiCCA v3.6.04') // era 3.6.03 em 31/5/16w
               select (ARQUIVO)
               return (.f.)
          endif
          select ('DCI10010')
          if .not. EXISTE (str (mCDPRODUTO,13))
               MsgExclamation ('C¢digo do Produto n„o cadastrado','Or‡amento FDL GUI - SiCCA v3.6.04') // era 3.6.03 em 31/5/16w
               CONSULTA_ARQUIVO ('','','MCDPRODUTO')
               select (ARQUIVO)
               return (.f.)
          endif
          mDSPRODUTO := left (DSPRODUTO,32)       // Modificado p/Walcledson em 09/05/01 p/func. mt, cm, kg, etc.
          mVR_UNITAR := VR_PREVEN*(1+(mVR_PERJUR/100))
          Frm_TELA_ENTRADA.Label_5.value := mDSPRODUTO
               mCD_GRADE := DSUNIDADE       // Acrescentado em 27/1/3w para puchar uma grade b sica na venda.
          keyboard chr(13)
          select (ARQUIVO)
     mLINHA[mI,01] := mCDPRODUTO
     mLINHA[mI,02] := mDSPRODUTO
     mLINHA[mI,03] := mCD_GRADE
     Frm_TELA_ENTRADA.txtQT_VENDA.Enabled    := .t.
     Frm_TELA_ENTRADA.txtQT_VENDA.SetFocus
return (SAIDA_VALIDA ())
Já as linhas abaixo são da função que trata da quantidade de produto na venda ↓:

Código: Selecionar todos

static function fQT_VENDA_GUI ()
     select ('DCI10016')
     if mQT_ESTOQ2 = nil
          mQT_ESTOQ2 := DCI10014->QT_ESTTOT     // Esta linha busca do estoque da grade atual. 28/9/2w
     endif

     mQT_VENDA := Frm_TELA_ENTRADA.txtQT_VENDA.value // mudei para o final da linha 22/11/17w
     ON KEY F6     OF Frm_TELA_ENTRADA                     ACTION ALT_QUANT_ESTOQUE_GUI()

          if Frm_TELA_ENTRADA.txtQT_VENDA.value < 0.001 .or. Frm_TELA_ENTRADA.txtQT_VENDA.value > 999.999
               MsgInfo ('Quantidade deve estar entre 0.001 e 999.999 inclusive','Or‡amento FDL GUI - SiCCA v3.6.04') // era 3.6.03 em 31/5/16w
               return (.f.)
          endif

     if Frm_TELA_ENTRADA.txtQT_VENDA.value > 0 .and. Frm_TELA_ENTRADA.txtQT_VENDA.value > mQT_ESTOQ2
          MsgInfo ('Quantidade de venda n„o pode ser maior que quantidade em estoque!...','Or‡amento FDL GUI - SiCCA v3.6.04') // era 3.6.03 em 31/5/16w
          return (.f.)
     endif

     set key K_F6 to 
     // release key K_F6 on Frm_TELA_ENTRADA
     release mQT_ESTOQ2
     mLINHA[mI,04] := mQT_VENDA
     mLINHA[mI,05] := mVR_UNITAR
     mLINHA[mI,06] := mLINHA[mI,05] * mLINHA[mI,04] // vr.unit rio x qt 22/11/17w

     Frm_TELA_ENTRADA.Label_6.value          := mVR_UNITAR
     Frm_TELA_ENTRADA.txtCDPRODUTO.Value     := 0
     Frm_TELA_ENTRADA.txtQT_VENDA.Enabled    := .f.
     Frm_TELA_ENTRADA.txtCDPRODUTO.Enabled   := .t.
     Frm_TELA_ENTRADA.txtCDPRODUTO.SetFocus
     Frm_TELA_ENTRADA.Grid_1.AddItem ( { mLINHA[mI,01] , mLINHA[mI,02] , mLINHA[mI,03], mLINHA[mI,04], mLINHA[mI,05], mLINHA[mI,06] } )      mI += 1 // total de produtos na venda/or‡amento 22/11/17w
     keyboard K_ENTER
return (SAIDA_VALIDA ())
Bom, pelo pouco que entendi desse processo do GRID, a única coisa que faz em RUN-TIME para que os produtos aparecem nele é a única linha que está na função fQT_VENDA_GUI acima, que re-escrevo-a aqui pra sua apreciação:

Código: Selecionar todos

     Frm_TELA_ENTRADA.Grid_1.AddItem ( { mLINHA[mI,01] , mLINHA[mI,02] , mLINHA[mI,03], mLINHA[mI,04], mLINHA[mI,05], mLINHA[mI,06] } )      mI += 1 // total de produtos na venda/or‡amento 22/11/17w
Minhas observações que tenho a fazer:
1 - talvez está dando pau, pois, não sei como reagir ao modo GUI que é 100% controlado por EVENTOS - e isso ainda não entrou em minha mente, pois a gente que veio de CLIPPER fica sempre esperando um ENTER, ou ESC ou F1-F12 pra que o processador execute alguma tarefa;
2 - talvez o GRID não seja a solução que eu preciso para substituir o ACHOICE;
3 - talvez a maneira com que a ARRAY mLINHA[X,X] seja a causadora do problema;
4 - talvez as linhas que chamam funções na linguem"C" bem no início é que estão causando a "pane" ou "bug" no GRID, as quais coloco-as abaixo para sua apreciação:

Código: Selecionar todos

         **************************************************************************************************************
         ** linhas abaixo acrescentadas para funcionar corretamente os BOXES PANEL/BOX 18/6/15w
         #xcommand DRAW PANEL IN WINDOW <parent> ;
            AT <frow>,<fcol> ;
            TO <trow>,<tcol> ;
            =>;
            DrawWindowBoxRaised( <"parent">, <frow>, <fcol>, <trow>, <tcol> )

         #xcommand DRAW BOX IN WINDOW <parent> ;
            AT <frow>,<fcol> ;
            TO <trow>,<tcol> ;
            =>;
            DrawWindowBoxIn( <"parent">, <frow>, <fcol>, <trow>, <tcol> )
         ** linhas acima acrescentadas para funcionar corretamente os BOXES PANEL/BOX 18/6/15w
         **************************************************************************************************************
Agora, tirando o GRID, tenho outras observações no geral a fazer que ainda não sei resolver:
1 - o INTERACTIVEONCLOSE do formulário↓:

Código: Selecionar todos

      ON INTERACTIVECLOSE CONFIRMA4 ('Deseja Cancelar sem Concluir', 6 ,'SiCCA v3.6.04 - Orçamento')       // para confirmação
até pede confirmação, mas, não aparece em primeiro plano - fica escondido atrás do formulário, sendo necessário um ALT+TAB pra que ele venha para a frente;
2 - Comentei diversas linhas pertencentes à criação do GRID (do exemplo que peguei na pasta SAMPLES), por não entender bem o que elas fazem ↓:

Código: Selecionar todos

			   // VIRTUAL .t.
			   // ITEMCOUNT 1
                           // lines .f.
                           // cellnavigation .t.
                           // EDITOPTION GRID_EDIT_DEFAULT
                           // allowedit .t.
3 - observer-se que no TEXTBOX também comentei algumas funções pois não sei porque está dando erro de sintaxe ↓:

Código: Selecionar todos

                        @ 345 , 470 TEXTBOX txtCDPRODUTO  WIDTH 150 HEIGHT 30 FONTCOLOR BLUE BOLD NUMERIC MAXLENGTH 13  FONT "Arial" SIZE 14  ON ENTER { || fCDPRODUTO_GUI () }  // INPUTMASK '9999999999999' FORMAT 'E' PARENT Frm_TELA_ENTRADA 
no caso acima, são o INPUTMASK, o FORMAT e o PARENT. Já tentei de tudo, mas, eles não dão certo.
4 - Ao final da criação do WINDOW com o END WINDOW e antes do CENTER/ACTIVATE WINDOW, coloco a linha onde dá direciona o SETFOCUS ↓:

Código: Selecionar todos

END WINDOW
[b]      Frm_TELA_ENTRADA.txtCDPRODUTO.SetFocus[/b]
      CENTER WINDOW   Frm_TELA_ENTRADA
      ACTIVATE WINDOW Frm_TELA_ENTRADA
5 - se eu movimentar o mouse (ponteiro) por toda a tela, apresenta o seguinte erro na linha 4013:
ERROR BASE/1070 Erro nos Parâmetros: ==
Veja a tela do erro, por favor:
erro de RUN-TIME
erro de RUN-TIME
A linha 4013, contém apenas:

Código: Selecionar todos

ACTIVATE WINDOW Frm_TELA_ENTRADA
6 - Talvez seja este o causador do problema. Um loop de ATIVAÇÃO do WINDOW Frm_TELA_ENTRADA que não sei donde vem. Só sei que nem sempre ele aparece. Mas, quando aparece é pelo movimento do ponteiro do mouse nalguma parte do WINDOW Frm_TELA_ENTRADA.

Bom, voltando ao GRID, pra facilitar o entendimento da array/matriz mLINHA[X,X] explico-a com mais detalhes:
- ela é no formato n,6 elementos (onde "n" é limitado ao máixmo de 16), representando a quantidade máxima de produtos na venda. Neste caso, 16 produtos. Já o segundo parâmetro dela, são os itens do produto, que são:
- mLINHA[n,01] := "armazena o CÓDIGO DO PRODUTO. No nosso exemplo aqui = 17"
- mLINHA[n,02] := "armazena o NOME DO PRODUTO. No nosso exemplo = KIT EMBREAGEM
- mLINHA[n,03] := "armazena a GRADE - exemplo: UN, PC, PT etc
- mLINHA[n,04] := "quantidade de itens do produto lançado
- mLINHA[n,05] := "valor unitário do produto - preço de venda"
- mLINHA[n,06] := mLINHA[n,05] * mLINHA[n,04] = "valor total deste produto: VALOR DELE X QUANTIDADE"

Bom, espero que não lhe tenha cansado muito, mas, que o Sr. Dr. Soto, ou demais colegas, possam me dar uma luz no "fim do túnel" e euzinho saia deste problemão de uma coisa que parece ser tão simples.
Meu comentário final!!!
Talvez por ser simples e por estar acostumado com PROCEDURES esperando alguma coisa do TECLADO é que seja a chave pra abrir a porta e ver a luz no fim do túnel.