marcioe Posted August 11, 2021 Report Share Posted August 11, 2021 Abaixo uma imagem do que estou querendo Quando clico na coluna com botão direito sobre a coluna ele abre a opção de esconder ou exibir colunas. Porem quando fecho e reabro a tela, ele volta no padrão, ou seja mostrando todas a colunas. gostaria de se possível salvar essas configurações e ao abrir ele setar essas propriedades conforme salva. Pois isso dará possibilidades do usuário salvar as colunas que ele quer exibir no browse de pesquisa. Agradeço aos amigos que puderem colaborar Espero que a imagem ilustre Quote Link to comment Share on other sites More sharing options...
macs Posted August 12, 2021 Report Share Posted August 12, 2021 Dê uma olhada nos métodos do xBrowse SaveState, RestoreState e OldRestoreState Quote Link to comment Share on other sites More sharing options...
marcioe Posted August 12, 2021 Author Report Share Posted August 12, 2021 desculpa não entendi a sua Dica Quote Link to comment Share on other sites More sharing options...
macs Posted August 12, 2021 Report Share Posted August 12, 2021 2 minutos atrás, marcioe disse: desculpa não entendi a sua Dica No fonte do xBrowse existe os métodos SaveState, RestoreState e OldRestoreState que você pode utilizar pra fazer o que está querendo. //----------------------------------------------------------------------------// METHOD SaveState( aAdditionalData ) CLASS TXBrowse local aData := { "nCreationOrders", "nRowHeight", "nWidths", "lHides", "cGrpHdrs", "cHeaders" } local aState := {} if ValType( aAdditionalData ) == 'A' AEval( aAdditionalData, { |c| AAdd( aData, c ) } ) endif AEval( aData, { |c| AAdd( aState, { "_" + c, OSend( Self, c ) } ) } ) //return "XSS:" + HB_StrToHex( ASave( aState ) ) // Upto FWH 11.07 return "XS1:" + FW_ValToExp( aState ) // From FWH 11.08 //----------------------------------------------------------------------------// METHOD RestoreState( cState ) CLASS TXBrowse local aState if ! Empty( cState ) if Left( cState, 2 ) == "XS" if Left( cState, 4 ) == 'XS1:' cState := SubStr( cState, 5 ) aState := &( cState ) elseif Left( cState, 4 ) == 'XSS:' aState := ARead( HB_HexToStr( SubStr( cState, 5 ) ) ) else return nil endif ::ReArrangeCols( aState[ 1, 2 ], .t. , .f. ) AEval( aState, { |a| OSend( Self, a[ 1 ], a[ 2 ] ) }, 2 ) else return ::OldRestoreState( cState ) endif ::GetDisplayCols() ::Refresh() endif return nil //----------------------------------------------------------------------------// METHOD OldRestoreState( cState ) CLASS TXBrowse local aCols := {} local aNewOrder := {} local nFor, nLen, nHeight, cCol, oCol, nOrder if Empty( cState ) return nil endif nLen := Len( ::aCols ) nHeight := Val(StrToken( cState, 1, ";" ) ) if Empty( ::nRowHeight ) return nil endif for nFor := 1 to nLen cCol := StrToken( cState, nFor + 1, ";" ) if Empty( cCol ) return nil endif nOrder := Val( StrToken( cCol, 1, ":" ) ) if nOrder < 1 .or. nOrder > nLen return nil endif aadd( aNewOrder, nOrder ) next ASort( ::aCols,,, { |x,y| x:nCreationOrder < y:nCreationOrder } ) ::nRowHeight := nHeight for nFor := 1 to nLen cCol := StrToken( cState, nFor + 1, ";" ) nOrder := Val( StrToken( cCol, 1, ":" ) ) WITH OBJECT ::aCols[ nOrder ] :lHide := ( AllTrim( StrToken( cCol, 4, ":" ) ) == "H" ) :nWidth := Val( StrToken( cCol, 2, ":" ) ) :cHeader := StrToken( cCol, 3, ":" ) :cGrpHdr := StrToken( cCol, 5, ":" ) if Empty( :cGrpHdr ) :cGrpHdr := nil endif END next AEval( aNewOrder, { |n| AAdd( aCols, ::aCols[ n ] ) } ) ::aCols := aCols ::GetDisplayCols() ::Super:Refresh() return nil Quote Link to comment Share on other sites More sharing options...
Theotokos Posted August 13, 2021 Report Share Posted August 13, 2021 faço assim: Salvo em arquivo de memória, então no inicio do fonte antes de Janelas, verifico se existe o arquivo salvo e restauro para uma variavel: cState IF File("StProduto.rli") Restore FROM ("StProduto.rli") ADDITIVE End Monta a rotina... Janela.... Browse... etc oBrw:SetFocus() oBrw:RestoreState( cState ) * ACTIVATE DIALOG odlg CENTER ON INIT (oBrw:RestoreState( cState ),oBrw:SetFocus()) VALID ( cState := oBrw:SaveState(), .T. ) * *** Ao sair SALVO novamente no arquivo de memoria Save To ("StProduto.rli") ALL LIKE cState * Quote Link to comment Share on other sites More sharing options...
marcioe Posted August 14, 2021 Author Report Share Posted August 14, 2021 Top demais amigo Obrigado a todos... Quote Link to comment Share on other sites More sharing options...
marcioe Posted April 13, 2023 Author Report Share Posted April 13, 2023 Olá a todos, a rotina está funcionado muito bem Porem uma pergunta Se tenho uma Footer com total, ao mover não fica na posição correta, Vejam a imagem Normal, o total está na certinho no rodapé Modificada, as posiçoes ficam "Zoneadas" Código abaixo *------------------------------------------------------------------------- oDB_OSERVICO_ITENS := TXBrowse():New( oDlg_DIGITA_OS_VEICULO ) oDB_OSERVICO_ITENS:cAlias := "os_itens" *------------------------------------------------------------------------- oDB_OSERVICO_ITENS:lColDividerComplete := .F. oDB_OSERVICO_ITENS:lFooter := .T. oDB_OSERVICO_ITENS:lRecordSelector := .F. oDB_OSERVICO_ITENS:lHScroll := .T. //-----> Barra Rolagem Horiz. oDB_OSERVICO_ITENS:nHeaderLines := 1.0 oDB_OSERVICO_ITENS:nDataLines := 2.0 oDB_OSERVICO_ITENS:nFooterLines := 1.0 oDB_OSERVICO_ITENS:bClrStd := {|| { M->COR_LETRAS_GRID, IIF(((oDB_OSERVICO_ITENS:cAlias)->(ORDKEYNO()))%2==0, COR_1_bClrStd , COR_2_bClrStd )}} oDB_OSERVICO_ITENS:bClrSelFocus := {|| { M->COR_1_bClrSelFocus, M->COR_2_bClrSelFocus } } oDB_OSERVICO_ITENS:bClrRowFocus := {|| { M->COR_1_bClrRowFocus, M->COR_2_bClrRowFocus } } oDB_OSERVICO_ITENS:nColDividerStyle := 4 oDB_OSERVICO_ITENS:nRowDividerStyle := 4 oDB_OSERVICO_ITENS:nMarqueeStyle := 4 oDB_OSERVICO_ITENS:nFooterLines := 1 oDB_OSERVICO_ITENS:lAllowColSwapping := .T. // Click no header (.f.)Trava oDB_OSERVICO_ITENS:lAllowRowSizing := .T. // Nao move as Linhas (nao sei) oDB_OSERVICO_ITENS:l2007 := M->ESTILO_l2007 oDB_OSERVICO_ITENS:lAllowRowSizing := .T. *------------------------------------------------------------------------- oCol := oDB_OSERVICO_ITENS:AddCol() oCol:bStrData := { || STRZERO(os_itens->CODIGO_ITEN,06,0) } oCol:cHeader := "Cód" oCol:cFooter := " " oCol:nDataStrAlign := AL_LEFT oCol:nHeadStrAlign := AL_LEFT oCol:cToolTip := {"Código do Item","Ajuda","", } oDB_OSERVICO_ITENS :aCols[1]:nWidth := 070 oDB_OSERVICO_ITENS:aCols[01]:nEditType := EDIT_BUTTON oDB_OSERVICO_ITENS:aCols[01]:bEditBlock:= {|nRow, nCol, oCol| DELETA_ITENS_ORDEM_SERVICO_VEICULO(os_itens->ID) } oDB_OSERVICO_ITENS:aCols[01]:addbmpfile( "#8017") oDB_OSERVICO_ITENS:aCols[01]:nBtnBmp := 1 oDB_OSERVICO_ITENS:aCols[01]:AddResource( "#8529" ) oDB_OSERVICO_ITENS:aCols[01]:nFootBmpNo := 2 // Footer BMP oDB_OSERVICO_ITENS:aCols[01]:bLClickFooter := { |r,c,f,o| SALVAR_CAMPOS_EXIBICAO_GRID('Grid_os_Veiculos.grd','Os_Veiculos') } *------------------------------------------------------------------------- oCol := oDB_OSERVICO_ITENS:AddCol() oCol:bStrData := { || alltrim(os_itens->NOMPRO) +ALLTRIM(os_itens->DESCRICAO_SEM_CADASTRO) + CRLF + substr(LOWER(os_itens->OBS_ITEN),01,LEN(os_itens->NOMPRO)) } oCol:cHeader := "Descrição" +CRLF + '*' oCol:cFooter := " " oCol:nDataStrAlign := AL_LEFT oCol:nHeadStrAlign := AL_LEFT oCol:cToolTip := {"Nome do Item","Ajuda","", } oDB_OSERVICO_ITENS :aCols[2]:cFooter := TRANSFORM(G_NUMERO_ITENS,"@E 9999") + ' Itens' oDB_OSERVICO_ITENS :aCols[2]:nFootStrAlign := AL_LEFT oCol:oFooterFont := O_F_BRW oDB_OSERVICO_ITENS :aCols[02]:nWidth := 400 oDB_OSERVICO_ITENS:aCols[02]:nEditType := EDIT_BUTTON oDB_OSERVICO_ITENS:aCols[02]:bEditBlock:= {|nRow, nCol, oCol| iif(os_itens->QTDE_ITEN!=0, DIGITA_OBSERVACAO_ITEM_PEDIDO_OS(os_itens->ID, os_itens->OBS_ITEN,'os_itens') , MsgStop('Escolha Um Item !',SISTEMA) ) } oDB_OSERVICO_ITENS:aCols[02]:addbmpfile( "#8640" ) oDB_OSERVICO_ITENS:aCols[02]:nBtnBmp := 1 oDB_OSERVICO_ITENS:aCols[02]:lBtnTransparent := .T. oDB_OSERVICO_ITENS:aCols[02]:lBmpStretch := .F. *------------------------------------------------------------------------- oCol := oDB_OSERVICO_ITENS:AddCol() oCol:bStrData := { || os_itens->UNDPRO } oCol:cHeader := "Und " oCol:cFooter := " " oCol:nDataStrAlign := AL_LEFT oCol:nHeadStrAlign := AL_LEFT oCol:cToolTip := {"Unidade de Medida do Item","Ajuda","", } oCol:nWidth := 20 oCol:oDataFont := O_F_90_GRAUS oCol:oHeaderFont := O_F_90_GRAUS *------------------------------------------------------------------------- oCol := oDB_OSERVICO_ITENS:AddCol() oCol:bStrData := { || TRANSFORM(os_itens->QTDE_ITEN,"@ZE 99,999.999") } oCol:cHeader := "Qtde" oCol:cFooter := " " oCol:nDataStrAlign := AL_RIGHT oCol:nHeadStrAlign := AL_LEFT oDB_OSERVICO_ITENS :aCols[4]:cFooter := TRANSFORM(G_QTD_QUANTIDADE,"@ZE 99,999.999") oDB_OSERVICO_ITENS :aCols[4]:nFootStrAlign := AL_RIGHT oCol:oFooterFont := O_F_GET oCol:cToolTip := {"Quantidade do Item","Ajuda","", } *------------------------------------------------------------------------- oCol := oDB_OSERVICO_ITENS:AddCol() oCol:bStrData := { || TRANSFORM(os_itens->VR_UNITARIO,"@ZE 99,999.999") } oCol:cHeader := "Vr.Unit" oCol:cFooter := " " oCol:nDataStrAlign := AL_RIGHT oCol:nHeadStrAlign := AL_LEFT oCol:cToolTip := {"Valor Unitário do Item","Ajuda","", } *------------------------------------------------------------------------- oCol := oDB_OSERVICO_ITENS:AddCol() oCol:bStrData := { || TRANSFORM(os_itens->DESCONTO_UNITARIO,"@ZE 9999.99") } oCol:cHeader := "Desc." oCol:cFooter := " " oCol:nDataStrAlign := AL_RIGHT oCol:nHeadStrAlign := AL_LEFT oCol:cToolTip := {"Desconto Unitário","Ajuda","", } *------------------------------------------------------------------------- oCol := oDB_OSERVICO_ITENS:AddCol() oCol:bStrData := { || TRANSFORM((os_itens->QTDE_ITEN*os_itens->VR_UNITARIO)-os_itens->DESCONTO_UNITARIO ,"@ZE 9999,999.999") } oCol:cHeader := "TOTAL" oCol:cFooter := " " oCol:nDataStrAlign := AL_RIGHT oCol:nHeadStrAlign := AL_LEFT oCol:cToolTip := {"Valor TOTAL do Item","Ajuda","", } oDB_OSERVICO_ITENS :aCols[07]:bClrStd := {|| {CLR_PRETO,CLR_LYELLOW} } oDB_OSERVICO_ITENS :aCols[07]:cFooter := TRANSFORM(G_TOTAL_PEDIDO,"@ZE 9999,999.99") oDB_OSERVICO_ITENS :aCols[07]:nFootStrAlign := AL_RIGHT oCol:oFooterFont := O_F_GET oCol:bClrFooter :={|| {CLR_VERMELHO,CLR_LYELLOW} } oCol:oDataFont := O_F_DLG2 *------------------------------------------------------------------------- oCol := oDB_OSERVICO_ITENS:AddCol() oCol:bStrData := { || PADR(ALLTRIM(DTOC(os_itens->DATA_LANCAMENTO)),11) +CRTLF+ PADR(ALLTRIM(os_itens->HORA_LANCAMENTO),11) } oCol:cHeader := "Data"+CRTLF+'Hora' oCol:cFooter := " " oCol:nDataStrAlign := AL_RIGHT oCol:nHeadStrAlign := AL_LEFT oCol:oDataFont := O_F_MINI oDB_OSERVICO_ITENS :aCols[08]:cFooter := if(G_SERVICOS!=0,'Serv.','')+CRTLF+alltrim(TRANSFORM(G_SERVICOS,"@ZE 99,999.99")) oDB_OSERVICO_ITENS :aCols[08]:nFootStrAlign := AL_RIGHT oCol:nWidth := 70 *------------------------------------------------------------------------- oCol :=oDB_OSERVICO_ITENS:AddCol() oCol :AddResource("#8381") oCol :AddResource("#8382") oCol:bBmpData := { || IF(os_itens->PRODUTO_EXTERNO_INTERNO='I',1,2) } oCol:cHeader := "Proc" oCol:cFooter := "" oCol:cToolTip := {"Procedência "+CRTLF+"E=Externa I=Interna","Ajuda","", } oCol:nDataStrAlign := AL_LEFT oCol:nHeadStrAlign := AL_LEFT oDB_OSERVICO_ITENS:nWidth := 010 oCol:bLClickHeader := {|r,c,f,o| ( LEGENDA_ORDEM_SERVICO() )} *------------------------------------------------------------------------- oCol :=oDB_OSERVICO_ITENS:AddCol() oCol :AddResource("#8261") &&& Impressora Transparente oCol :AddResource("#8260") &&& Impressora on-Azul oCol :AddResource("#8029") &&& Serviços oCol:bBmpData := { || IIf(os_itens->PRODUTO_MATERIA_PRIMA='09',3, IIf(os_itens->SL2PRO <= os_itens->QTDE_ITEN,1 , 2)) } oCol:cHeader := "SD"+CRLF +'(F)' oCol:cFooter := " " oCol:nDataStrAlign := AL_LEFT oCol:nHeadStrAlign := AL_LEFT oCol:bLClickHeader := {|r,c,f,o| ( LEGENDA_ORDEM_SERVICO() )} *------------------------------------------------------------------------- oCol := oDB_OSERVICO_ITENS:AddCol() oCol:bStrData := { || os_itens->C_BARRAS } oCol:cHeader := "C.Barras" oCol:cFooter := " " oCol:nDataStrAlign := AL_LEFT oCol:nHeadStrAlign := AL_LEFT oCol:cToolTip := {"Código de Barras "+CRTLF+"Codigo de Fabricante","Ajuda","", } *------------------------------------------------------------------------- oCol := oDB_OSERVICO_ITENS:AddCol() oCol:bStrData := { || alltrim(os_itens->OBS_01) + (os_itens->OBS_02) } oCol:cHeader := "Aplicação" oCol:cFooter := " " oCol:nDataStrAlign := AL_LEFT oCol:nHeadStrAlign := AL_LEFT *------------------------------------------------------------------------- oCol := oDB_OSERVICO_ITENS:AddCol() oCol:bStrData := { || os_itens->OBS_ITEN } oCol:cHeader := 'Observação/Colocação' oCol:cFooter := " " oCol:nDataStrAlign := AL_LEFT oCol:nHeadStrAlign := AL_LEFT *------------------------------------------------------------------------- oCol := oDB_OSERVICO_ITENS:AddCol() oCol:bStrData := { || str(os_itens->CODIGO_VENDEDOR,06,0) } oCol:cHeader := 'Mec' oCol:cFooter := " " oCol:nDataStrAlign := AL_LEFT oCol:nHeadStrAlign := AL_LEFT *------------------------------------------------------------------------- oCol := oDB_OSERVICO_ITENS:AddCol() oCol:bStrData := { || (os_itens->BALNOM) } oCol:cHeader := 'Nome Mecanico' oCol:cFooter := " " oCol:nDataStrAlign := AL_LEFT oCol:nHeadStrAlign := AL_LEFT *------------------------------------------------------------------------- oCol := oDB_OSERVICO_ITENS:AddCol() oCol:bStrData := { || (os_itens->SERVICO) } oCol:cHeader := 'Servico' oCol:cFooter := " " oCol:nDataStrAlign := AL_LEFT oCol:nHeadStrAlign := AL_LEFT *------------------------------------------------------------------------- oCol := oDB_OSERVICO_ITENS:AddCol() oCol:bStrData := { || STR(os_itens->CODIGO_USUARIO,06,0) } oCol:cHeader := 'Usuario' oCol:cFooter := " " oCol:nDataStrAlign := AL_LEFT oCol:nHeadStrAlign := AL_LEFT *------------------------------------------------------------------------- oDB_OSERVICO_ITENS :CreateFromResource(4046) oDB_OSERVICO_ITENS :aCols[07]:bClrStd := {|| {CLR_PRETO,CLR_LYELLOW} } oDB_OSERVICO_ITENS :aCols[07]:cFooter := TRANSFORM(G_TOTAL_PEDIDO,"@ZE 9999,999.99") oDB_OSERVICO_ITENS :aCols[07]:nFootStrAlign := AL_RIGHT Quote Link to comment Share on other sites More sharing options...
Eric.Developer Posted April 22, 2023 Report Share Posted April 22, 2023 Esta correto acontecer esta bagunça, ao liberar a troca de colunas, etc..., deve-se prever no código... Para cada dúvida, crie um novo tópico, é outro tipo de bagunça. Depois me envie o link para ajudar. Sobre este tópico, usem arquivos INI (é muito fácil) e não arquivos MEM, além do risco de efeitos colaterais. Contatos profissionais: Site | Facebook | YouTube Super Kit Harbour/Xailer, DBF, SQL Em 13/04/2023 at 11:54, marcioe disse: Se tenho uma Footer com total, ao mover não fica na posição correta, Vejam a imagem Normal, o total está na certinho no rodapé Modificada, as posiçoes ficam "Zoneadas" Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.