Clipper On Line • Ver Tópico - Passar o Foco para TextBox estando em Grid (HeadClick) !

Passar o Foco para TextBox estando em Grid (HeadClick) !

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Passar o Foco para TextBox estando em Grid (HeadClick) !

Mensagempor Imatech » 27 Jun 2012 13:00

Evento: Header Click

Objetivo: Passar o Foco para TextBox ( SetFocus não funciona ! )

Como resolver ?


#include <hmg.ch>

* Temporary Table Test by Grigory Filatov
* Slightly modified by Roberto Lopez

Function Main

CreateTemp()
   
   define window winMain ;
      at 0, 0 ;
      width 800 height 600 main ;
      title 'Passando o foco do controle GRID para TextBox : Não funciona !' ;
      ON INIT winMain.brwTemp.SetFocus()
     
      DEFINE TEXTBOX Text_1
            ROW    10
            COL    10
            WIDTH 580
            VALUE 'Hi!!!'
            TOOLTIP 'TextBox'
            MAXLENGTH 16
            LOWERCASE .T.
            ONLOSTFOCUS MsgInfo('Text_1: Why Lost Focus !')
            ONENTER MsgInfo('Enter pressed')
      END TEXTBOX

      DEFINE LABEL Label_1
         ROW   70
         COL   10
         VALUE    'Header Click: muda o foco para o TextBox (ou deveria !)'
         WIDTH    580
      END LABEL

      DEFINE GRID brwTemp
         COL 10
         ROW 100
         WIDTH 520
         HEIGHT 420
         HEADERS {"Item Code", "Item Description", "Rate"}
         WIDTHS {125, 300, 100}
         ROWSOURCE "curItem"
         COLUMNFIELDS {"itemcd", "itemnm", "rate"}
         ONHEADCLICK { {|| winMain.Text_1.SetFocus() }, { || winMain.Text_1.SetFocus() }, { || winMain.Text_1.SetFocus() } }
      END GRID
     
   end window
   
   winMain.center
   winMain.activate

Return

function CreateTemp()
   local i := 0
   local aDbf := {}
   aadd(adbf,   {"itemcd", "c",   10, 0})
   aadd(adbf,   {"itemnm", "c",   40,   0})
   aadd(adbf,   {"rate",   "n",    8, 2})
   
   if !hb_dbcreatetemp("curItem", adbf)
      msgbox("Cannot create temporary table: Item")
      RELEASE WINDOW ALL
      return nil
   endif
   
   if select("curItem") = 0
      use curItem new
   endif
   select curItem

   FOR i := 1 To 10
     append blank
     curItem->itemcd := "CD_" + STRZERO( i, 7)
     curItem->itemnm := "Compact Disc Number " + STR( i, 15)
     curItem->rate := i
     unlock
   NEXT

return nil

M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Avatar de usuário

Imatech
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 350
Data de registro: 24 Ago 2010 23:48
Cidade/Estado: Goiânia-GO
Curtiu: 4 vezes
Mens.Curtidas: 27 vezes

Passar o Foco para TextBox estando em Grid (HeadClick) !

Mensagempor Pablo César » 27 Jun 2012 19:57

Oi Ronaldo, na linha 25 do seu código exemplo, substitua por:

ONLOSTFOCUS { ||MsgInfo('Text_1: Why Lost Focus !'),winMain.Text_1.SetFocus}
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Passar o Foco para TextBox estando em Grid (HeadClick) !

Mensagempor Imatech » 27 Jun 2012 20:26

Olá Pablo !

Obrigado pela sugestão... mas
Na prática cria um problema maior... kkk

Pois o uso de outros componentes fica comprometido...

Exemplo: com dica do Pablo

#include <hmg.ch>

* Temporary Table Test by Grigory Filatov
* Slightly modified by Roberto Lopez

Function Main

CreateTemp()
   
   define window winMain ;
      at 0, 0 ;
      width 800 height 600 main ;
      title "Changing focus grom GRID to TextBox : Doesn't Work !" ;
      ON INIT {|| winMain.Text_1.SetFocus() }
     
      DEFINE TEXTBOX Text_1
            ROW    10
            COL    10
            WIDTH 580
            VALUE ''
            MAXLENGTH 16
            LOWERCASE .T.
            ONLOSTFOCUS {|| winMain.Text_1.SetFocus() }
      END TEXTBOX

      DEFINE TEXTBOX Text_2
            ROW    40
            COL    10
            WIDTH 580
            VALUE ''
            MAXLENGTH 16
            LOWERCASE .T.
      END TEXTBOX

      DEFINE LABEL Label_1
         ROW   80
         COL   10
         VALUE    "HeadClick: Change focus grom GRID to TextBox : But doesn't Work !"
         WIDTH    580
      END LABEL

      DEFINE GRID brwTemp
         COL 10
         ROW 100
         WIDTH 520
         HEIGHT 420
         HEADERS {"Item Code", "Item Description", "Rate"}
         WIDTHS {125, 300, 100}
         ROWSOURCE "curItem"
         COLUMNFIELDS {"itemcd", "itemnm", "rate"}
         ONHEADCLICK { {|| winMain.Text_1.SetFocus() }, { || winMain.Text_1.SetFocus() }, { || winMain.Text_1.SetFocus() } }
      END GRID
     
   end window
   
   winMain.center
   winMain.activate

