Página 2 de 2

Define window

Enviado: 10 Jul 2015 20:15
por Toledo
Amigo, como você chama esta tela de login?

Na mensagem abaixo tem um demo com tela de Login que pode servir de exemplo:
Menu com nível

Abraços,

Define window

Enviado: 18 Mar 2016 19:57
por microvolution
OLÁ PESSOAL boa noite!
Depois de 8 meses estou de volta aqui, para tentar entender melhor o conceito de formulários window (janelas) da MiniGUI HMG.
Bom, tenho um aplicativo que faz um combo entre GTWVG (gráfica) com formulários da HMG.
Para isso funcionar, aciono primeiramente um form WINDOW MAIN sem nada e o minimizo no ON INIT.
Bom, a partir daí tudo é da GTWVG.
Mas, num determinado momento, o usuário ao abrir um módulo de vendas (tudo isso dentro do mesmo .EXE). chamo um formulário MODAL, que é o seguinte bloco de código:

Código: Selecionar todos

static function TELA_ENTRADA_GUI ()
 **********************************************************************************************
 ******** FORMULÁRIO PADRÃO DO WINDOWS PARA HARBOUR 5/3/15W APENAS PARA EFEITO DIDÁTICO *******
   mCD_VENDED := mCDOPERADO // o vendedor automaticamente passa a ser o operador, pra diminuir ainda mais a digitação 2/3/16w.
 
   DEFINE WINDOW Frm_TELA_ENTRADA ;
      AT GetDesktopRealTop(),GetDesktopRealLeft() ;
      WIDTH GetDesktopRealWidth() HEIGHT GetDesktopRealHeight() ;
      TITLE 'Orçamento FDL GUI' ;
      MODAL
   
                        @ 410 ,  20 LABEL Label_0 ;
                        VALUE 'SUBTOTAL' ;
                        AUTOSIZE // ;

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

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

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

                        @ 10 ,  10 LABEL Label_1 ;
                        VALUE 'Operador : '  + transform ( mCDOPERADO , pCDOPERADO ) ;
                        AUTOSIZE // ;

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

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

                        @ 10 , 600 LABEL Label_4 ;
                        AUTOSIZE ;
                        VALUE 'Data do Orçamento: ' + transform ( mDT_VENDA  , pDT_VENDA ) // ;

      @ 360 , 470 TEXTBOX txtCDPRODUTO  PARENT Frm_TELA_ENTRADA WIDTH 150 HEIGHT 30 FONTCOLOR BLUE BOLD NUMERIC  MAXLENGTH 13 FONT "Arial" SIZE 14  ON ENTER { || fCDPRODUTO_GUI () } // MAXLENGTH 13 INPUTMASK '9999999999999' FORMAT 'E'
      @ 360 , 650 TEXTBOX txtQT_VENDA   PARENT Frm_TELA_ENTRADA WIDTH  50 HEIGHT 30 FONTCOLOR BLUE BOLD NUMERIC  MAXLENGTH 06 FONT "Arial" SIZE 18  ON ENTER { || fQT_VENDA_GUI () }  // INPUTMASK pQT_VENDA FORMAT 'E' 
      DEFINE STATUSBAR PARENT Frm_TELA_ENTRADA
         STATUSITEM " MVinfo Sistemas e Automação - www.mvinfo.wmx.net.br | microvolution@hotmail.com | (31) 3824.1556 "
         STATUSITEM "clock"
      END STATUSBAR
      
      DEFINE TIMER tempo PARENT Frm_TELA_ENTRADA ;
         INTERVAL 1000                 ;
         ACTION ShowTime()

   CENTER WINDOW   Frm_TELA_ENTRADA
   ACTIVATE WINDOW Frm_TELA_ENTRADA
 ******** FORMULÁRIO PADRÃO DO WINDOWS PARA HARBOUR 5/3/15W ***********************************
 **********************************************************************************************
return         
Mas, apesar de estar funcionando, o único local para digitação do usuário (que já fica em foco) é no primeiro TEXTBOX que libera o segundo ao passar pela cláusula ON ENTER.
Caso o produto não seja digitado corretamente, o usuário clica em ON KEY (F4) para chamar outro formulário, de pesquisas através do GRID.
Aí que está o problema. Vejam o código, por favor:

