Evento FORM ON KEY ESCAPE ACTION

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Evento FORM ON KEY ESCAPE ACTION

Mensagem por NiltonGM »

Amigos,

Porque este evento 'ON KEY ESCAPE ACITION' de um Form não aparece na IDE MiniGUI HMG 3.4.3? Se colocarmos manualmente esse evento no Form (editar o arquivo Form_x.Fmg) o ESC funciona para fechar a janela, porem ao voltar à IDE e mudar algum componente e salvar o Form esse evento se perde porque não consta na lista do Gerenciador de Objetos. Isso é um bug ou esqueceram desse evento? Como faço, pois só consigo criar formulário pela IDE, não consigo visualizar mentalmente o Form só pelo código prg, tenho a necessidade de ver os componentes na tela.
Obrigado.
Nilton Medeiros
nilton@sistrom.com.br
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Evento FORM ON KEY ESCAPE ACTION

Mensagem por Toledo »

Amigo, coloque o comando no PRG:

Código: Selecionar todos

#include <hmg.ch>

Function Main

	SET TOOLTIPSTYLE BALLOON

	Load Window Main
        ON KEY ESCAPE OF Main ACTION Main.Release
	Center Window Main
	Activate Window Main

Return
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Evento FORM ON KEY ESCAPE ACTION

Mensagem por NiltonGM »

Maravilha Toledo!

Ontem mesmo me deparei com o mesmo problema só que no controle GRID, no caso do evento ONCHECKBOXCLICKED que também não aparece no Gerenciador de Objetos, nesse caso a GRID é carregada pelo Form, como posso em tempo de execução ao atribuir valores a grid habilitar esse evento "ONCHECKBOXCLICKED main_OnCheckBoxClicked()", onde posso colocar:

Código: Selecionar todos

ON CHECKBOXCLICKED OF GRID_x ACTION main_OnCheckBoxClicked()
???
Agradeço sua ajuda Toledo.
Nilton Medeiros
nilton@sistrom.com.br
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Evento FORM ON KEY ESCAPE ACTION

Mensagem por Toledo »

Nilton, não testei, mas acho que vai funcionar:

Código: Selecionar todos

#include <hmg.ch>

Function Main

   SET TOOLTIPSTYLE BALLOON

   Load Window Main
   ON KEY ESCAPE OF Main ACTION Main.Release
   _SetOnCheckBoxClicked("Grid_1", "Main", {main_OnCheckBoxClicked()})
   Center Window Main
   Activate Window Main

Return


Function _SetOnCheckBoxClicked(cControlName, cParentForm, bActionCheckBox)
Local i
i := GetControlIndex  ( cControlName, cParentForm )
_HMG_SYSDATA [ 40 ] [ i ] [ 46 ] := bActionCheckBox
Return Nil
Obs1.: o terceiro parâmetro desta função _SetOnCheckBoxClicked() tem que estar entre { } (linha 9 do código acima)
Obs2.: este função _SetOnCheckBoxClicked() só vai funcionar (se funcionar, não testei) somente com HMG. Minigui Extended não.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Evento FORM ON KEY ESCAPE ACTION

Mensagem por NiltonGM »

Oi Toledo,

Deu erro, o comando ficou assim:

Código: Selecionar todos

         LOAD WINDOW Main
                  _SetOnCheckBoxClicked("Grid_Notas", "Main", {main_OnCheckBoxClicked()})

         if GetDesktopWidth() <= 1366    // Esse numero baseado em monitor de 15" resolução 1366 x 768
            MAXIMIZE WINDOW Main
            main_form_onsize()
         else
            Main.Center
         end

          Main.Activate
Está retornado o erro: " undefined reference to '_SETONCHECKBOXCLICKED "

Eu uso a HMG 3.4.3 Stable (32bits) "HMG-IDE UNICODE ver 1.1"

Encontrei algo parecido em C:\HMG.3.4.3\SOURCE\h_windows.prg

Código: Selecionar todos

               //   OnCheckBoxClicked   (by Dr. Claudio Soto, December 2014)
               #define LVIS_UNCHECKED 0x1000
               #define LVIS_CHECKED   0x2000
               IF GetGridNewState(lParam) == LVIS_UNCHECKED .OR. GetGridNewState(lParam) == LVIS_CHECKED
                  xTemp := { NIL, NIL }
                  xTemp[1] := _HMG_SYSDATA [ 40 ] [ i ] [ 37 ] [ 1 ]   // This.CellRowClicked
                  IF ( xTemp[1] > 0 .AND. xTemp[1] <=  ListView_GetItemCount (_HMG_SYSDATA [ 3 ] [ i ]) ) .OR. ; 
                     ( HMG_GetLastVirtualKeyDown( @xTemp[2] ) == VK_SPACE .AND. xTemp[2] == _HMG_SYSDATA [ 3 ] [ i ] ) .OR. ;
                     ( HMG_GetLastMouseMessage( @xTemp[2] ) == WM_LBUTTONDOWN .AND. xTemp[2] == _HMG_SYSDATA [ 3 ] [ i ] )   // ADD, March 2016
                     IF HMG_GetLastVirtualKeyDown() == VK_SPACE .OR. HMG_GetLastMouseMessage() == WM_LBUTTONDOWN
                        _HMG_SYSDATA [ 40 ] [ i ] [ 37 ] [ 1 ] := GETGRIDROW ( lParam ) + 1  // CellRowClicked
                        _HMG_SYSDATA [ 40 ] [ i ] [ 37 ] [ 2 ] := 0                          // CellColClicked
                     ENDIF
                     _DoControlEventProcedure ( _HMG_SYSDATA [ 40 ] [ i ] [ 46 ] , i )   // OnCheckBoxClicked
                     Return 0
                  ENDIF
Nilton Medeiros
nilton@sistrom.com.br
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Evento FORM ON KEY ESCAPE ACTION

Mensagem por Toledo »

NiltonGM escreveu:Deu erro, o comando ficou assim:
_SetOnCheckBoxClicked("Grid_Notas", "Main", {main_OnCheckBoxClicked()})
Amigo, você incluiu a função _SetOnCheckBoxClicked() (linhas 16 a 20 do meu código na mensagem anterior) no seu programa?

Outra, "Grid_Notas" está mesmo no formulário "Main"?

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Evento FORM ON KEY ESCAPE ACTION

Mensagem por Claudio Soto »

Poner así:

Código: Selecionar todos

 k:= GetControlIndex ("GridName", "FormName")
 _HMG_SYSDATA [ 40 ] [ k ] [ 46 ] := {|| OnCheckBoxClicked_proc() }
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Evento FORM ON KEY ESCAPE ACTION

Mensagem por NiltonGM »

Foi isso aí Toledo, não copiei o código todo, agora funcionou dos dois jeitos, do seu e do Claudio Soto.
Obrigado ao dois feras!
Nilton Medeiros
nilton@sistrom.com.br
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Evento FORM ON KEY ESCAPE ACTION

Mensagem por Claudio Soto »

Toledo escreveu:Nilton, não testei, mas acho que vai funcionar:

Código: Selecionar todos

#include <hmg.ch>

Function Main

   SET TOOLTIPSTYLE BALLOON

   Load Window Main
   ON KEY ESCAPE OF Main ACTION Main.Release
   _SetOnCheckBoxClicked("Grid_1", "Main", {main_OnCheckBoxClicked()})
   Center Window Main
   Activate Window Main

Return


Function _SetOnCheckBoxClicked(cControlName, cParentForm, bActionCheckBox)
Local i
i := GetControlIndex  ( cControlName, cParentForm )
_HMG_SYSDATA [ 40 ] [ i ] [ 46 ] := bActionCheckBox
Return Nil
Obs1.: o terceiro parâmetro desta função _SetOnCheckBoxClicked() tem que estar entre { } (linha 9 do código acima)
Obs2.: este função _SetOnCheckBoxClicked() só vai funcionar (se funcionar, não testei) somente com HMG. Minigui Extended não.