Return

function CreateTemp()
   local i := 0
   local aDbf := {}
   aadd(adbf,   {"itemcd", "c",   10, 0})
   aadd(adbf,   {"itemnm", "c",   40,   0})
   aadd(adbf,   {"rate",   "n",    8, 2})
   
   if !hb_dbcreatetemp("curItem", adbf)
      msgbox("Cannot create temporary table: Item")
      RELEASE WINDOW ALL
      return nil
   endif
   
   if select("curItem") = 0
      use curItem new
   endif
   select curItem

   FOR i := 1 To 10
     append blank
     curItem->itemcd := "CD_" + STRZERO( i, 7)
     curItem->itemnm := "Compact Disc Number " + STR( i, 15)
     curItem->rate := i
     unlock
   NEXT

return nil

M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Avatar de usuário

Imatech
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 350
Data de registro: 24 Ago 2010 23:48
Cidade/Estado: Goiânia-GO
Curtiu: 4 vezes
Mens.Curtidas: 27 vezes

Passar o Foco para TextBox estando em Grid (HeadClick) !

Mensagempor Imatech » 28 Jun 2012 13:29

A gambiarra que teria funcionamento em alguns casos seria:
ON LOSTFOCUS {|| IIF( Empty( This.Value ), This.SetFocus(), NIL ) }

Entretanto no evento HeadClick teria que sempre apagar o conteudo do TEXTBOX, para a necessidade de se preservar o Texto tal gambiarra não funciona...


17            DEFINE TEXTBOX Text_1
18               ROW    10
19               COL    10
20               WIDTH 580
21               VALUE ''
22               MAXLENGTH 16
23               LOWERCASE .T.
24               ONLOSTFOCUS {|| IIF( Empty( This.Value ), This.SetFocus(), NIL ) }
25         END TEXTBOX

M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Avatar de usuário

Imatech
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 350
Data de registro: 24 Ago 2010 23:48
Cidade/Estado: Goiânia-GO
Curtiu: 4 vezes
Mens.Curtidas: 27 vezes

Passar o Foco para TextBox estando em Grid (HeadClick) !

Mensagempor Imatech » 28 Jun 2012 15:53

Exemplo utilizando solução definitiva: Var lHeadClicked

Creditos: Sr.: Rathinagiri ( Adm HMG Forum)
HeadClick is an event which is getting completed by returning the focus to the grid. Therefore, after setting the focus to the textbox, it returns to the grid.

#include <hmg.ch>

* Temporary Table Test by Grigory Filatov
* Slightly modified by Roberto Lopez

Function Main
Local lHeadClicked := .f.

CreateTemp()
   
   define window winMain ;
      at 0, 0 ;
      width 800 height 600 main ;
      title "Changing focus grom GRID to TextBox : Doesn't Work !" ;
      ON INIT winMain.brwTemp.SetFocus()
     
      DEFINE TEXTBOX Text_1
            ROW    10
            COL    10
            WIDTH 580
            VALUE 'Hi!!!'
            TOOLTIP 'TextBox'
            MAXLENGTH 16
            LOWERCASE .T.
//            ONLOSTFOCUS MsgInfo('Text_1: Why Lost Focus !')
//          ONENTER MsgInfo('Enter pressed')
      END TEXTBOX

      DEFINE LABEL Label_1
         ROW   70
         COL   10
         VALUE    "HeadClick: Change focus grom GRID to TextBox : But doesn't Work !"
         WIDTH    580
      END LABEL

      DEFINE GRID brwTemp
         COL 10
         ROW 100
         WIDTH 520
         HEIGHT 420
         HEADERS {"Item Code", "Item Description", "Rate"}
         ongotfocus iif( lHeadClicked, ( winMain.Text_1.SetFocus(), lHeadClicked := .f. ) , )
         WIDTHS {125, 300, 100}
         ROWSOURCE "curItem"
         COLUMNFIELDS {"itemcd", "itemnm", "rate"}
         ONHEADCLICK { {|| winMain.Text_1.SetFocus(),lHeadClicked := .t. }, { || winMain.Text_1.SetFocus(),lHeadClicked := .t. }, { || winMain.Text_1.SetFocus(),lHeadClicked := .t. } }
      END GRID
     
   end window
   
   winMain.center
   winMain.activate

Return

function CreateTemp()
   local i := 0
   local aDbf := {}
   aadd(adbf,   {"itemcd", "c",   10, 0})
   aadd(adbf,   {"itemnm", "c",   40,   0})
   aadd(adbf,   {"rate",   "n",    8, 2})
   
   if !hb_dbcreatetemp("curItem", adbf)
      msgbox("Cannot create temporary table: Item")
      RELEASE WINDOW ALL
      return nil
   endif
   
   if select("curItem") = 0
      use curItem new
   endif
   select curItem

   FOR i := 1 To 10
     append blank
     curItem->itemcd := "CD_" + STRZERO( i, 7)
     curItem->itemnm := "Compact Disc Number " + STR( i, 15)
     curItem->rate := i
     unlock
   NEXT

return nil
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Avatar de usuário

Imatech
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 350
Data de registro: 24 Ago 2010 23:48
Cidade/Estado: Goiânia-GO
Curtiu: 4 vezes
Mens.Curtidas: 27 vezes




Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Google [Bot] e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro