Hola foro,
Necesito cargar un Browse desde un GET y seleccionar un registro para llenar el mismo
Alguien tiene un ejemplo de como hacerlo?
Gracias de antemano
REDEFINE GET oObra VAR cObra ID 101 BITMAP "OBRAS1" OF oDlg PICTURE "9999" ;
ACTION ( cObra := Busqueda( cAlias ), oInicio:SetFocus(), oDlg:UPDATE() ) ;
VALID ( Rellena( oObra ) ) .AND. ;
( IF( Obr->( dbSeek( cObra ) ), ( oDlg:UPDATE(), .T. ), ;
( cObra := Busqueda( "Obr" ), oSayObra:Refresh(), oInicio:SetFocus(), oDlg:UPDATE(), .T. ) ) ) UPDATE
oObra:bGotfocus := { || oWndMain:SetMsg( "Codigo de obra.Tecla <+> permite buscar" ) }
oObra:bKeyDown := { | nKey | IIf( nKey = VK_ADD, ( cObra := Busqueda( "Obr" ), oDlg:UPDATE(), oInicio:SetFocus() ), ) }
FUNCTION Rellena( oVar1 )
LOCAL cValor
cValor := oVar1:cText() // Recupera el valor del Objeto Get
IF ! Empty( cValor )
cValor := PadL( AllTrim( cValor ), Len( cValor ), "0" )
oVar1:cText( cValor ) // Asigna el valor con Ceros al objeto Get
oVar1:Refresh() // le indico al objeto Get, que se vuelva a pintar
ENDIF
RETURN .T.
// ------------------------------------------------------------------------
FUNCTION Busqueda( cAlias )
LOCAL xVret
LOCAL oDlg, oBrw
LOCAL oRad, oBusqueda, oSayCodigo, oSayNombre
LOCAL nRad, cBusqueda
LOCAL oDbf
LOCAL lanzaEdit, lanzaAdd
LOCAL cBloqueEdit, cBloqueAdd, bBloqueEdit, bBloqueAdd
LOCAL cIndice := ( cAlias ) ->( ordSetFocus() )
dbSelectArea( cAlias )
DATABASE oDbf
DEFINE DIALOG oDlg NAME "BUSCAR" ;
TITLE "Buscar Registro"
// El alias puede ser Prov,Art,Trab,Obr. Hay que adaptarlo a los alias a buscar
DO CASE
CASE cAlias = "Prov"
lanzaEdit := "EditProve(.F.)"
lanzaAdd := "EditProve(.T.)"
CASE cAlias = "Obr"
lanzaEdit := "EditObras(.F.)"
lanzaAdd := "EditObras(.T.)"
CASE cAlias = "Trab"
lanzaEdit := "EditTraba(.F.)"
lanzaAdd := "EditTraba(.T.)"
CASE cAlias = "Art"
lanzaEdit := "EditArti(.F.)"
lanzaAdd := "EditArti(.T.)"
END CASE
cBloqueEdit := "{ |oBrw| " + lanzaEdit + ",oBrw:Refresh(),oBrw:SetFocus() }"
cBloqueAdd := "{ |oBrw| " + lanzaAdd + ",oBrw:Refresh(),oBrw:SetFocus() }"
bBloqueEdit := &( cBloqueEdit )
bBloqueAdd := &( cBloqueAdd )
nRad := Space( 1 )
nRad := 2
/* oDbf:SetOrder(2)
cBusqueda:=SPACE(15) */
REDEFINE SAY oSayCodigo PROMPT IF( nRad == 1, "Codigo", "Nombre" ) ID 99 OF oDlg COLOR CLR_GREEN UPDATE
REDEFINE SAY oSayNombre PROMPT ( cAlias ) ->Nombre ID 98 OF oDlg COLOR CLR_RED UPDATE
REDEFINE GET oBusqueda VAR cBusqueda ID 100 OF oDlg ;
PICTURE "@!" ON CHANGE ( ::Assign(), IIf( oDbf:SEEK( cBusqueda ), ( oBrw:UpStable(), oDlg:UPDATE() ), ) )
REDEFINE RADIO oRad VAR nRad ID 102, 103 OF oDlg ;
ON CHANGE ( IF( nRad == 1, ( oDbf:SetOrder( 1 ), cBusqueda := Space( 4 ) ), ( oDbf:SetOrder( 2 ), cBusqueda := Space( 15 ) ) ), oBusqueda:SetFocus() ) ;
VALID ( IF( nRad == 1, oSayCodigo := "Codigo", oSayCodigo := "Nombre" ), oDlg:UPDATE(), .T. ) UPDATE
REDEFINE BTNBMP ID 109 RESOURCE "ADD1" OF oDlg ACTION Eval( bBloqueAdd, oBrw ) TOOLTIP "Añadir egistros" NOBORDER // Añade un registro
REDEFINE BTNBMP ID 108 RESOURCE "EDIT1" OF oDlg ACTION Eval( bBloqueEdit, oBrw ) TOOLTIP "Modificar registros" NOBORDER // Modifica un regitro
REDEFINE BTNBMP ID 104 RESOURCE "SELECT1" OF oDlg ACTION ( xVret := ( cAlias ) ->Codigo, oDlg:END() ) TOOLTIP "Seleccionar registro" NOBORDER // Selecciona
REDEFINE BTNBMP ID 105 RESOURCE "EXIT3" OF oDlg ACTION ( xVret := ( cAlias ) ->Codigo, oDlg:END() ) TOOLTIP "Abandona busqueda" NOBORDER
REDEFINE LISTBOX oBrw FIELDS oDbf:Codigo, oDbf:Nombre ;
Alias (cAlias) HEADERS "CODIGO", "NOMBRE" ;
ON CHANGE ( oSayNombre := ( cAlias ) ->Nombre, oDlg:UPDATE() ) ;
ON DBLCLICK ( xVret := ( cAlias ) ->Codigo, oDlg:END() ) ;
ID 106 OF oDlg UPDATE
oDbf:Gotop()
oBrw:bSkip = { | nRecs | oDbf:Skipper( nRecs ) }
oBrw:nLineStyle := 3 // ( Puede asumir valores 0 a 10 ) 1,3
oBrw:bGotFocus := { || oBrw:Refresh() }
oBrw:bKeyDown := { | nKey | IIf( nKey = 13, ( xVret := ( cAlias ) ->Codigo, oDlg:END() ), ) }
ACTIVATE DIALOG oDlg CENTERED ON INIT ( oDbf:SetOrder( 2 ), cBusqueda := Space( 15 ), oBusqueda:SetFocus() ) ;
VALID ( xVret := ( cAlias ) ->Codigo, ( cAlias ) ->( ordSetFocus( cIndice ) ), .T. )
RETURN ( xVret )
// -------------------------------------------------------------------------
LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_MODERN
BUSCAR DIALOG 26, 47, 274, 173
STYLE DS_3DLOOK | DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU
CAPTION "LOCALIZACION REGISTRO"
FONT 10, "Arial"
{
EDITTEXT 100, 8, 32, 204, 12, WS_GROUP, WS_EX_LEFT
CONTROL "", 106, "TWBrowse", 0x50A30000, 0, 68, 268, 102, 0x00000000
AUTORADIOBUTTON "Código", 102, 224, 20, 36, 10, 0, WS_EX_LEFT
AUTORADIOBUTTON "Nombre", 103, 224, 40, 36, 10, 0, WS_EX_LEFT
GROUPBOX "Busqueda", 101, 219, 1, 49, 63, 0, WS_EX_LEFT
LTEXT ".", 99, 79, 20, 69, 8, NOT WS_GROUP | SS_LEFT, WS_EX_LEFT
LTEXT "", 98, 12, 10, 121, 8, NOT WS_GROUP | SS_LEFT, WS_EX_LEFT
LTEXT "Búsqueda por :", -1, 11, 20, 51, 9, NOT WS_GROUP | SS_LEFT, WS_EX_LEFT
GROUPBOX "", 4001, 4, 0, 213, 64, 0, WS_EX_LEFT
PUSHBUTTON "", 109, 8, 48, 18, 14, BS_BITMAP, WS_EX_LEFT
PUSHBUTTON "", 108, 28, 48, 18, 14, BS_BITMAP, WS_EX_LEFT
PUSHBUTTON "", 104, 48, 48, 18, 14, BS_BITMAP, WS_EX_LEFT
PUSHBUTTON "", 105, 68, 48, 18, 14, BS_BITMAP, WS_EX_LEFT
}
jvtecheto wrote:Hola amigo:
Yo utilizo algo como lo que pides, pero a ver como te lo explico. Lo intento... Este es el codigo del GET que tiene un bitmap (como puedes comprobar) tambien tengo en cuenta si el usuario pulsa simplemente Enter
que se lance la busqueda del codigo, tambien que pulse la tecla + , utilizo en ello dos funciones una trivial rellena() en la cual relleno automaticamente con ceros a la izquierda , la puedes desechar si quieres y luego
la de la busqueda en si que es un dialogo en el que se muestra el browse y permite buscar.
Se podria mejorar muchisimo con busqueda incremental, no lo he conseguido nunca desde un dialogo, tambien el codigo sera muy mejorable, pero a mi me funciona.
Ah veras que utilizo listbox en vez de XBrowse , no he conseguido nunca colocar los botones arriba del Xbrowse y que se vean bien, lo tengo pendiente, puedes probar tu.
Tambien veras que en la funciona hay uN DO CASE, ya que utilizo el mismo dialogo para todas las tablas que busco, ajusta tu, tus alias y las tablas que quieres buscar
A ver por partes.
codigo del GET
- Code: Select all Expand view
REDEFINE GET oObra VAR cObra ID 101 BITMAP "OBRAS1" OF oDlg PICTURE "9999" ;
ACTION ( cObra := Busqueda( cAlias ), oInicio:SetFocus(), oDlg:UPDATE() ) ;
VALID ( Rellena( oObra ) ) .AND. ;
( IF( Obr->( dbSeek( cObra ) ), ( oDlg:UPDATE(), .T. ), ;
( cObra := Busqueda( "Obr" ), oSayObra:Refresh(), oInicio:SetFocus(), oDlg:UPDATE(), .T. ) ) ) UPDATE
oObra:bGotfocus := { || oWndMain:SetMsg( "Codigo de obra.Tecla <+> permite buscar" ) }
oObra:bKeyDown := { | nKey | IIf( nKey = VK_ADD, ( cObra := Busqueda( "Obr" ), oDlg:UPDATE(), oInicio:SetFocus() ), ) }
Codigo funciones Rellena y Busqueda
- Code: Select all Expand view
FUNCTION Rellena( oVar1 )
LOCAL cValor
cValor := oVar1:cText() // Recupera el valor del Objeto Get
IF ! Empty( cValor )
cValor := PadL( AllTrim( cValor ), Len( cValor ), "0" )
oVar1:cText( cValor ) // Asigna el valor con Ceros al objeto Get
oVar1:Refresh() // le indico al objeto Get, que se vuelva a pintar
ENDIF
RETURN .T.
// ------------------------------------------------------------------------
FUNCTION Busqueda( cAlias )
LOCAL xVret
LOCAL oDlg, oBrw
LOCAL oRad, oBusqueda, oSayCodigo, oSayNombre
LOCAL nRad, cBusqueda
LOCAL oDbf
LOCAL lanzaEdit, lanzaAdd
LOCAL cBloqueEdit, cBloqueAdd, bBloqueEdit, bBloqueAdd
LOCAL cIndice := ( cAlias ) ->( ordSetFocus() )
dbSelectArea( cAlias )
DATABASE oDbf
DEFINE DIALOG oDlg NAME "BUSCAR" ;
TITLE "Buscar Registro"
// El alias puede ser Prov,Art,Trab,Obr. Hay que adaptarlo a los alias a buscar
DO CASE
CASE cAlias = "Prov"
lanzaEdit := "EditProve(.F.)"
lanzaAdd := "EditProve(.T.)"
CASE cAlias = "Obr"
lanzaEdit := "EditObras(.F.)"
lanzaAdd := "EditObras(.T.)"
CASE cAlias = "Trab"
lanzaEdit := "EditTraba(.F.)"
lanzaAdd := "EditTraba(.T.)"
CASE cAlias = "Art"
lanzaEdit := "EditArti(.F.)"
lanzaAdd := "EditArti(.T.)"
END CASE
cBloqueEdit := "{ |oBrw| " + lanzaEdit + ",oBrw:Refresh(),oBrw:SetFocus() }"
cBloqueAdd := "{ |oBrw| " + lanzaAdd + ",oBrw:Refresh(),oBrw:SetFocus() }"
bBloqueEdit := &( cBloqueEdit )
bBloqueAdd := &( cBloqueAdd )
nRad := Space( 1 )
nRad := 2
/* oDbf:SetOrder(2)
cBusqueda:=SPACE(15) */
REDEFINE SAY oSayCodigo PROMPT IF( nRad == 1, "Codigo", "Nombre" ) ID 99 OF oDlg COLOR CLR_GREEN UPDATE
REDEFINE SAY oSayNombre PROMPT ( cAlias ) ->Nombre ID 98 OF oDlg COLOR CLR_RED UPDATE
REDEFINE GET oBusqueda VAR cBusqueda ID 100 OF oDlg ;
PICTURE "@!" ON CHANGE ( ::Assign(), IIf( oDbf:SEEK( cBusqueda ), ( oBrw:UpStable(), oDlg:UPDATE() ), ) )
REDEFINE RADIO oRad VAR nRad ID 102, 103 OF oDlg ;
ON CHANGE ( IF( nRad == 1, ( oDbf:SetOrder( 1 ), cBusqueda := Space( 4 ) ), ( oDbf:SetOrder( 2 ), cBusqueda := Space( 15 ) ) ), oBusqueda:SetFocus() ) ;
VALID ( IF( nRad == 1, oSayCodigo := "Codigo", oSayCodigo := "Nombre" ), oDlg:UPDATE(), .T. ) UPDATE
REDEFINE BTNBMP ID 109 RESOURCE "ADD1" OF oDlg ACTION Eval( bBloqueAdd, oBrw ) TOOLTIP "Añadir egistros" NOBORDER // Añade un registro
REDEFINE BTNBMP ID 108 RESOURCE "EDIT1" OF oDlg ACTION Eval( bBloqueEdit, oBrw ) TOOLTIP "Modificar registros" NOBORDER // Modifica un regitro
REDEFINE BTNBMP ID 104 RESOURCE "SELECT1" OF oDlg ACTION ( xVret := ( cAlias ) ->Codigo, oDlg:END() ) TOOLTIP "Seleccionar registro" NOBORDER // Selecciona
REDEFINE BTNBMP ID 105 RESOURCE "EXIT3" OF oDlg ACTION ( xVret := ( cAlias ) ->Codigo, oDlg:END() ) TOOLTIP "Abandona busqueda" NOBORDER
REDEFINE LISTBOX oBrw FIELDS oDbf:Codigo, oDbf:Nombre ;
Alias (cAlias) HEADERS "CODIGO", "NOMBRE" ;
ON CHANGE ( oSayNombre := ( cAlias ) ->Nombre, oDlg:UPDATE() ) ;
ON DBLCLICK ( xVret := ( cAlias ) ->Codigo, oDlg:END() ) ;
ID 106 OF oDlg UPDATE
oDbf:Gotop()
oBrw:bSkip = { | nRecs | oDbf:Skipper( nRecs ) }
oBrw:nLineStyle := 3 // ( Puede asumir valores 0 a 10 ) 1,3
oBrw:bGotFocus := { || oBrw:Refresh() }
oBrw:bKeyDown := { | nKey | IIf( nKey = 13, ( xVret := ( cAlias ) ->Codigo, oDlg:END() ), ) }
ACTIVATE DIALOG oDlg CENTERED ON INIT ( oDbf:SetOrder( 2 ), cBusqueda := Space( 15 ), oBusqueda:SetFocus() ) ;
VALID ( xVret := ( cAlias ) ->Codigo, ( cAlias ) ->( ordSetFocus( cIndice ) ), .T. )
RETURN ( xVret )
// -------------------------------------------------------------------------
y el codigo del del dialogo que debes incluir a tu .RC
- Code: Select all Expand view
LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_MODERN
BUSCAR DIALOG 26, 47, 274, 173
STYLE DS_3DLOOK | DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU
CAPTION "LOCALIZACION REGISTRO"
FONT 10, "Arial"
{
EDITTEXT 100, 8, 32, 204, 12, WS_GROUP, WS_EX_LEFT
CONTROL "", 106, "TWBrowse", 0x50A30000, 0, 68, 268, 102, 0x00000000
AUTORADIOBUTTON "Código", 102, 224, 20, 36, 10, 0, WS_EX_LEFT
AUTORADIOBUTTON "Nombre", 103, 224, 40, 36, 10, 0, WS_EX_LEFT
GROUPBOX "Busqueda", 101, 219, 1, 49, 63, 0, WS_EX_LEFT
LTEXT ".", 99, 79, 20, 69, 8, NOT WS_GROUP | SS_LEFT, WS_EX_LEFT
LTEXT "", 98, 12, 10, 121, 8, NOT WS_GROUP | SS_LEFT, WS_EX_LEFT
LTEXT "Búsqueda por :", -1, 11, 20, 51, 9, NOT WS_GROUP | SS_LEFT, WS_EX_LEFT
GROUPBOX "", 4001, 4, 0, 213, 64, 0, WS_EX_LEFT
PUSHBUTTON "", 109, 8, 48, 18, 14, BS_BITMAP, WS_EX_LEFT
PUSHBUTTON "", 108, 28, 48, 18, 14, BS_BITMAP, WS_EX_LEFT
PUSHBUTTON "", 104, 48, 48, 18, 14, BS_BITMAP, WS_EX_LEFT
PUSHBUTTON "", 105, 68, 48, 18, 14, BS_BITMAP, WS_EX_LEFT
}
Posdata, si quieres los bitmaps te los puedo enviar pero puedes usar los de tu eleccion eso no es problema.
Ya te digo que este tema es mejorable pero a mi me funciona.
Un saludo
Jose
#include "fivewin.ch"
REQUEST DBFCDX
function Main()
local cState := PadR( "New York", 25 )
local oDlg, oFont, oGet
SetGetColorFocus()
USE STATES SHARED VIA "DBFCDX" READONLY
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-16
DEFINE DIALOG oDlg SIZE 450,150 PIXEL TRUEPIXEL FONT oFont ;
TITLE "Get-PopUpBrowse"
@ 20,20 SAY "State Name :" SIZE 100,24 PIXEL OF oDlg
@ 20,140 GET oGet VAR cState SIZE 200,26 PIXEL OF oDlg ;
ACTION PopUpBrowse( "STATES", oGet, nil, 2 )
@ 90,20 BUTTON "CHECK" SIZE 100,30 PIXEL OF oDlg ACTION MsgInfo( cState )
ACTIVATE DIALOG oDlg CENTERED
RELEASE FONT oFont
return nil
REDEFINE GET aGet[56] VAR CNOMENECES PICTURE "@K" ID 76 OF oFld:aDialogs[2] ;
UPDATE COLORS CLR_BLACK, CLR_WHITE FONT oFont BITMAP "BUSCAR" ;
ACTION( BUSCA_NECESSIDADES( aGet ) )
aGet[56]:cToolTip := OemToAnsi( "<F7> - Cadastro de Necessidades" )
aGet[56]:lBtnTransparent := .T. // transparent button
aGet[56]:bKeyDown := { |nKey| IF( nKey == VK_F7, Eval( aGet[56]:bAction ), Nil ) }
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: No registered users and 53 guests