Código: Selecionar todos

#include <hmg.ch>
FUNCTION CRIABROWSE_GRID(VARIAVEL,NOME_PROGRAMA,NOME_ARQUIVO,CAB_CAMPOS,TAM_CAMPOS,MASC_CAMPOS,NOME_ARQ)
Private bBackColor:={ || IF( THIS.CELLROWINDEX/2==INT(THIS.CELLROWINDEX/2),;
                         { 234,244,255 },{ 255,255,255 } ) }, v_getpesqnome
Private aPesq:={"CODIGO", "PRODUTO", "GRUPO+PRODUTO", "FORNECEDOR+GRUPO+PRODUTO"}
Private cProcura

// TITLE "Pesquisa" + NOME_PROGRAMA ICON NIL MAIN; // linha substituída pela 3 linha abaixo 16/3/16w
DEFINE WINDOW Frm_BROWSE_GRID AT GetDesktopRealTop(),GetDesktopRealLeft() ;
	WIDTH GetDesktopRealWidth() HEIGHT GetDesktopRealHeight() ;
	TITLE "GRID BROWSE" ICON NIL MODAL ; 
	ON INIT Frm_BROWSE_GRID_form_oninit() ON RELEASE Nil ;
	ON INTERACTIVECLOSE Frm_BROWSE_GRID_form_oninteractiveclose();
	ON MOUSECLICK Nil ON MOUSEDRAG Nil ON MOUSEMOVE Nil ;
	ON SIZE Nil ON MAXIMIZE Nil ON MINIMIZE Nil ON PAINT Nil ;
	BACKCOLOR Nil ON GOTFOCUS Nil ON LOSTFOCUS Nil
	
	ON KEY ESCAPE ACTION Thiswindow.Release()

    DEFINE FRAME FramePesq
        ROW    10
        COL    10
        WIDTH  678
        HEIGHT 53
        FONTNAME "Arial"
        FONTSIZE 9
        FONTBOLD .T.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        CAPTION "Pesquisar por:"
        BACKCOLOR NIL
        FONTCOLOR NIL
        // OPAQUE .T.
    END FRAME

    DEFINE TEXTBOX GetPesq
        ROW    30
        COL    190
        WIDTH  380
        HEIGHT 24
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONENTER (If(Frm_BROWSE_GRID.BotaoPesq.Enabled,Frm_BROWSE_GRID_botaopesq(),))
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        READONLY .F.
        RIGHTALIGN .F.
        DISABLEDBACKCOLOR Nil
        DISABLEDFONTCOLOR Nil
        CASECONVERT NONE
        MAXLENGTH 30
        BACKCOLOR NIL
        FONTCOLOR NIL
        INPUTMASK Replicate("!",40)
        FORMAT NIL
        VALUE ""
    END TEXTBOX

    DEFINE COMBOBOX ComboPesq
        ROW    30
        COL    20
        WIDTH  160
        HEIGHT 100
        ITEMS aPesq
        VALUE 0
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        ONCHANGE Muda_Chave(This.Value)
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        SORT .F.
        ONENTER Nil
        ONDISPLAYCHANGE Nil
        DISPLAYEDIT .F.
        IMAGE Nil
        DROPPEDWIDTH 0
        ONDROPDOWN Nil
        ONCLOSEUP Nil
    END COMBOBOX

    DEFINE BUTTON BotaoPesq
        ROW    20
        COL    700
        WIDTH  120
        HEIGHT 40
        ACTION Frm_BROWSE_GRID_botaopesq()
        CAPTION "Pesquisa"
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        FONTBOLD .T.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        HELPID Nil
        FLAT .F.
        TABSTOP .T.
        VISIBLE .T.
        // TRANSPARENT .F.
        MULTILINE .F.
        PICTURE Nil
        PICTALIGNMENT TOP
    END BUTTON
	
	DEFINE CHECKBOX Check_1
        ROW    30
        COL    585
        WIDTH  100
        HEIGHT 28
        CAPTION "Busca Parcial"
        VALUE .F.
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        ONCHANGE cProcura:=""
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        BACKCOLOR Nil
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        // TRANSPARENT .F.
    END CHECKBOX

    DEFINE GRID Grid_Data
        ROW    70
        COL    10
        WIDTH  GetDesktopRealWidth()-30
        HEIGHT GetDesktopRealHeight()-116
        ITEMS Nil
        VALUE Nil
        WIDTHS grid_data_widths()
        HEADERS grid_data_headers()
        FONTNAME "Courier"
        FONTSIZE 9
        TOOLTIP ""
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONDBLCLICK Nil
        ONHEADCLICK Nil
        ONQUERYDATA Nil
        MULTISELECT .F.
        ALLOWEDIT .T.
        VIRTUAL .F.
        DYNAMICBACKCOLOR grid_data_dynamicbackcolor()
        DYNAMICFORECOLOR Nil
        COLUMNWHEN Nil
        COLUMNVALID Nil
        COLUMNCONTROLS grid_data_columncontrols()
        SHOWHEADERS .T.
        CELLNAVIGATION .F.
        NOLINES .F.
        HELPID Nil
        IMAGE Nil
        JUSTIFY grid_data_justify()
        ITEMCOUNT Nil
        BACKCOLOR NIL
        FONTCOLOR NIL
        HEADERIMAGES Nil
        ROWSOURCE "NOME_ARQ"
        COLUMNFIELDS grid_data_columnfields()
        ALLOWAPPEND .T.
        ALLOWDELETE .T.
        BUFFERED .F.
        DYNAMICDISPLAY Nil
        ONSAVE Nil
        LOCKCOLUMNS 0
    END GRID