Abraços,
Perdón Toledo, no me di cuenta y postee una solución idéntica a la tuya.
Y falha nosa, deveria ter lido todas as mensagem.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Evento FORM ON KEY ESCAPE ACTION

Mensagem por Toledo »

Claudio Soto escreveu:Perdón Toledo, ...
Dr. Claudio, não precisa pedir perdão, é um grande prazer para mim saber que minha solução e a sua foram idênticas.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
JAIR RANGEL
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 19 Jul 2005 16:01
Localização: RIO DE JANEIRO
Contato:

Evento FORM ON KEY ESCAPE ACTION

Mensagem por JAIR RANGEL »

Bom dia!

Achei melhor não abrir outro post, pois a minha dúvida tem tudo a ver com o post corrente. Segue a mesma linha de ação...

Testei o código acima e realmente a solução do Toledo e do Dr Cláuido funcionam a contento.

No entanto, eu não estou conseguindo configurar o evento ON CHECKBOXCLICKED - Eu utilizo a IDE para montar os forms e os controles.

O que faço é exibir no Grid_1 os "Titulos Abertos" para serem "baixados" e possibilitar que o Operador marque os títulos selecionados para a devida baixa.

O incremento do CheckBox no Grid_1 funciona na boa:

Código: Selecionar todos

FormBaixarTitulo.Grid_1.CheckBoxEnabled:=.T.                             // Incrementa CheckBox no Grid_1
Mas ao selecionar os CheckBox a função de usuário não é executada!

Já tentei de algumas formas essa configuração:

Código: Selecionar todos

 ON CHECKBOXCLICKED OF GRID_1 ACTION TOTAL_TITULOS_PAGAR_102()
 ONCHECKBOXCLICKED MSGINFO("CHEGUEI AQUI NO TOTAL_TITULOS_PAGAR_102()")
 ON CHECKBOXCLICKED CONTROL Grid_1 OF FormBaixarTitulo ACTION MSGINFO("CHEGUEI AQUI NO TOTAL_TITULOS_PAGAR_102()")
 ON CHECKBOXCLICKED MSGINFO("CHEGUEI AQUI NO TOTAL_TITULOS_PAGAR_102()")
Acredito ser coisa simples o que está faltando, mas.....

Eu uso HMG3.4.3 32bits - IDE ANSI
MINIGUI + HARBOUR + BRMAKE + CDX
CLIPPER 5.2E + VISUALLIB 2 + BLINKER
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Evento FORM ON KEY ESCAPE ACTION

Mensagem por asimoes »

JAIR RANGEL escreveu:ON CHECKBOXCLICKED OF GRID_1 ACTION TOTAL_TITULOS_PAGAR_102()
Tenta: ON CHECKBOXCLICKED OF GRID_1 ACTION {|| TOTAL_TITULOS_PAGAR_102() }
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Evento FORM ON KEY ESCAPE ACTION

Mensagem por asimoes »

O exemplo está na pasta \MiniGUI\SAMPLES\BASIC\CheckBox_Grid

Código: Selecionar todos

 @ 50,50 GRID Grid_1 ;
     WIDTH  504 ;
     HEIGHT 328 ;
     HEADERS a_head ;
     WIDTHS a_width ;
     ITEMS a_Items ;
     VALUE {1,4,6} ;
     TOOLTIP "Grid with Checkboxes" ;
     DYNAMICBACKCOLOR { bColor, bColor } ;
     MULTISELECT ;
     CHECKBOXES ;
     ON CHECKBOXCLICKED { |nSpace| checkboxesRefresh(nSpace) }
Ops na documentação não tem o ACTION
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JAIR RANGEL
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 19 Jul 2005 16:01
Localização: RIO DE JANEIRO
Contato:

Evento FORM ON KEY ESCAPE ACTION

Mensagem por JAIR RANGEL »

Bom dia, Asimoes!

Com essa nova tentativa também não rolou. Nem compilou. Exibiu o seguinte erro:

Syntax error at:

