foco no browse, dialog com button e browse
Enviado: 10 Mar 2024 20:56
Encontrei esse, mas só a primeira parte não resolve o problema.
Em homenagem a Paulo Cesar Toledo
https://pctoledo.org/
Código: Selecionar todos
#include "hwgui.ch"
PROCEDURE Test
LOCAL xDlg, xBtn, xBrow
CreateDbf()
USE test
INIT DIALOG xDlg ;
TITLE "browse" ;
AT 0, 0 ;
SIZE 1024, 768
@ 5, 5 BUTTON xbtn CAPTION "Sair" OF xDlg SIZE 50, 20 ON CLICK { || hwg_EndDialog() }
@ 30, 30 BROWSE xBrow DATABASE SIZE 800, 800 ;
ON CLICK { || hwg_EndDialog() }
xBrow:Alias := "test"
xBrow:bKeyDown := { | o, k | (o), iif( k == VK_RETURN, hwg_EndDialog(), Nil ), .T. }
ADD COLUMN { || test->Name } TO xBrow HEADER "NAME" LENGTH 20
ADD COLUMN { || test->Other } TO xBrow HEADER "OTHER" LENGTH 20
ACTIVATE DIALOG xDlg ON ACTIVATE { || xDlg:xBrow:SetFocus() }
RETURN
STATIC FUNCTION CreateDbf()
dbCreate( "test.dbf", { ;
{ "NAME", "C", 20, 0 }, ;
{ "OTHER", "C", 20, 0 } } )
USE test
APPEND BLANK
REPLACE NAME WITH "primeiro", OTHER WITH "primeiro"
APPEND BLANK
REPLACE NAME WITH "segundo", OTHER WITH "segundo"
USE
RETURN Nil
Código: Selecionar todos
xBrow:lInFocus := .T.
Código: Selecionar todos
******************************************************************************
** TBROWSER CLIENTES **
**********************
#include "hwgui.ch"
#include "windows.ch"
STATIC oBrw , ThisCli
PROCEDURE DB_CADCLI(oMainWnd) // Função principal de cadastro de clientes
LOCAL GETLIST := {}
PRIVATE oDlgClientes, oTab, oPanel1
PRIVATE oOwnerbutton1, oRadiobutton1, oOwnerbutton2, oRadiobutton2 , oOwnerbutton3, oOwnerbutton4
PRIVATE vEdit1_pesquisar := "", vRadiogroup1 := 1
PRIVATE oEdit1_pesquisar, oRadiogroup1, oGroup1
// Cria o diálogo e centraliza ele na janela principal
INIT DIALOG oDlgClientes ;
TITLE "Registro de Clientes" ;
CLIPPER NOEXIT;
AT 0, 0 ;
SIZE 1200, 645 ;
FONT oFontDlg ;
STYLE WS_CAPTION + DS_CENTER + WS_VISIBLE
ThisCli := oDlgClientes
@ 5,5 TAB oTab ITEMS {} SIZE 1188, 635 ;
ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS ;
ON GETFOCUS { || oTab:oBrw:SetFocus()}
BEGIN PAGE "Consulta" OF oTab
hwg_SetColorInFocus( .T., COLOR_BLACK,COLOR_YELLOW )
@ 01,25 PANEL oPanel1 SIZE 1182,60 ; // HSTYLE HStyle():New( {16770002,16772062}, 1,, 0.4, 16759929 );
@ 2,6 OWNERBUTTON oOwnerbutton1 OF oPanel1 SIZE 62,50 ;//ON CLICK {|| ThisCli:CLOSE() } ;
TEXT 'Incluir' COORDINATES 0, 28, 0, 0 ;
FONT HFont():Add( 'MS Sans Serif',0,-11,400,,,) ;
BITMAP HBitmap():AddResource('bmp_new') COORDINATES 0, 5, 0, 0 TRANSPARENT COLOR 12632256 ;
TOOLTIP "Incluir Cliente"
@ 67,6 OWNERBUTTON oOwnerbutton2 OF oPanel1 SIZE 62,50 ;//ON CLICK {|| ThisCli:CLOSE() } ;
TEXT 'Alterar' COORDINATES 0, 28, 0, 0 ;
FONT HFont():Add( 'MS Sans Serif',0,-11,400,,,) ;
BITMAP "bmp_edit" FROM RESOURCE COORDINATES 0, 5, 0, 0 TRANSPARENT COLOR 12632256;
TOOLTIP "Alterar datos del Cliente"
@ 132,6 OWNERBUTTON oOwnerbutton3 OF oPanel1 SIZE 62,50 ;//ON CLICK {|| ThisCli:CLOSE() } ;
TEXT 'Eliminar' COORDINATES 0, 28, 0, 0 ;
FONT HFont():Add( 'MS Sans Serif',0,-11,400,,,) ;
BITMAP "smcancel" FROM RESOURCE COORDINATES 0, 5, 0, 0 TRANSPARENT COLOR 12632256;
TOOLTIP "Borrar Registro"
@ 1120,6 OWNERBUTTON oOwnerbutton4 OF oPanel1 SIZE 62,50 ON CLICK {|| hwg_EndDialog(oDlgClientes:handle()) } ;
TEXT 'Salir' COORDINATES 0, 28, 0, 0 ;
FONT HFont():Add( 'MS Sans Serif',0,-11,400,,,) ;
BITMAP "smexit" FROM RESOURCE COORDINATES 0, 5, 0, 0 TRANSPARENT COLOR 12632256;
TOOLTIP "Salir del los registros"
@ 250,1 GET RADIOGROUP oRadiogroup1 VAR vRadiogroup1 CAPTION "Orden" OF oPanel1 SIZE 300,56;
@ 255,14 RADIOBUTTON oRadiobutton1 CAPTION "&Nombre" OF oPanel1 SIZE 90,22;
ON CLICK {|| ORDSETFOCUS("CLICX_02"),oBrw:SetFocus(),oBrw:Refresh(),oEdit1_pesquisar:SetFocus() }
@ 255,33 RADIOBUTTON oRadiobutton2 CAPTION "Nombre &Comercial" OF oPanel1 SIZE 140,22;
ON CLICK {|| ORDSETFOCUS("CLICX_06"),oBrw:SetFocus(),oBrw:Refresh(),oEdit1_pesquisar:SetFocus() }
@ 400,33 RADIOBUTTON oRadiobutton3 CAPTION "&RUC" OF oPanel1 SIZE 90,21 ;
ON CLICK {|| ORDSETFOCUS("CLICX_09"),oBrw:SetFocus(),oBrw:Refresh(),oEdit1_pesquisar:SetFocus() }
@ 400,14 RADIOBUTTON oRadiobutton4 CAPTION "&Código" OF oPanel1 SIZE 90,22 ;
ON CLICK {|| ORDSETFOCUS("CLICX_03"),oBrw:SetFocus(),oBrw:Refresh(),oEdit1_pesquisar:SetFocus() }
END RADIOGROUP SELECTED vRadiogroup1
@ 649,1 GROUPBOX oGroup1 CAPTION "Búsqueda" OF oPanel1 SIZE 389,55 // STYLE BS_LEFT
@ 655,27 GET oEdit1_pesquisar VAR vEdit1_pesquisar OF oPanel1 PICTURE "@!" SIZE 371,22 MAXLENGTH 30 ;
VALID {|| If( hwg_GetKeyState( VK_RETURN ) < 0, ;
( oBrw:SetFocus(), .f. ), .t. ) } ;
ON CHANGE {|| BuscaPorContemCliente(oEdit1_pesquisar:GetText(), oBrw), .t. };
STYLE WS_TABSTOP
BrowserCliente()
END PAGE OF oTab
BEGIN PAGE "Datos Cadastrales" OF oTab
END PAGE OF oTab
BEGIN PAGE "Movimientos" OF oTab
END PAGE OF oTab
BEGIN PAGE "Pedidos" OF oTab
END PAGE OF oTab
BEGIN PAGE "Facturas" OF oTab
END PAGE OF oTab
BEGIN PAGE "Productos" OF oTab
END PAGE OF oTab
ACTIVATE DIALOG oDlgClientes //ON ACTIVATE { || oBrw:SetFocus() }
RETURN Nil
Código: Selecionar todos
@ 2, 85 BROWSE oBrw DATABASE OF oTab SIZE 1182, 540 STYLE WS_BORDER + WS_VSCROLL + WS_HSCROLL + WS_TABSTOP ;
ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS ;
ON RIGHTCLICK{|| ClickDireito(oDlgClientes,oBrw), oDlgClientes:oPopup:Show( oDlgClientes ) };
FONT HFont():Add( 'Courier New', 0, -13, 400,,, );
ON UPDATE {|| oBrw:REFRESH() }
oBrw:alias := 'CLI'
oBrw:bKeyDown := { |o, key| ;
IIF(key == VK_F12, (oEdit1_pesquisar:SetFocus(), .F.), ;
IIF(key == VK_ESCAPE, (hwg_EndDialog(oDlgClientes:handle), .F.), ;
.T.))}
oBrw:oStyleHead := HStyle():New( { 0xffffff, 0xbbbbbb }, 1,, 0.4, COLOR_BLUE )
oBrw:nColumns := LEN(aCamp)
oBrw:freeze := 2
oBrw:lDispHead := .T.
oBrw:lSep3d := .T.
oBrw:lAdjRight := .F.
Use oBrowse1:lInfocus := .T. que resolve isso, esse problema so ocorre quando se usa PAGEdeividdjs escreveu:Boa tarde Zé .. blz ??
está ocorrendo um probleminha aqui ao dar foco no browse .. veja ai se tu ja passou por isso ... ele até dá o foco no browse porem eu tenho q dar dois toque na seta pra baixo pra navegar pelo browse ... sabe o q pode ser??
você acredita q testei isso ontem e não funcionou ..porque esse poste do Zé .... porem coloquei GETFOCUS do PAGE .. agora coloquei só no INIT do DIALOG .. fungou!!JoséQuintas escreveu:Chegou a resposta
Código: Selecionar todos
xBrow:lInFocus := .T.
Código: Selecionar todos
******************************************************************************
** TBROWSER CLIENTES **
**********************
#include "hwgui.ch"
STATIC oBrw , ThisCli
PROCEDURE DB_CADCLI() // Função principal de cadastro de clientes
LOCAL GETLIST := {}
PRIVATE oDlg, oTab, oPanel1
PRIVATE oOwnerbutton1, oRadiobutton1, oOwnerbutton2, oRadiobutton2 , oOwnerbutton3, oOwnerbutton4
PRIVATE vEdit1_pesquisar := "", vRadiogroup1 := 1
PRIVATE oEdit1_pesquisar, oRadiogroup1, oGroup1
PRIVATE oPhantom , cPHANTOM
// Cria o diálogo e centraliza ele na janela principal
INIT DIALOG oDlg ;
TITLE "Registro de Clientes" ;
CLIPPER NOEXIT;
AT 0, 0 ;
SIZE 1200, 645 ;
FONT oFontDlg ;
STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+DS_CENTER+MB_USERICON ;//
ON INIT {|This| HWG_SETWINDOWTHEME( this:handle,0),oBrw:lInfocus := .T. }
ThisCli := oDlg
@ 5,5 TAB oTab ITEMS {} SIZE 1188, 635 ;
ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS ;
ON GETFOCUS { || oDlg:oTab:oBrw:SetFocus()}
BEGIN PAGE "Consulta" OF oTab
hwg_SetColorinFocus( .T.,, 13172680 )
//hwg_SetColorInFocus( .T., COLOR_BLACK,COLOR_YELLOW )
@ 01,25 PANEL oPanel1 SIZE 1182,60 ; // HSTYLE HStyle():New( {16770002,16772062}, 1,, 0.4, 16759929 );
@ 2,6 OWNERBUTTON oOwnerbutton1 OF oPanel1 SIZE 62,50 ;//ON CLICK {|| ThisCli:CLOSE() } ;
TEXT 'Incluir' COORDINATES 0, 28, 0, 0 ;
FONT HFont():Add( 'MS Sans Serif',0,-11,400,,,) ;
BITMAP HBitmap():AddResource('bmp_new') COORDINATES 0, 5, 0, 0 TRANSPARENT COLOR 12632256 ;
TOOLTIP "Incluir Cliente"
@ 67,6 OWNERBUTTON oOwnerbutton2 OF oPanel1 SIZE 62,50 ;
TEXT 'Alterar' COORDINATES 0, 28, 0, 0 ;
FONT HFont():Add( 'MS Sans Serif',0,-11,400,,,) ;
BITMAP "bmp_edit" FROM RESOURCE COORDINATES 0, 5, 0, 0 TRANSPARENT COLOR 12632256;
TOOLTIP "Alterar datos del Cliente"
@ 132,6 OWNERBUTTON oOwnerbutton3 OF oPanel1 SIZE 62,50 ;
TEXT 'Eliminar' COORDINATES 0, 28, 0, 0 ;
FONT HFont():Add( 'MS Sans Serif',0,-11,400,,,) ;
BITMAP "smcancel" FROM RESOURCE COORDINATES 0, 5, 0, 0 TRANSPARENT COLOR 12632256;
TOOLTIP "Borrar Registro"
@ 1120,6 OWNERBUTTON oOwnerbutton4 OF oPanel1 SIZE 62,50 ON CLICK {|| hwg_EndDialog(oDlg:handle()) } ;
TEXT 'Salir' COORDINATES 0, 28, 0, 0 ;
FONT HFont():Add( 'MS Sans Serif',0,-11,400,,,) ;
BITMAP "smexit" FROM RESOURCE COORDINATES 0, 5, 0, 0 TRANSPARENT COLOR 12632256;
TOOLTIP "Salir del los registros"
@ 250,1 GET RADIOGROUP oRadiogroup1 VAR vRadiogroup1 CAPTION "Orden" OF oPanel1 SIZE 300,56;
@ 255,14 RADIOBUTTON oRadiobutton1 CAPTION "&Nombre" OF oPanel1 SIZE 90,22;
ON CLICK {|| ORDSETFOCUS("CLICX_02"),oBrw:SetFocus(),oBrw:Refresh(),oEdit1_pesquisar:SetFocus() }
@ 255,33 RADIOBUTTON oRadiobutton2 CAPTION "Nombre &Comercial" OF oPanel1 SIZE 140,22;
ON CLICK {|| ORDSETFOCUS("CLICX_06"),oBrw:SetFocus(),oBrw:Refresh(),oEdit1_pesquisar:SetFocus() }
@ 400,33 RADIOBUTTON oRadiobutton3 CAPTION "&RUC" OF oPanel1 SIZE 90,21 ;
ON CLICK {|| ORDSETFOCUS("CLICX_09"),oBrw:SetFocus(),oBrw:Refresh(),oEdit1_pesquisar:SetFocus() }
@ 400,14 RADIOBUTTON oRadiobutton4 CAPTION "&Código" OF oPanel1 SIZE 90,22 ;
ON CLICK {|| ORDSETFOCUS("CLICX_03"),oBrw:SetFocus(),oBrw:Refresh(),oEdit1_pesquisar:SetFocus() }
END RADIOGROUP SELECTED vRadiogroup1
@ 649,1 GROUPBOX oGroup1 CAPTION "Búsqueda [F12]" OF oPanel1 SIZE 389,55
@ 655,27 GET oEdit1_pesquisar VAR vEdit1_pesquisar OF oPanel1 PICTURE "@!" SIZE 371,22 MAXLENGTH 30 ;
ON CHANGE { || BuscaPorContemCliente( oEdit1_pesquisar:GetText(), oBrw ),oBrw:lInfocus := .T.}
@ 655,27 GET oPhantom VAR cPHANTOM SIZE 0,0
BrowserCliente()
END PAGE OF oTab
BEGIN PAGE "Datos Cadastrales" OF oTab
_page()
END PAGE OF oTab
BEGIN PAGE "Movimientos" OF oTab
END PAGE OF oTab
BEGIN PAGE "Pedidos" OF oTab
END PAGE OF oTab
BEGIN PAGE "Facturas" OF oTab
END PAGE OF oTab
BEGIN PAGE "Productos" OF oTab
END PAGE OF oTab
ACTIVATE DIALOG oDlg
RETURN Nil
Código: Selecionar todos
*------------------------------------------------------*
FUNCTION BrowserCliente()
*------------------------------------------------------*
//LOCAL oTab
LOCAL aCamp, aCab, aPict, nLast, nRec := 1 , n1
LOCAL cFieldName, nWidth, nDec, cType, oColuna
LOCAL aContas := {}
KSETCAPS(.T.)
if PAR->CC_PAIS = "B" // Brasil
aCamp := {;
"CC_CODCLI",;
"CC_NOME",;
"CC_TELCOM",;
{||IIF(CC_FJ <> SPACE(01), IIF( CC_FJ = 'J','JURIDICA','FISICA '),' ')},;
"CC_FANTAS",;
{||IIF(CC_CPF # SPACE(11), TRANSFORM(CC_CPF,"@R 999.999.999-99 "),TRANSFORM(CC_CGC,"@R 99.999.999/9999-99"))},;
"CC_END",;
"CC_CID",;
"CC_CEP",;
"CD_DTCAD",;
"CC_HORCAD",;
"CC_USUCAD"}
aTam := {;
"06",;
"41",;
"14",;
"11",;
"41",;
"41",;
"13",;
"31",;
"11",;
"11",;
"11",;
"11"}
aCab := {;
"Cód.",;
"Razão Social / Nome do Cliente",;
"Telefone",;
"Física/Jurídica",;
"Fantasia",;
"CPF/CNPJ",;
"Endereço",;
"Cidade",;
"CEP",;
"Registro",;
"Horário",;
"Operador"}
aPict := {;
"99999",;
"@!",;
"@R",;
"@!",;
"@!",;
"@!",;
"@!",;
"@!",;
"@R",;
"@D",;
"99:99:99",;
"@!"}
else // Paraguai
aCamp := {;
"CC_CODCLI",;
"CC_NOME",;
"CC_TELCOM",;
"CC_RUC",;
{||IIF(CC_FJ <> SPACE(01), IIF( CC_FJ = 'J','JURIDICA','FISICA '),' ')},;
"CC_FANTAS",;
"CC_END",;
"CC_CID",;
"CD_DTCAD",;
"CC_HORCAD",;
"CC_USUCAD"}
aTam := {;
"06",;
"41",;
"14",;
"15",;
"09",;
"41",;
"36",;
"21",;
"11",;
"11",;
"11"}
aCab := {;
"Cód.",;
"Nombre del Cliente",;
"Teléfono",;
"R.U.C.",;
"Tipo",;
"Nombre Comercial",;
"Dirección",;
"Ciudad",;
"Registro",;
"Hora",;
"Usuario"}
aPict := {;
"99999",;
"@!",;
"@R",;
"@!",;
"@!",;
"@!",;
"@!",;
"@!",;
"@D",;
"99:99:99",;
"@!"}
endif
@ 2, 85 BROWSE oBrw DATABASE OF oTab SIZE 1182, 540 STYLE WS_BORDER + WS_VSCROLL + WS_HSCROLL + WS_TABSTOP ;
ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS ;
ON RIGHTCLICK{|| ClickDireito(oDlg,oBrw), oDlg:oPopup:Show( oDlg ) };
FONT HFont():Add( 'Courier New', 0, -13, 400,,, )
oBrw:alias := 'CLI'
oBrw:bKeyDown := { |o, key| ;
IIF(key == VK_F12, (oEdit1_pesquisar:SetFocus(), .F.), ;
IIF(key == VK_ESCAPE, (hwg_EndDialog(oDlg:handle), .F.), ;
.T.))}
oBrw:nHeadRows := 2
oBrw:oStyleHead := HStyle():New( { 0, 13400576 }, 1,, 0.4, 16759929 )
oBrw:headColor := 16777215
oBrw:nColumns := LEN(aCamp)
oBrw:freeze := 2
oBrw:lDispHead := .T.
oBrw:lSep3d := .T.
oBrw:lAdjRight := .F.
oBrw:bPosChanged := {||n1 := oBrw:nCurrent}
SELECT (oBrw:alias)
ORDSETFOCUS("CLICX_02")
nLast := LASTREC()
dbGoTop()
aContas := CarregarContasClientes() // carrega clientes com contas atrasadas na array
FOR i := 1 TO LEN(aCamp)
// Pegando as informações do campo baseado na posição
cFieldName := FIELDNAME(i) // Nome do campo
nWidth := FIELDLEN(i) // Largura do campo
nDec := FIELDDEC(i) // Casas decimais do campo (se houver)
cType := IF(FIELDTYPE(i) == "N", 'N', 'C') // Tipo do campo (Numérico ou Caractere)
IF VALTYPE(aCamp[i]) == "B"
oBrw:AddColumn( HColumn():New( aCab[i], (aCamp[i]), cType, val(aTam[i]), nDec, .F., 0, 0,, 0, aPict[i] ) )
ELSE
oBrw:AddColumn( HColumn():New( aCab[i], FieldBlock(aCamp[i]), cType, val(aTam[i]), nDec, .F., 0, 0,, 0, aPict[i] ) )
ENDIF
NEXT
BEGIN SEQUENCE
bColorBlock := { || IF( ClienteAtrasado(CLI->cc_codcli, aContas), ; // Verifica cliente atrasado
{ hwg_RED, ; // Cor da fonte vermelha para cliente atrasado
IIF(MOD(oBrw:nPaintRow, 2) = 0, hwg_ALICEBLUE, hwg_WHITE), ; // Cor de fundo zebragem
IIF(MOD(oBrw:nPaintRow, 2) = 0, hwg_ALICEBLUE, hwg_WHITE), ; // Fundo zebra
hwg_RED }, ; // Texto vermelho para clientes atrasados
{ hwg_DARKBLUE, ; // Texto azul escuro para clientes não atrasados
IIF(MOD(oBrw:nPaintRow, 2) = 0, hwg_ALICEBLUE, hwg_WHITE), ; // Fundo zebra
IIF(MOD(oBrw:nPaintRow, 2) = 0, hwg_ALICEBLUE, hwg_WHITE), ; // Fundo zebra
hwg_DARKBLUE } ) } // Cor de fundo zebra e texto azul escuro
END SEQUENCE
FOR EACH oColuna IN oBrw:aColumns
oColuna:bColorBlock := bColorBlock
NEXT
oBrw:Anchor := 15
oBrw:Refresh()
RETURN Nil
Como foi explicado em 2008 pelo Luis Bassofiz o teste com o tutor .. e não pulas gets com enter ...