END WINDOW
Frm_BROWSE_GRID.BotaoPesq.Enabled:=.F.
 Frm_BROWSE_GRID.Center
 Frm_BROWSE_GRID.Activate
Center WINDOW Frm_BROWSE_GRID
Activate WINDOW Frm_BROWSE_GRID

RETURN nil

FUNCTION grid_data_columnwhen()
LOCAL aColumnWhen

    // { || .T. } PERMITE A EDICAO
    // { || .F. } NAO PERMITE A EDICAO

   aColumnWhen := { { || .F. },;
   { || .F. },;
   { || .F. },;
   { || .F. },;
   { || .F. },;
   { || .F. },;
   { || .F. },;
   { || .F. },;
   { || .F. },;
   { || .F. },;
   { || .F. } }
                   

RETURN aColumnWhen

FUNCTION grid_data_columncontrols()
LOCAL aColumnControls

   aColumnControls := { { "TEXTBOX","CHARACTER" },;
                        { "TEXTBOX","CHARACTER" },;
                        { "TEXTBOX","CHARACTER" },;
                        { "TEXTBOX","CHARACTER" },;
                        { "TEXTBOX","CHARACTER" },;
                        { "TEXTBOX","CHARACTER" },;
                        { "TEXTBOX","CHARACTER" },;
                        { "TEXTBOX","CHARACTER" },;
                        { "TEXTBOX","CHARACTER" },;
                        { "TEXTBOX","CHARACTER" },;
                        { "TEXTBOX","CHARACTER" } }
                        

RETURN aColumnControls 

FUNCTION grid_data_columnfields()
LOCAL aColumnFields

    aColumnFields :=   {'&NOME_ARQ.->CDPRODUTO',;
                        '&NOME_ARQ.->DSPRODUTO',;
                        '&NOME_ARQ.->DSUNIDADE',;
                        '&NOME_ARQ.->CDFORNECE',;
                        '&NOME_ARQ.->CD_SECAO' ,;
                        '&NOME_ARQ.->CDGRUPO'  ,;
                        '&NOME_ARQ.->VR_UNITAR',; // no original era "9,2" 20/2/16w
                        '&NOME_ARQ.->VR_PRECUS',; // no original era "9,2" 20/2/16w
                        '&NOME_ARQ.->VP_MARLUC',;
                        '&NOME_ARQ.->VR_PREVEN',;
                        '&NOME_ARQ.->DT_ULTCOM',;
                        '&NOME_ARQ.->DT_ULTVEN',;
                        '&NOME_ARQ.->QT_ESTMIN',;
                        '&NOME_ARQ.->QT_ESTMAX',;
                        '&NOME_ARQ.->QT_ESTTOT'}

