ADVPL - lEditCell customizado.
Autor: Eurai Criado: 14/08/2021 Atualizado: 07/03/2025
Neste artigo venho trazer exemplo de edição de célula com F3.
Grid TcBrowser
/*/{Protheus.doc} lEditCelluDesenv lEditCell @author Eurai Rapelli @since 2021.08.14 /*/ Static Function lEditCelluDesenv(aCampos,oBrowse,cPict,nCol,cF3,lReadOnly,bValid,aItems) Local oDlg := Nil as object Local oRect := tRect():New(0,0,0,0) as object Local oGet1 := Nil as object Local oBtn := Nil as object Local oOwner := oBrowse:oWnd as object Local nRow := oBrowse:nAt as object Local cMacro := "M->CELL"+StrZero(nRow,6) as character Local lCargo := .F. as logical Local nLastKey := 00 as numeric Local aDim := {} as array Local lTransparent := .T. as logical DEFAULT cPict := '' DEFAULT nCol := oBrowse:nColPos DEFAULT lReadOnly := .F. DEFAULT bValid := {|| .T.} oBrowse:GetCellRect(nCol,,oRect) // a janela de edicao deve ficar) aDim := {oRect:nTop,oRect:nLeft,oRect:nBottom,oRect:nRight} oDlg := MSDialog():New(0,0,0,0,'Janela sem borda',,,,nOr(WS_VISIBLE,WS_POPUP),CLR_BLACK,CLR_WHITE,,,.T.,,,,lTransparent) oDlg:nStyle := nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_VISIBLE ) &cMacro := aCampos[nRow,nCol] If ValType(aItems) == "A" oGet1 := TComboBox():New(0,0,bSetGet(&(cMacro)),aItems,0,0,oDlg,,,,,,.T.,oOwner:oFont,,.F.,,.F.,,) oGet1:bValid := { || lCargo := Eval(bValid) } Else oGet1 := TGet():New(0,0,bSetGet(&(cMacro)),oDlg,0,0,cPict,,,,oOwner:oFont,,,.T.,,,,,,,,,,,,,,,) oGet1:bValid := { || lCargo := Eval(bValid) } oGet1:cF3 := cF3 oGet1:lReadOnly := lReadOnly // oGet1:lNoButton := .F. EndIf oGet1:Move(-2,-2, (aDim[ 4 ] - aDim[ 2 ]) - 12, aDim[ 3 ] - aDim[ 1 ] + 4 ) oBtn := TButton():New( 0, 0, 'ud', oDlg, , 0, 0, , , .F., .T., .F., , .F., , , .F. ) oBtn:bGotFocus := {|| nLastKey := oDlg:nLastKey := VK_RETURN, oDlg:End(0)} oGet1:cReadVar := cMacro oDlg:bInit := { || oDlg:Move(aDim[1],aDim[2],aDim[4]-aDim[2], aDim[3]-aDim[1]) } oDlg:Activate(,,,) If lCargo aCampos[nRow,nCol] := &cMacro oBrowse:aArray[nRow,nCol] := &cMacro oBrowse:nAt := nRow SetFocus(oBrowse:hWnd) oBrowse:Refresh() EndIf Return( nLastKey <> 0 )
#INCLUDE "TOTVS.CH" /*/{Protheus.doc} UDEDITCELL UDEDITCELL @type function @author Eurai Rapelli @since 2021.08.14 @see https://udesenv.com.br /*/ User Function UDEDITCELL() Local oDlg := Nil AS Object Private oBrw01 := Nil AS Object Private aBrw01 := {} AS array aAdd( aBrw01, { Space(06), Date(), 0, 'S' } ) oDlg := MSDialog():New( 000,000,520,830,'Teste EDItCELL',,,.F.,,,,,,.T.,,,.T. ) oDlg:lMaximized := .T. oBrw01 := TCBrowse():New( 040 , 015, 380, 140,,,,oDlg,,,,, ,,,,,,,.F.,,.T.,,.F.,,, ) oBrw01:SetArray( aBrw01 ) oBrw01:bLDblClick := {|| setEditCell(oBrw01, aBrw01) } oBrw01:Align := CONTROL_ALIGN_ALLCLIENT oBrw01:AddColumn( TCColumn():New('Cliente' ,{ || aBrw01[oBrw01:nAt,01] } , "@!" ,,,"LEFT" ,060,.F.,.F.,,,,.F.,) ) oBrw01:AddColumn( TCColumn():New('Entrega' ,{ || aBrw01[oBrw01:nAt,02] } , "@!" ,,,"LEFT" ,060,.F.,.F.,,,,.F.,) ) oBrw01:AddColumn( TCColumn():New('Valor' ,{ || aBrw01[oBrw01:nAt,03] } , PesqPict("SF2",'F2_VALBRUT') ,,,"LEFT" ,060,.F.,.F.,,,,.F.,) ) oBrw01:AddColumn( TCColumn():New('Combo' ,{ || aBrw01[oBrw01:nAt,04] } , "@!" ,,,"LEFT" ,060,.F.,.F.,,,,.F.,) ) oDlg:Activate(,,,.T.) Return( Nil ) /*/{Protheus.doc} setEditCell setEditCell @author Eurai Rapelli @since 2021.08.14 /*/ Static Function setEditCell( oBrw01, aBrw01 ) If oBrw01:nColPos == 01 lEditCelluDesenv( aBrw01, oBrw01, "@!" , oBrw01:nColPos, "SA1" ) ElseIf oBrw01:nColPos == 02 lEditCelluDesenv( aBrw01, oBrw01, "@!" , oBrw01:nColPos ) ElseIf oBrw01:nColPos == 03 lEditCelluDesenv( aBrw01, oBrw01, PesqPict("SF2",'F2_VALBRUT') , oBrw01:nColPos ) ElseIf oBrw01:nColPos == 04 lEditCelluDesenv( aBrw01, oBrw01, "@!" , oBrw01:nColPos, , , , {"S=SIM","N=NAO"} ) Endif Return( Nil ) /*/{Protheus.doc} lEditCelluDesenv lEditCell @author Eurai Rapelli @since 2021.08.14 /*/ Static Function lEditCelluDesenv(aCampos,oBrowse,cPict,nCol,cF3,lReadOnly,bValid,aItems) Local oDlg := Nil as object Local oRect := tRect():New(0,0,0,0) as object Local oGet1 := Nil as object Local oBtn := Nil as object Local oOwner := oBrowse:oWnd as object Local nRow := oBrowse:nAt as object Local cMacro := "M->CELL"+StrZero(nRow,6) as character Local lCargo := .F. as logical Local nLastKey := 00 as numeric Local aDim := {} as array Local lTransparent := .T. as logical DEFAULT cPict := '' DEFAULT nCol := oBrowse:nColPos DEFAULT lReadOnly := .F. DEFAULT bValid := {|| .T.} oBrowse:GetCellRect(nCol,,oRect) // a janela de edicao deve ficar) aDim := {oRect:nTop,oRect:nLeft,oRect:nBottom,oRect:nRight} oDlg := MSDialog():New(0,0,0,0,'Janela sem borda',,,,nOr(WS_VISIBLE,WS_POPUP),CLR_BLACK,CLR_WHITE,,,.T.,,,,lTransparent) oDlg:nStyle := nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_VISIBLE ) &cMacro := aCampos[nRow,nCol] If ValType(aItems) == "A" oGet1 := TComboBox():New(0,0,bSetGet(&(cMacro)),aItems,0,0,oDlg,,,,,,.T.,oOwner:oFont,,.F.,,.F.,,) oGet1:bValid := { || lCargo := Eval(bValid) } Else oGet1 := TGet():New(0,0,bSetGet(&(cMacro)),oDlg,0,0,cPict,,,,oOwner:oFont,,,.T.,,,,,,,,,,,,,,,) oGet1:bValid := { || lCargo := Eval(bValid) } oGet1:cF3 := cF3 oGet1:lReadOnly := lReadOnly // oGet1:lNoButton := .F. EndIf oGet1:Move(-2,-2, (aDim[ 4 ] - aDim[ 2 ]) - 12, aDim[ 3 ] - aDim[ 1 ] + 4 ) oBtn := TButton():New( 0, 0, 'ud', oDlg, , 0, 0, , , .F., .T., .F., , .F., , , .F. ) oBtn:bGotFocus := {|| nLastKey := oDlg:nLastKey := VK_RETURN, oDlg:End(0)} oGet1:cReadVar := cMacro oDlg:bInit := { || oDlg:Move(aDim[1],aDim[2],aDim[4]-aDim[2], aDim[3]-aDim[1]) } oDlg:Activate(,,,) If lCargo aCampos[nRow,nCol] := &cMacro oBrowse:aArray[nRow,nCol] := &cMacro oBrowse:nAt := nRow SetFocus(oBrowse:hWnd) oBrowse:Refresh() EndIf Return( nLastKey <> 0 )
Gostou? Compartilhe com seus amigos e deixe um comentário! 😎
Um abraço, e até a próxima