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