RETURN aColumnFields 

FUNCTION grid_data_headers()
LOCAL aheaders

   aheaders := CAB_CAMPOS


RETURN aheaders

FUNCTION grid_data_widths()
LOCAL awidths := {}

   awidths := { 85, 280, 180, 100, 100, 100,  50, 100, 50, 100, 100  }

RETURN awidths

FUNCTION grid_data_justify()
LOCAL ajustify := {}

   ajustify := { GRID_JTFY_CENTER,;
                 GRID_JTFY_LEFT,;
                 GRID_JTFY_LEFT,;
                 GRID_JTFY_CENTER,;
                 GRID_JTFY_CENTER,;
                 GRID_JTFY_CENTER,;
                 GRID_JTFY_CENTER,;
                 GRID_JTFY_CENTER,;
                 GRID_JTFY_CENTER,;
                 GRID_JTFY_CENTER,;
                 GRID_JTFY_CENTER }
                

RETURN ajustify

FUNCTION grid_data_DynamicBackColor()
LOCAL aDynamicBackColor := {}

   aDynamicBackColor := { bBackColor,;
                          bBackColor,;
                          bBackColor,;
                          bBackColor,;
                          bBackColor,;
                          bBackColor,;
                          bBackColor,;
                          bBackColor,;
                          bBackColor,;
                          bBackColor,;
                          bBackColor }
                         

RETURN aDynamicBackColor

Function Muda_Chave(nVal)
   cProcura:=""
   Frm_BROWSE_GRID.Grid_Data.Refresh
   Frm_BROWSE_GRID.BotaoPesq.Enabled:=.T.
   Frm_BROWSE_GRID.GetPesq.SetFocus
Return Nil

Function Frm_BROWSE_GRID_form_oninit()
Return Nil

Function Frm_BROWSE_GRID_form_oninteractiveclose()
Return Nil

Function Frm_BROWSE_GRID_botaopesq()
Local nVal:=GetProperty("Frm_BROWSE_GRID","ComboPesq","Value")
Local lVal:=GetProperty("Frm_BROWSE_GRID","Check_1","Value")
Local nRec:=&NOME_ARQ.->( Recno() )
Local lContinua:=.F.

cNewProcura:=AllTrim(GetProperty("Frm_BROWSE_GRID","GetPesq","Value"))
If cNewProcura==cProcura
   lContinua:=.T.
Else
   cProcura:=cNewProcura
Endif
&NOME_ARQ.->( OrdSetFocus( nVal ) )
If lVal
   Do Case
      Case nVal=1
	       If lContinua
		      Skip
			  If Eof()
			     Goto Top
			  Endif
		      Locate Rest for cProcura $ Nb
		   Else
			  Locate for cProcura $ Nb
		   Endif
	  Case nVal=2
           If lContinua
		      Skip
			  If Eof()
			     Goto Top
			  Endif
		      Locate Rest for cProcura $ Nome
		   Else
		      Locate for cProcura $ Nome
		   Endif
	  Case nVal=3
           If lContinua
		      Skip
			  If Eof()
			     Goto Top
			  Endif
              Locate Rest for cProcura $ Mun
		   Else
		      Locate for cProcura $ Mun
		   Endif
   EndCase
Else
   &NOME_ARQ.->(DBSeek( cProcura )) 
Endif
If !Found()
   MsgStop(Chr(34)+cProcura+Chr(34)+Chr(13)+Chr(10)+"não encontrado em "+aPesq[nVal]+" !")
   &NOME_ARQ.->( OrdSetFocus( 0 ) )
   Goto nRec
   Frm_BROWSE_GRID.Grid_Data.Refresh
Else
    NOME_ARQ->( OrdSetFocus( 0 ) )
   &NOME_ARQ.->( OrdSetFocus( 0 ) )
    Frm_BROWSE_GRID.Grid_Data.Value := {NOME_ARQ->(Recno()),nVal}
   Frm_BROWSE_GRID.Grid_Data.Value := {&NOME_ARQ.->(Recno()),nVal}
