Agradeço a sua colaboração na resolução do problema.
Está tudo a funcionar bem agora, eu só não consigo Compilar/Linker com essas Linhas ON MINIMIZE e ON MAXIMIZE junto.
Por isso é que elas se encontram com // antes para não serem consideradas.
Para se referenciar a um formulário ou objetos de outro módulo, ou mesmo em função codificada acima da criação do formulário,
adicione a diretiva Declare window seuform no topo do módulo com os demais includes;
isto é o código de um arquivo.FMG e está assim feito:
Código: Selecionar todos
* HMG-IDE UNICODE Form Designer Generated Code
* (c) Roberto Lopez - http://sites.google.com/site/hmgweb
*
DEFINE WINDOW TEMPLATE AT GetDesktopRealTop() , GetDesktopRealLeft() WIDTH GetDesktopRealWidth();
HEIGHT GetDesktopRealHeight() TITLE "Pedido de Vendas, "+m_LicEmp[12];
ICON "Imagens\document_new.ico" MODAL NOSIZE;
ON INIT pedido_de_vendas_form_oninit();
ON PAINT PaintPedidos();
BACKCOLOR {221,223,255};
ON INTERACTIVECLOSE {|| IF(lEncerraPedido, .t., SAIDAVENDA() )};
ON GOTFOCUS {|| ACTVARSVD(ativoUser, BotaoPagamento) }
//ON MINIMIZE {|| IF(CFG_EMP->TEMPOPEVEN>0, Pedido_de_Vendas.Timer_PedidoAtraso.Enabled :=.f., Nil),;
// IF(CFG_EMP->PedeUser, Pedido_de_Vendas.TPedVUser.Enabled :=.f., Nil)};
//ON MAXIMIZE {|| IF(CFG_EMP->TEMPOPEVEN>0, Pedido_de_Vendas.Timer_PedidoAtraso.Enabled :=.t., Nil),;
// IF(CFG_EMP->PedeUser, Pedido_de_Vendas.TPedVUser.Enabled :=.t., Nil)}
DEFINE CONTEXT MENU
MENUITEM "Acesso a &Calculadora" ACTION MYRUNEXE("C:\WINDOWS\system32\calc.exe", .T.) NAME ChamaCalc IMAGE "Imagens\Calculadorax28x28.Png"
MENUITEM "&Teclado Virtual [Ctrl+Win+O]" ACTION Nil NAME ChamaTeclado IMAGE "Imagens\Tecladox28x28.Png" &&ShowTeclado()
SEPARATOR
MENUITEM "Cadastro de &Artigos" ACTION Nil NAME CriaArtigo IMAGE "Imagens\Ingredientsx28x28.png" //CaixaArtigo.png"
MENUITEM "Cadastro de &Grupos" ACTION Nil NAME CriaGrupo IMAGE "Imagens\IconeFamilias.png"
SEPARATOR
MENUITEM "Mudança de &Usuário" ACTION EscolheUser(, 'Pedido_de_Vendas') NAME TrocaUser IMAGE "Imagens\Log-Inx28x28.png"
SEPARATOR
MENUITEM "&Reabrir a Conta do Pedido" ACTION IF(matModAtivo[npModulo,2]>0, IF(Pedido_de_Vendas.AbrirMesa.Enabled,;
IF(numMesaVD==0, MsgExclamation('Não está com pedido aberto no momento.', 'Atenção'),;
IF(Pedido_de_Vendas.Image_StatusFechada.Visible==.t., ReabreMesa(), MsgExclamation("o pedido já está aberto", "Atenção"))),;
MsgExclamation({PADC("Usuário sem permissão...",35), CHR(13), "Solicite um responsável do sistema."}, "Atenção")),;
Pedido_de_Vendas.AbrirMesa.Enabled :=.f.);
NAME AbrirMesa IMAGE "Imagens\Mesas.Ico"
MENUITEM "Ver &Pedido(s) em Atraso" ACTION IF(matModAtivo[npModulo,2]>0 .AND. CFG_EMP->TpVeAtraso>0 .AND. numMesaVD>0,;
IF(Pedido_de_Vendas.VerPedidoAtraso.Enabled, PEDIDOATRASADO(), Nil), Nil);
NAME VerPedidoAtraso IMAGE "Imagens\Alerta-Relógiox28x28.Png"
MENUITEM "&Salva o Pedido em Aberto" ACTION IF(matModAtivo[npModulo,2]>0, IF(Pedido_de_Vendas.ConfPedidoVD.Enabled,;
IF(VAL(STRTRAN(Pedido_de_Vendas.Label_Tot_Merc.Value,",",""))>0, IF(numMesaVD>0, CONFIRMAVD(),;
MsgExclamation("Como è uma venda livre, confirme fazendo o seu pagamento.", 'Atenção')),;
MsgExclamation("Sem lançamentos em aberto para confirmar.", 'Atenção')), Nil ), Nil);
NAME ConfPedidoVD IMAGE "Imagens\F10x28x28.Png"
MENUITEM "Pe&dido(s) dado(s) como Pronto(s)" ACTION IF(matModAtivo[npModulo,2]>0, IF(Pedido_de_Vendas.PedidoFeito.Enabled, IF(Pedido_de_Vendas.Grid_Pedidos.ItemCount>0, PEDIDOFEITO(),;
MsgExclamation("Não existem pedidos pendentes...", "Atenção")), Nil), Nil);
NAME PedidoFeito IMAGE "Imagens\TarefaConcluidax32x32.Png"
MENUITEM "An&ula os dados da mesa Fechada" ACTION IF(matModAtivo[npModulo,2]>0 .AND. StatusMesa=='F', IF(Pedido_de_Vendas.AnulaMesaFechada.Enabled, ANULADOCVD(),;
IF(MsgYesNo({PADC("Usuário sem acesso...",45), CHR(13), "Quer continuar com a anulação da mesa ?"}, "Confirmação"),;
CONFAPGLIN('ANULATUDO'), Nil)), IF(Pedido_de_Vendas.Grid_Pedidos.ItemCount>0,;
MsgExclamation(IF(numMesaVD>0, "A conta ainda se encontra aberta.", "Está a elaborar uma venda livre."), "Atenção"),;
Nil) );
NAME AnulaMesaFechada IMAGE "Imagens\Apagadorx32x32.Png"
END MENU
DEFINE STATUSBAR FONT "Arial" SIZE 12 &&Corbel
STATUSITEM "Licenciado a: " + nomeEmpresa WIDTH 185 ICON "Imagens\Home.ico" TOOLTIP "Acesso aos dados de licençiamento"
STATUSITEM "Usuário: " + ativoUser WIDTH 275 ICON "Imagens\add-user.ico" TOOLTIP "Acesso a criação de Usuários"
STATUSITEM "Posto: " + Posto->NomePosto WIDTH 235 ICON "Imagens\posto-de-trabalho.ico"
STATUSITEM "Data: "+DTOC(DATE()) WIDTH 138
STATUSITEM "Hora: "+TIME() WIDTH 125
STATUSITEM "Sair" WIDTH 84 ACTION SAIDAVENDA( IF(Pedido_de_Vendas.Grid_Pedidos.ItemCount>0,;
VAL(STRTRAN(Pedido_de_Vendas.Label_Tot_Merc.Value,",","")),0) ) ICON "Imagens\Sair.ico" TOOLTIP "Abandonar"
END STATUSBAR
DEFINE LABEL LABEL_Tipo_Doc
ROW 6
COL 15
WIDTH 95
HEIGHT 20
VALUE "<Identificação>"
FONTNAME "Arial"
FONTSIZE 11
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
HELPID Nil
VISIBLE .T.
TRANSPARENT .F.
ACTION Nil
AUTOSIZE .F.
BACKCOLOR {221,223,255}
FONTCOLOR NIL
END LABEL
...
...
....
IF (CFG_EMP->ScreenSave .OR. CFG_EMP->PedeUser) // DEFINE A VAR TIMER PARA PEDIR O USUARIO //
DEFINE TIMER TPedVUser OF Pedido_de_Vendas INTERVAL CFG_EMP->TpPedeUser ACTION IF( DesligaTela==.f., PublicaScreen("Pedido_de_Vendas",
"TPedVUser"), Nil )
ENDIF
IF matModAtivo[npModulo,2]>0
DEFINE TIMER Timer_PedidoAtraso OF Pedido_de_Vendas INTERVAL CFG_EMP->TEMPOPEVEN ACTION PEDIDOATRASADO( 'Pedido_de_Vendas',
"Timer_PedidoAtraso" )
IF Pedido_de_Vendas.Grid_Pedidos.ItemCount==0 .OR. numMesaVD=0
SetProperty('Pedido_de_Vendas', 'Timer_PedidoAtraso', 'Enabled', .F.)
ENDIF
ENDIF
END WINDOW
aqui no formulário não tenho referência a outros objetos ou módulos, o que uso é uma variável de um DBF que já está aberto e pode ser usado no aplicativo. Ex: ON MINIMIZE {|| IF(
CFG_EMP->TEMPOPEVEN>0, Pedido_de_Vendas.Timer_PedidoAtraso.Enabled :=.f., Nil),;
IF(
CFG_EMP->PedeUser, Pedido_de_Vendas.TPedVUser.Enabled :=.f., Nil)};
as outras variaveis são deste formulário. Ex:
Pedido_de_Vendas.TPedVUser.Enabled :=.f.
Não expus todo o formulário porque é muito extenso mas no final dele crio as variaveis Timer_PedidoAtraso e TPedVUser como temporizadores.
Quanto a frase "Não consigo usar a tela completa" é porque se colocar no WindowType CHILD, não usar a tela toda.
o que acontecia é que a barra de status do windows não desaparecia, ficava sempre visivel. Mas eu coloquei o NOSIZE e a barra desapareceu.
Faço a chamada deste formulário desta forma:
Código: Selecionar todos
#include "hmg.ch"
declare window Pedido_de_Vendas
Function main_button_pedidos_de_venda_action()
LOCAL LargTela :=GetDesktopRealWidth(), oSenhaMT
LOCAL AltTela :=GetDesktopRealHeight()
LOCAL npModulo :=ASCAN( matModAtivo , {|x|x[1]='VENDAS'} )
PRIVATE ValPrVdLn, MostraTXImp, lEncerraPedido :=.f., NmrLnGridImp, MatImpIni
PRIVATE numMesaVD :=0, StatusMesa, MatGridPed, NomeJanela, MatGridVD, mProdutos
PRIVATE DtRefDocV, ValReadOnly :={}, OldPrVd, OldDescVd, aFont, UserConfereConta
PRIVATE FamiliaProd :=MostraUMedida :='', AlteraLnDV :=.f., hBitmap1 :=0, TPedVUser
PRIVATE numLnGridVd, fColor, BotaoPagamento, nTotLnGrid :=0, varQtExiste :=2, varQtMinima :=5
PRIVATE BackColorGP :={ || IF( THIS.CELLROWINDEX/2==INT(THIS.CELLROWINDEX/2),;
{ 234,244,255 },{187,213,255} ) }
PRIVATE bBackColor :={|| IF( THIS.CELLROWINDEX/2==INT(THIS.CELLROWINDEX/2),;
{234,244,255}, {250,250,245} ) }
&&IF( SECS(TIME()) > SECS(SecToTime(SECS(AtCellCol(9, "3"))+SECS('00:02:00')))
PRIVATE BackCorPAtraso:={|| IF(AtCellCol(12, "3")==.t. .AND. SECS(AtCellCol(9, "3"))>0 .AND. AtCellCol(10, "3")==.f.,;
IF(This.CellColIndex==9 .OR. This.CellColIndex==10, {255,0,0}, bBackColor), bBackColor) }
PRIVATE ForCorPAtraso :={|| IF(AtCellCol(12, "3")==.t. .AND. SECS(AtCellCol(9, "3"))>0 .AND. AtCellCol(10, "3")==.f.,;
IF(This.CellColIndex==1, {255,0,0}, IF(This.CellColIndex==9 .OR. This.CellColIndex==10, {248,248,248}, fColor )),;
IF('OFERTA' $AtCellCol(1, "3"), {0,151,75}, fColor)) }
IF IsWindowActive("Pedido_de_Vendas")
DoMethod("Pedido_de_Vendas","MINIMIZE")
DoMethod("Pedido_de_Vendas","RESTORE")
DoMethod("Pedido_de_Vendas","SETFOCUS")
ELSE
Load Window Pedido_de_Vendas
ON KEY ALT+T OF Pedido_de_Vendas ACTION Nil
ON KEY CONTROL+F12 OF Pedido_de_Vendas ACTION IF(DesligaTela==.f., EscolheUser(Nil, 'Pedido_de_Vendas', "TPedVUser", CATS_getFormFocus()), Nil)
ON KEY CONTROL+S OF Pedido_de_Vendas ACTION {|| oSenhaMT :=Prepare_InputWindow( oSenhaMT, 1,;
IF(DesligaTela==.f., 'Desliga a proteção de Ecran', 'Ativa a proteção de ecran'),;
{ 'Senha do Responsável:' }, { "" }, { "PASSWORD" }, CFG_EMP->SenhaMestr ),;
IF(!Empty(oSenhaMT), DesligaTela:=ATIVASCREEN(DesligaTela, 'Pedido_de_Vendas', 'TPedVUser'), Nil) }
Pedido_de_Vendas.Grid_Pedidos.CheckBoxEnabled :=CFG_EMP->ImpCozinha &&MATRIZ DE VERIFICAÇÃO PARA IMPRIMIR NO PONTO DE PRODUÇÃO
aFont :=ARRAY FONT "Microsoft Sans Serif" SIZE 10 BOLD //ITALIC Calibri
UserConfereConta :=IF(UserConfereConta==Nil, Pedido_de_Vendas.Button_ConsultaVenda.Enabled, UserConfereConta)
Maximize Window Pedido_de_Vendas
Activate Window Pedido_de_Vendas
ENDIF
Return Nil
Eu acho que tenho o código disposto da maneira certa, inclusive no inicio da rotina de chamada do FMG, tenho os includes e os declares feitos, mas se houver algum erro, fico-lhe muito grato pela correção.
Peço que me informe se é melhor compilar/linkar o aplicativo com 0 -gc3 ativo.
Perguntei sobre este assunto porque julguei que tivesse alguma informação ou experiencia com este assunto e a pudesse partilhar.