Que osso...
MINIGUI + HARBOUR + BRMAKE + CDX
CLIPPER 5.2E + VISUALLIB 2 + BLINKER
Avatar do usuário
JAIR RANGEL
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 19 Jul 2005 16:01
Localização: RIO DE JANEIRO
Contato:

Evento FORM ON KEY ESCAPE ACTION

Mensagem por JAIR RANGEL »

Tentei todas as alternativas abaixo e nada funciona:

Código: Selecionar todos

//   ON CHECKBOXCLICKED OF GRID_1 ACTION TOTAL_TITULOS_PAGAR_102()
//   ONCHECKBOXCLICKED MSGINFO("CHEGUEI AQUI NO TOTAL_TITULOS_PAGAR_102()")
//   ON CHECKBOXCLICKED CONTROL Grid_1 OF FormBaixarTitulo ACTION MSGINFO("CHEGUEI AQUI NO TOTAL_TITULOS_PAGAR_102()")
//   ON CHECKBOXCLICKED("CHEGUEI AQUI NO TOTAL_TITULOS_PAGAR_102()")
//   ON CHECKBOXCLICKED MSGINFO("CHEGUEI AQUI NO TOTAL_TITULOS_PAGAR_102()")
//   ON CHECKBOXCLICKED OF GRID_1 ACTION {|| TOTAL_TITULOS_PAGAR_102() }
//   ON CHECKBOXCLICKED OF GRID_1 {|| TOTAL_TITULOS_PAGAR_102() }
//   ONCHECKBOXCLICKED GRID_1 OFF FormBaixarTitulo ACTION TOTAL_TITULOS_PAGAR_102()
//   FormBaixarTitulo.Grid_1.ONCHECKBOXCLICKED:= {|| TOTAL_TITULOS_PAGAR_102()}
//   ON CHECKBOXCLICKED( {|| TOTAL_TITULOS_PAGAR_102()} )
//   ON CHECKBOXCLICKED( {TOTAL_TITULOS_PAGAR_102()} )
//   FormBaixarTitulo.Grid_1.ONCHECKBOXCLICKED( {|| TOTAL_TITULOS_PAGAR_102()} )
//   ON CHECKBOXCLICKED(TOTAL_TITULOS_PAGAR_102())
//   FormBaixarTitulo.Grid_1.ONCHECKBOXCLICKED(TOTAL_TITULOS_PAGAR_102())
//   ON CHECKBOXCLICKED OF GRID_1 ACTION TOTAL_TITULOS_PAGAR_102()
//   ON CHECKBOXCLICKED { |nSpace| TOTAL_TITULOS_PAGAR_102(nSpace) }
//   ON CHECKBOXCLICKED { || TOTAL_TITULOS_PAGAR_102() }
//   ON CHECKBOXCLICKED { MSGINFO("CHEGUEI AQUI NO TOTAL_TITULOS_PAGAR_102()") }
//   SET ONCHECKBOXCLICKED { MSGINFO("CHEGUEI AQUI NO TOTAL_TITULOS_PAGAR_102()") }
//   SET CHECKBOXCLICKED ON { MSGINFO("CHEGUEI AQUI NO TOTAL_TITULOS_PAGAR_102()") }
//   SET ON CHECKBOXCLICKED { MSGINFO("CHEGUEI AQUI NO TOTAL_TITULOS_PAGAR_102()") }
//    ON CHECKBOXCLICKED MSGINFO("CHEGUEI AQUI NO TOTAL_TITULOS_PAGAR_102()")
Eu trabalho com a IDE, por tanto, crio o Grid_1 dentro do Form. Não escrevo na unha. Não tem como...
E acho que é ai o problema.
No exemplo da pasta \Samples funciona na boa, mas o Grid é criado na unha.
Esse controle não ficou bem resolvido dentro da IDE.
É a conclusão que cheguei...

Abraço a todos do Grupo!
MINIGUI + HARBOUR + BRMAKE + CDX
CLIPPER 5.2E + VISUALLIB 2 + BLINKER
Responder