Endif
 Frm_BROWSE_GRID.Grid_Data.SetFocus
Return Nil
Então, o usuário ao acionar o formulário acima, uma bateria de erros acontecem. Vejam, por favor:
Harbour 3.2.0dev (r1509031202)
Copyright (c) 1999-2015, http://harbour-project.org/
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\rotinas6.prg(64) Error E0030 Syntax error "syntax error at 'WINDOW'"
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\rotinas6.prg(100) Error E0030 Syntax error "syntax error at '.'"
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\rotinas6.prg(248) Error E0030 Syntax error "syntax error at '.'"
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\rotinas6.prg(249) Error E0030 Syntax error "syntax error at '.'"
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\rotinas6.prg(250) Error E0030 Syntax error "syntax error at '.'"
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\rotinas6.prg(396) Error E0030 Syntax error "syntax error at '.'"
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\rotinas6.prg(397) Error E0030 Syntax error "syntax error at '.'"
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\rotinas6.prg(398) Error E0030 Syntax error "syntax error at '.'"
8 errors
No code generated.
hbmk2[SiCCA3603hmg]: Erro: Executando o compilador Harbour (interno): 1
Vejam, que o primeiro erro já começa com a criação da janela WINDOW. Bom, já mudei para CHILD, SPLITCHILD, e, infelizmente não sei resolver o primeiro erro, nem muito menos os demais.
Alguém pode tentar me ajudar a entender o "porquê" destes erros?
Nota de Moderação:
por Toledo: POR FAVOR, evite postar a mesma dúvida em dois ou mais tópicos, isto atrapalha o bom andamento do próprio tópico.
Leia as Regras do Fórum:
14 - Evite postar a mesma mensagem mais de uma vez, isto atrapalha e congestiona o fórum. As mensagens duplicadas terão as cópias excluídas, e o participante poderá ser punido caso o ato tenha sido intencional.
Esta mesma mensagem você postou neste tópico:
https://pctoledo.org/forum/viewto ... 63#p104863

Define window

Enviado: 18 Mar 2016 21:14
por Toledo
Amigo, seu código é bem complexo, cheio de funções, então as vezes fica complicado tentar entender o que cada uma faz. Este seu código é uma cópia de um demo disponibilizado pelo nosso amigo Pablo César em um outro tópico, e como nos arquivos que ele disponibilizou tem o arquivo EXE, então o código dele é compilável e não deve ter erros.

Observei que no seu código você fez várias alterações em relação ao código original, então a melhor coisa a fazer é comparar este seu código com o código original e verificar se tem algum erro.

Um outro detalhe é tentar enxugar este código, isto evita possíveis erros (não estou falando que este seja o problema, mas vai diminuir as possibilidades e fica mais fácil para encontrar onde está o erro), então retire do código os comandos que vem seguidos de NIL e também com .F. (são os default para comandos não incluídos), por exemplo:

Troque este comando:

Código: Selecionar todos

DEFINE WINDOW Frm_BROWSE_GRID AT GetDesktopRealTop(),GetDesktopRealLeft() ;
   WIDTH GetDesktopRealWidth() HEIGHT GetDesktopRealHeight() ;
   TITLE "GRID BROWSE" ICON NIL MODAL ; 
   ON INIT Frm_BROWSE_GRID_form_oninit() ON RELEASE Nil ;
   ON INTERACTIVECLOSE Frm_BROWSE_GRID_form_oninteractiveclose();
   ON MOUSECLICK Nil ON MOUSEDRAG Nil ON MOUSEMOVE Nil ;
   ON SIZE Nil ON MAXIMIZE Nil ON MINIMIZE Nil ON PAINT Nil ;
   BACKCOLOR Nil ON GOTFOCUS Nil ON LOSTFOCUS Nil
Por este:

Código: Selecionar todos

DEFINE WINDOW Frm_BROWSE_GRID AT GetDesktopRealTop(),GetDesktopRealLeft() ;
   WIDTH GetDesktopRealWidth() HEIGHT GetDesktopRealHeight() ;
   TITLE "GRID BROWSE" MODAL ; 
   ON INIT Frm_BROWSE_GRID_form_oninit() ;
   ON INTERACTIVECLOSE Frm_BROWSE_GRID_form_oninteractiveclose()
Outro exemplo:

Código: Selecionar todos

    DEFINE FRAME FramePesq
        ROW    10
        COL    10
        WIDTH  678
        HEIGHT 53
        FONTNAME "Arial"
        FONTSIZE 9
        FONTBOLD .T.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        CAPTION "Pesquisar por:"
        BACKCOLOR NIL
        FONTCOLOR NIL
        // OPAQUE .T.
    END FRAME
Por este:

Código: Selecionar todos

    DEFINE FRAME FramePesq
        ROW    10
        COL    10
        WIDTH  678
        HEIGHT 53
        FONTNAME "Arial"
        FONTSIZE 9
        FONTBOLD .T.
        CAPTION "Pesquisar por:"
    END FRAME
Caso não resolva os erros, tente retirar as funções utilizadas no DEFINE WINDOW, por exemplo:

Código: Selecionar todos

DEFINE WINDOW Frm_BROWSE_GRID AT 0, 0 ;
   WIDTH 800 HEIGHT 600 ;
   TITLE "GRID BROWSE" MODAL
Se não ocorrer mais o erro (rotinas6.prg(64) Error E0030 Syntax error "syntax error at 'WINDOW'"), ai vai voltando, uma a uma, as funções e compile, assim você vai descobrir onde está o erro.

Abraços,

Define window

Enviado: 19 Mar 2016 18:22
por microvolution
Toledo, não é à toa que a empresa que trabalhei por mais tempo (7 anos ao todo) o dono tem seu sobrenome B. A. Toledo (contabilidade e advocacia), pois você matou o quebra-cabeças...
Tudo agora compilou... o erro agora é completamente fora dos contextos, e, agora é na execução (Runtime). Veja(m) por favor:
Date:19/03/2016 Time: 16:26:16
Error: HMG 3.4.2 Stable (32 bits)
Grid: 'RecordSource' WorkArea must be open at control definition. Program Terminated
Called from _DEFINEGRID(163)
Called from CRIABROWSE_GRID(339)
Called from CONSULTA_ARQUIVO(2410)
O que vem a ser este WorkArea must be open?

Define window

Enviado: 19 Mar 2016 19:37
por Toledo
Amigo, você ainda não entendeu o conceito de macro substituição, veja este seu código:

Código: Selecionar todos

ROWSOURCE "NOME_ARQ"
Troque por:

Código: Selecionar todos

ROWSOURCE &NOME_ARQ
Abraços,

Define window

Enviado: 20 Mar 2016 01:06
por microvolution
Boa madrugada!
troquei o que o Toledo pediu, mas, infelizmente gerou o seguinte erro:
Date:19/03/2016 Time: 21:52:42
Error BASE/1065 Erro nos parƒmetros: &

Called from CRIABROWSE_GRID(335)
Called from CONSULTA_ARQUIVO(2410)
Called from (b)TRATA_CAMPOS_GUI(4513)
É muito difícil no harbour entender macroSubstituição e cia limitada!

Define window

Enviado: 20 Mar 2016 09:28
por Toledo
Amigo, quando ocorre um erro no programa, temos que tentar verificar o que pode estar errado, e pela mensagem de erro, o erro está no parâmetro NOME_ARQ. Então é bom verificar:

- como você está passando NOME_ARQ na chamada da função CRIABROWSE_GRID().
- se for usando uma variável, então passe como está declarando o conteúdo da variável.

Uma dica, é colocar MsgInfo(NOME_ARQ) antes do DEFINE WINDOW que está na função CRIABROWSE_GRID(), assim você poderá ver qual o conteúdo do parâmetro NOME_ARQ.

Abraços,

Define window

Enviado: 20 Mar 2016 18:46
por microvolution
Toledo escreveu: ATENÇÃO: amigo, mesmo depois do aviso em minha mensagem anterior, você continua sem ler suas MP, então POR FAVOR leia suas MP, para não prejudicar a sua participação aqui no fórum.
Sinceramente não estou entendendo mais nada... acaso é pra publicar neste tópico ou voltar lá pro tópico do GRID e responder sobre o GRID lá ou sei lá... honestamente não entendi desta vez ...
Toledo escreveu:Uma dica, é colocar MsgInfo(NOME_ARQ) antes do DEFINE WINDOW que está na função CRIABROWSE_GRID(), assim você poderá ver qual o conteúdo do parâmetro NOME_ARQ.
Estive revisando e comparando com o código original do Pablo e vi que esse meu NOME_ARQ é a transferência da área selecionada lá na chamada a esta função, ou seja o select() atual que é "1", e pelo que o Pablo fez é o ALIAS (nome real do arquivo).
Então, mudei a variável de NOME_ARQ para ALIAS_ARQ e acrescentei outra com o nome ao receber de ALIAS_ARQ e fiz as mudanças necessárias.
Aí ficou assim a chamada da função:

Código: Selecionar todos

CRIABROWSE_GRID (VARIAVEL,'PCI10011',NOME_ARQUIVO,CABEC_CAMPOS,TAM_MEMO,MASCARAS,ARQUIVO,"DCI10010")
E o recebimento ficou assim:

Código: Selecionar todos

FUNCTION CRIABROWSE_GRID(VARIAVEL,NOME_PROGRAMA,NOME_ARQUIVO,CAB_CAMPOS,TAM_CAMPOS,MASC_CAMPOS,AREA_ARQ,ALIAS_ARQ)
Coloquei 2 MSGINFO() assim:

Código: Selecionar todos

MsgInfo(AREA_ARQ)
MsgInfo(ALIAS_ARQ)
... e o resultado de ambas é óbvio:
1
DCI10010
Na verdade, não é que eu não saiba sobre MACROSUBSTITUIÇÃO, confesso que isso me morde às vez, mas, é o conceito que é todo diferente.
Ao mudar, veja os erros que apareceram:
Date:20/03/2016 Time: 18:36:01
Error: HMG 3.4.2 Stable (32 bits)
Browse/Grid: FIELDS/HEADERS/WIDTHS array size mismatch .Program Terminated
Called from _DEFINEGRID(310)
Called from CRIABROWSE_GRID(341)
Called from CONSULTA_ARQUIVO(2410)
Então, o negócio é a compreensão desses erros, que estão cada vez mais complexos:
sei lá o que quer dizer:
Browse/Grid: FIELDS/HEADERS/WIDTHS array size mismatch .Program Terminated
valeu gente!

Define window

Enviado: 20 Mar 2016 21:21
por Toledo
microvolution escreveu:honestamente não entendi desta vez
Amigo, como disse na MP, evite postar a mesma mensagem em tópicos diferentes, veja os links que relacionei sobre as mensagens suas que estão duplicadas.
microvolution escreveu:sei lá o que quer dizer:
Browse/Grid: FIELDS/HEADERS/WIDTHS array size mismatch .Program Terminated
Se não domina o inglês, o jeito é pedir ajuda para um tradutor:
Google Tradutor escreveu:CAMPOS / headers / larguras tamanho da matriz incompatibilidade
Então o número de campos que você vai mostrar na GRID (COLUMNFIELDS grid_data_columnfields()), tem que ser igual aos parâmetros:
WIDTHS grid_data_widths()
HEADERS grid_data_headers()
DYNAMICBACKCOLOR grid_data_dynamicbackcolor()
COLUMNCONTROLS grid_data_columncontrols()
JUSTIFY grid_data_justify()
Várias funções que provavelmente devem retornar uma array para cada opção acima, então se na GRID será mostrado 15 campos, as funções acima também terão que retornar uma array com 15 posições. E pela mensagem de erro, isto não está ocorrendo.

Abraços,

Define window

Enviado: 21 Mar 2016 09:02
por microvolution
bom dia!
"captei a vossa mensagem o digníssimo professor..."
comecei a entender melhor esta questão e fiz uma varredura em todas as variáveis/arrays que são passados, usando um laço for/next (para os arrays) e o MSGINFO() para imprimir na tela o seu conteúdo.
Então, recapitulando:
1 - on key (era set key) não passa nenhum argumento para a função CONSULTA_ARQUIVO():

Código: Selecionar todos

     ON KEY F4     OF Frm_TELA_ENTRADA                     ACTION CONSULTA_ARQUIVO()
2 - esta função recebe 3 argumentos (não lembro o porque que fiz assim [chama se argumento e recebe argumento]. veja(m):

Código: Selecionar todos

static function CONSULTA_ARQUIVO (PROGRAMA,LINHA,VARIAVEL)
3 - dentro do textbox (antigo get) pressiono o F4, no caso nesta linha:

Código: Selecionar todos

      @ 360 , 470 TEXTBOX txtCDPRODUTO  PARENT Frm_TELA_ENTRADA WIDTH 150 HEIGHT 30 FONTCOLOR BLUE BOLD NUMERIC  MAXLENGTH 13 FONT "Arial" SIZE 14  ON ENTER { || fCDPRODUTO_GUI () } // MAXLENGTH 13 INPUTMASK '9999999999999' FORMAT 'E'
4 - Depois que o professor me ensinou, acredito que o problema começa aqui acima, pois ao pressionar F4 ou o código do produto for diferente, é acionada a função FCDPRODUTO_GUI(), que é a seguinte:

Código: Selecionar todos

          select ('DCI10010')
          if .not. EXISTE (str (mCDPRODUTO,13))
               MsgExclamation ('Código do Produto não cadastrado','Orçamento FDL GUI - SiCCA v3.6.03')
               // MENSAGEM ('Código do Produto não cadastrado(a)')
               CONSULTA_ARQUIVO ('','','MCDPRODUTO')
               select (ARQUIVO)
               return (.f.)
          endif
Então, observamos que no caso de um ENTER a função CONSULTA_ARQUIVO envia a variável do campo (antigo get) que chama-se MCDPRODUTO.
Ao ser pressionada F4 isso não acontece, pois, ela (a tecla de função) pode ser acionada de qualquer lugar do formulário.
5 - Então, não está sendo passado o arqumento contendo o nome da variável... aí a função lá na frente que abre o GRID/BROWSE como não recebe o nome dessa variável, então está abrindo um conteúdo de 15 campos e está recebendo um conteúdo de 16 campos de arquivo. Com isso gera aquele erro que mencionei na última postagem.
Bom, no clipper ao usar o SET KEY, em qualquer campo (@get) que estiver ele envia automaticamente o nome da variável, mesmo não passando nenhum argumento.
Portanto, como faço para que funcione do mesmo jeito ou uma solução para o problema da variável do TEXTBOX não estar sendo passada para a função ?

Define window

Enviado: 21 Mar 2016 09:57
por microvolution
bom, só pra ver se compreendo ainda mais as regras do fórum...
pelo que estou percebendo... o assunto está mudando de "define window" para outra coisa q nem sei o que é...
então prezado Toledo e/ou adminstrador(es)/moderador(res) vou postar a dúvida agora no seguinte tópico:
https://pctoledo.org/forum/viewto ... 45#p104845(por se tratar de on key)... caso eu tenha errado novamente, por favor, não considere intempestivo de minha parte e transfira para o devido local correto ou para cá, ok?
Caso, seja novamente, o tema deste tópico "define window" comentarei aqui... e os do browse/grid, postarei lá no outro tópico onde peguei o grid/browse (exemplo) do Pablo César ou aqui mesmo?

Define window

Enviado: 21 Mar 2016 11:00
por Toledo
Amigo, o melhor a fazer antes de postar uma dúvida é procurar um tópico que o assunto principal é sobre a sua dúvida em questão. O que você tem que evitar é exatamente isto que você fez agora, postou a mesma dúvida sobre a função ON KEY em dois tópicos diferentes.

Você observou que tinha postado sua dúvida sobre ON KEY em um tópico cujo assunto principal era sobre DEFINE WINDOW, então o correto seria excluir (veja obs abaixo) a sua mensagem postada aqui neste tópico e ai postar a mensagem no tópico correto.

Obs.: se a sua mensagem for a última postada em um tópico, você poderá excluir esta sua mensagem. Mensagens que já teve uma resposta, NÃO pode mais ser excluída.

Então evite postar a mesma dúvida em dois (ou mais) tópicos diferentes.

Abraços,