Jump to content
Fivewin Brasil

AnaCatacombs

Membros
  • Posts

    252
  • Joined

  • Last visited

  • Days Won

    11

Everything posted by AnaCatacombs

  1. Olá. Bom dia. Vamos as respostas: 1) Editar uma célula de valor (abatido), -oBrowse:aCols[ColunaQueVocêQuerEditar]:nEditType :=EDIT_GET. O EDIT_GET está no xBrowse.ch. Será necessário fazer a chamada dessa include no fonte, ou substituir o EDIT_GET por 1. 2) gostaria de ter uma Opção de trocar uma Condição de Pagamento Exemplo, era "01-Parcelado Loja 03X", mas ágora houve renegociação, e passarar Pará "03- Parcelado 06x", OU SEJA abrir o celular na navegação Onde o usuario Faria Troca um. - Você pode fazer um botão, ou um get com a condição de pagamento, e quando passasse pelo VALID, ele iria refazer o browse e recalcular as parcelas. Ficaria algo parecido com o código abaixo, considerando que seu xBrowse tem 2 colunas: Uma pra vencimento e outra pra valor. É um código bem simples, mas acredito que você consiga adaptar para seu sistema. aArrayBrowse :={} SELECT Condicao SET ORDER TO 1 SEEK CodigoCondicao IF FOUND() FOR nParc := 1 TO (TotalDeParcelas) AADD(aArrayBrowse,{Vencimento,Valor}) NEXT ENDIF IF LEN(aArrayBrowse) > 0 oBrowse:aArrayData := aArrayBrowse OBrowse:Refresh() ENDIF 3) Ao Navegar O Campo VR.RECEBIDO fosse Atualizado com OS Dados da Coluna (VR DA PARCELA) Você pode usar a mesma função que a de cima, passando por parametro a condição de pagamento e o valor da parcela, refazendo o xBrowse a cada alteração de condição ou de valor. []'s Ana
  2. Eu apoio e com certeza ajudarei a divulgar, mas infelizmente não acredito que conseguirei ir esse ano. Estarei no 7º mês de gestação e não poderei viajar de avião. Fica pra próxima
  3. kkkkkkkk imagine Oscar, ainda tenho muito que aprender. Vamos lá: 1º - Alterar a definição do comando @GET ou Redefine GET que está no fivewin.ch. Não aconselho alterar o FIVEWIN.CH, em caso de atualização da versão, teria que mesclar as duas includes, o que não seria interessante. O ideal é criar uma include sua e colocar essas particularidades. No final da definição do comando, deverá ser adicionada a linha abaixo, que ficaria +- assim: REDEFINE GET [ <oGet> VAR ] <uVar> ; [ ID <nId> ] ; [ <dlg: OF, WINDOW, DIALOG> <oDlg> ] ; [ <help:HELPID, HELP ID> <nHelpId> ] ; [ VALID <ValidFunc> ] ; [ <pict: PICT, PICTURE> <cPict> ] ; [ <color:COLOR,COLORS> <nClrFore> [,<nClrBack>] ] ; [ FONT <oFont> ] ; [ CURSOR <oCursor> ] ; [ MESSAGE <cMsg> ] ; [ <update: UPDATE> ] ; [ WHEN <uWhen> ] ; [ PICTURE <cPict>]; [ ON CHANGE <uChange> ] ; [ <readonly: READONLY, NO MODIFY> ] ; [ <lCalcula: CALCULADORA>] ; // adicionar esse cara tb [ <spin: SPINNER> [ON UP <SpnUp>] [ON DOWN <SpnDn>] [MIN <Min>] [MAX <Max>] ] ; [ <oGet> := ] tGet():ReDefine( <os parametros que ja existem>) ;; DefineCalc(<oGet>,<.lCalcula.>) // esse cara que tem que adicionar 2º Criar a função DefineCalc. ************************************** FUNCTION DefineCalc(oGet,lCalcula) ************************************* lCalcula DEFAULT .T. oGet:bKeyDown := IIF(lCalcula,{|nKey| tCalc():Init(oGet,nKey)},) RETURN(.T.) 3º Linkar a classe no seu projeto #include "fivewin.ch" CLASS TCalc DATA nResult //Resultado de las operaciones en curso. DATA aRolloCalc //Operaciones realizadas desde la última vez que se borró todo. DATA cUltima, cUltimaop DATA cPatronSalida // cPatronSalida -> Formato en que se pinta el resultado. METHOD New() CONSTRUCTOR METHOD Init() METHOD End() METHOD nCalculadigual(nGet) METHOD calculadora(oPadre,cPatronSalida,lBorraAlInicio) // lBorraAlInicio -> Al llamar al método si está en .t. borra lo que hubiera. // Si está en .f. ó NIL conserva las operaciones anteriores. METHOD TCalc_Teclas(nKey, oDlg) METHOD Init(oGet,nKey) ENDCLASS //----------------------------------------------------------------------------// METHOD New() CLASS TCalc ::aRolloCalc:={{'C',' '}} ::nResult :=0 ::cUltima :='' ::cUltimaop :='' return SELF METHOD Init(oGet,nKey) CLASS tCalc LOCAL oCalc IF nKey <> VK_F3 RETURN(1) ENDIF oCalc:=tCalc():new() oCalc:calculadora( oGet:oWnd, '@E 9,999,999.9999 ',,oGet ) RETURN(0) //----------------------------------------------------------------------------// METHOD End() CLASS TCalc ::aRolloCalc:={{'C',' '}} ::nResult :=0 ::cUltima :='' ::cUltimaop :='' return NIL //----------------------------------------------------------------------------// METHOD calculadora(oPadre,cPatronSalida,lBorraAlInicio,oTGet) CLASS TCalc local oDlg local oBtnSalir local oBtnmenos, oBtnmas, oBtnpor, oBtndividir, oBtnigual, oBtnBorra local oBtn0, oBtn1, oBtn2, oBtn3, oBtn4, oBtn5, oBtn6, oBtn7, oBtn8, oBtn9, oBtnP, oBtnSigno local oBtnConv, oBtnConv2 local oBtnDel local oSay local oBrw, n:=1 local oGet :=0 ,cGet:='', nGetAnt:=0,nGet:=0 local oFont1 local oFontLst ::nResult := IIF(VALTYPE(oTGet) == "O" .AND. "GET" $oTGet:ClassName .AND.; VAL(oTGet:GetText()) > 0,VAL(oTGet:GetText()),; IIF(VALTYPE(oTGet) == "N",oTGet,0)) if cPatronSalida=NIL .and. ::cPatronSalida=NIL cPatronSalida:='@E 9,999,999,999.99 ' //Formato en que se pinta el resultado. endif //default cPatronSalida:='@E 9,999,999,999.99 ' //Formato en que se pinta el resultado. default lBorraAlInicio :=.f. // Al llamar al método si está en .t. borra lo que hubiera. // Si está en .f. entonces conserva las operaciones anteriores. ::cPatronSalida:=cPatronSalida DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 0,-14 BOLD DEFINE FONT oFont1 NAME "Arial" SIZE 0,-20 DEFINE FONT oFontLst NAME "MS Sans Serif" SIZE 0,-14 DEFINE DIALOG oDlg RESOURCE 'Calculadora' OF oPadre TITLE 'CALCULADORA' FONT oFont REDEFINE BUTTON oBtnSalir ID 500 OF oDlg MESSAGE 'SALIR'; ACTION oDlg:end() default CANCEL UPDATE oBtnSalir:cargo:='S' REDEFINE BUTTON oBtnmenos ID 401 OF oDlg MESSAGE 'Resta'; ACTION (iif(nGet<>0,(nGetAnt:=nGet,aadd(::aRolloCalc,{transform(nGet,::cPatronSalida),'-'})),(::nResult:=::nResult-nGetAnt,aadd(::aRolloCalc,{transform(iif(::cUltimaOp='=',::nResult,nGetAnt),::cPatronSalida),'-'}))) ,; oBrw:gobottom(),; oBrw:refresh(),; iif(::nResult=0,::nResult:=nGet,::nResult:=::nResult-nGet),; ::cUltimaOp:='-' ,; oSay:SetText(transform(::nResult,::cPatronSalida)),; nGet:=0 ,; cGet:='' ,; oGet:SetText('') ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtnmenos:cargo:='-' REDEFINE BUTTON oBtnmas ID 402 OF oDlg MESSAGE 'Suma'; ACTION (iif(nGet<>0,(nGetAnt:=nGet,aadd(::aRolloCalc,{transform(nGet,::cPatronSalida),'+'})),(::nResult:=::nResult+nGetAnt,aadd(::aRolloCalc,{transform(iif(::cUltimaOp='=',::nResult,nGetAnt),::cPatronSalida),'+'}))) ,; oBrw:gobottom(),; oBrw:refresh(),; iif(::nResult=0,::nResult:=nGet,::nResult:=::nResult+nGet),; ::cUltimaOp:='+' ,; oSay:SetText(transform(::nResult,::cPatronSalida)),; nGet:=0 ,; cGet:='' ,; oGet:SetText('') ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtnmas:cargo:='+' REDEFINE BUTTON oBtnpor ID 403 OF oDlg MESSAGE 'Multiplica'; ACTION (aadd( ::aRolloCalc, iif(nGet=0 .and. ::nResult<>0,{transform(::nResult,::cPatronSalida),'x'},{transform(nGet,::cPatronSalida),'x'}) ),; oBrw:gobottom(),; oBrw:refresh(),; iif(::nResult=0,::nResult:=nGet,iif(nGet<>0,::nResult:=::nResult*nGet,)),; ::cUltimaOp:='*' ,; oSay:SetText(transform(::nResult,::cPatronSalida)),; nGet:=0 ,; cGet:='' ,; oGet:SetText('') ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtnpor:cargo:='*' REDEFINE BUTTON oBtndividir ID 404 OF oDlg MESSAGE 'Divide'; ACTION (aadd( ::aRolloCalc, iif(nGet=0 .and. ::nResult<>0,{transform(::nResult,::cPatronSalida),'/'},{transform(nGet,::cPatronSalida),'/'}) ),; oBrw:gobottom(),; oBrw:refresh(),; iif(::nResult=0,::nResult:=nGet,iif(nGet<>0,::nResult:=::nResult/nGet,)),; ::cUltimaOp:='/' ,; oSay:SetText(transform(::nResult,::cPatronSalida)),; nGet:=0 ,; cGet:='' ,; oGet:SetText('') ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtndividir:cargo:='/' REDEFINE BUTTON oBtnigual ID 405 OF oDlg MESSAGE 'Calcula resultado'; ACTION (iif(nGet=0,,aadd( ::aRolloCalc, {transform(nGet,::cPatronSalida),iif(::cUltimaOp='+' .or. ::cUltimaOp='-' .or. ::cUltimaOp='*' .or. ::cUltimaOp='/',' ',::cUltimaOp)} )),; ::nCalculadIgual(nGet),; aadd( ::aRolloCalc, {transform(::nResult,::cPatronSalida),'='} ),; oBrw:gobottom(),oBrw:gobottom(),; oBrw:refresh(),; ::cUltimaOp:='=' ,; oSay:SetText(transform(::nResult,::cPatronSalida)),; nGet:=0 ,; nGetAnt:=0 ,; cGet:='' ,; oGet:SetText('') ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtnigual:cargo:='=' REDEFINE BUTTON oBtnBorra ID 425 OF oDlg MESSAGE 'Borra todos los cálculos'; ACTION (iif( len( ::aRolloCalc ) > 0,; ( aSize( ::aRolloCalc, 0 ), oBrw:Refresh() ), ),; aadd( ::aRolloCalc, {' ','C'} ),; oBrw:gotop() ,; oBrw:refresh() ,; ::nResult:=0 ,; ::cUltimaOp:='R' ,; oSay:SetText('0') ,; nGet:=0 ,; cGet:='' ,; oGet:SetText('') ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtnBorra:cargo:='R' REDEFINE BUTTON oBtnDel ID 426 OF oDlg MESSAGE 'Borra último dígito'; ACTION (::cUltima:='CE' ,; iif(::cUltimaOp='=' .or. ::cUltimaOp='AP' .or. ::cUltimaOp='AE',(::cUltimaOp:='',::nResult:=0,aadd( ::aRolloCalc, {' ',' '} ), oBrw:gobottom(),oBrw:refresh()),),; iif(nGet<>0,( ,; cGet:=LEFT(cGet,len(cget)-1),; nGet:=val(cGet)),) ,; oGet:SetText(cGet) ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtnDel:cargo:=chr(8) REDEFINE BUTTON oBtnConv ID 407 OF oDlg MESSAGE 'Convierte de euros a PTS'; ACTION ( iif(nGet<>0,::nResult:=round(nGet*166.386,0),::nResult:=round(::nResult*166.386,0)),; aadd( ::aRolloCalc, {transform(::nResult,'@E 9,999,999,999 '),'pts'} ),; oBrw:gobottom(),; oBrw:refresh(),; ::cUltimaOp:='AP' ,; // AP = a Pesetas oSay:SetText(transform(::nResult,'@E 9,999,999,999 pts')),; nGet:=0 ,; cGet:='' ,; oGet:SetText('') ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtnConv:cargo:='E' REDEFINE BUTTON oBtnConv2 ID 408 OF oDlg MESSAGE 'Convierte de PTS a Euro'; ACTION ( iif(nGet<>0,::nResult:=round(nGet/166.386,2),::nResult:=round(::nResult/166.386,2)),; aadd( ::aRolloCalc, {transform(::nResult,'@E 9,999,999,999.99 '),' €'} ),; oBrw:gobottom(),; oBrw:refresh(),; ::cUltimaOp:='AE' ,; // AE = a Euros oSay:SetText(transform(::nResult,'@E 9,999,999,999.99 €')),; nGet:=0 ,; cGet:='' ,; oGet:SetText('') ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtnConv:cargo:='P' REDEFINE BUTTON oBtn0 ID 100 OF oDlg ; ACTION (::cUltima:='0' ,; iif(::cUltimaOp='=' .or. ::cUltimaOp='AP' .or. ::cUltimaOp='AE',(::cUltimaOp:='',::nResult:=0,aadd( ::aRolloCalc, {' ',' '} ), oBrw:gobottom(),oBrw:refresh()),),; iif(nGet<>0 .or. at(".",cGet)>0,( ,; cGet:=cGet+::cUltima ,; nGet:=val(cGet)),) ,; oGet:SetText(cGet) ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtn0:cargo:='0' REDEFINE BUTTON oBtn1 ID 101 OF oDlg; ACTION (::cUltima:='1' ,; iif(::cUltimaOp='=' .or. ::cUltimaOp='AP' .or. ::cUltimaOp='AE',(::cUltimaOp:='',::nResult:=0,aadd( ::aRolloCalc, {' ',' '} ), oBrw:gobottom(),oBrw:refresh()),),; cGet:=cGet+::cUltima ,; nGet:=val(cGet) ,; oGet:SetText(cGet) ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtn1:cargo:='1' REDEFINE BUTTON oBtn2 ID 102 OF oDlg; ACTION (::cUltima:='2' ,; iif(::cUltimaOp='=' .or. ::cUltimaOp='AP' .or. ::cUltimaOp='AE',(::cUltimaOp:='',::nResult:=0,aadd( ::aRolloCalc, {' ',' '} ), oBrw:gobottom(),oBrw:refresh()),),; cGet:=cGet+::cUltima ,; nGet:=val(cGet) ,; oGet:SetText(cGet) ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtn2:cargo:='2' REDEFINE BUTTON oBtn3 ID 103 OF oDlg; ACTION (::cUltima:='3' ,; iif(::cUltimaOp='=' .or. ::cUltimaOp='AP' .or. ::cUltimaOp='AE',(::cUltimaOp:='',::nResult:=0,aadd( ::aRolloCalc, {' ',' '} ), oBrw:gobottom(),oBrw:refresh()),),; cGet:=cGet+::cUltima ,; nGet:=val(cGet) ,; oGet:SetText(cGet) ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtn3:cargo:='3' REDEFINE BUTTON oBtn4 ID 104 OF oDlg; ACTION (::cUltima:='4' ,; iif(::cUltimaOp='=' .or. ::cUltimaOp='AP' .or. ::cUltimaOp='AE',(::cUltimaOp:='',::nResult:=0,aadd( ::aRolloCalc, {' ',' '} ), oBrw:gobottom(),oBrw:refresh()),),; cGet:=cGet+::cUltima ,; nGet:=val(cGet) ,; oGet:SetText(cGet) ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtn4:cargo:='4' REDEFINE BUTTON oBtn5 ID 105 OF oDlg; ACTION (::cUltima:='5' ,; iif(::cUltimaOp='=' .or. ::cUltimaOp='AP' .or. ::cUltimaOp='AE',(::cUltimaOp:='',::nResult:=0,aadd( ::aRolloCalc, {' ',' '} ), oBrw:gobottom(),oBrw:refresh()),),; cGet:=cGet+::cUltima ,; nGet:=val(cGet) ,; oGet:SetText(cGet) ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtn5:cargo:='5' REDEFINE BUTTON oBtn6 ID 106 OF oDlg; ACTION (::cUltima:='6' ,; iif(::cUltimaOp='=' .or. ::cUltimaOp='AP' .or. ::cUltimaOp='AE',(::cUltimaOp:='',::nResult:=0,aadd( ::aRolloCalc, {' ',' '} ), oBrw:gobottom(),oBrw:refresh()),),; cGet:=cGet+::cUltima ,; nGet:=val(cGet) ,; oGet:SetText(cGet) ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtn6:cargo:='6' REDEFINE BUTTON oBtn7 ID 107 OF oDlg; ACTION (::cUltima:='7' ,; iif(::cUltimaOp='=' .or. ::cUltimaOp='AP' .or. ::cUltimaOp='AE',(::cUltimaOp:='',::nResult:=0,aadd( ::aRolloCalc, {' ',' '} ), oBrw:gobottom(),oBrw:refresh()),),; cGet:=cGet+::cUltima ,; nGet:=val(cGet) ,; oGet:SetText(cGet) ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtn7:cargo:='7' REDEFINE BUTTON oBtn8 ID 108 OF oDlg; ACTION (::cUltima:='8' ,; iif(::cUltimaOp='=' .or. ::cUltimaOp='AP' .or. ::cUltimaOp='AE',(::cUltimaOp:='',::nResult:=0,aadd( ::aRolloCalc, {' ',' '} ), oBrw:gobottom(),oBrw:refresh()),),; cGet:=cGet+::cUltima ,; nGet:=val(cGet) ,; oGet:SetText(cGet) ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtn8:cargo:='8' REDEFINE BUTTON oBtn9 ID 109 OF oDlg; ACTION (::cUltima:='9' ,; iif(::cUltimaOp='=' .or. ::cUltimaOp='AP' .or. ::cUltimaOp='AE',(::cUltimaOp:='',::nResult:=0,aadd( ::aRolloCalc, {' ',' '} ), oBrw:gobottom(),oBrw:refresh()),),; cGet:=cGet+::cUltima ,; nGet:=val(cGet) ,; oGet:SetText(cGet) ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtn9:cargo:='9' REDEFINE BUTTON oBtnP ID 110 OF oDlg; ACTION (::cUltima:='.' ,; iif(::cUltimaOp='=' .or. ::cUltimaOp='AP' .or. ::cUltimaOp='AE',(::cUltimaOp:='',::nResult:=0,aadd( ::aRolloCalc, {' ',' '} ), oBrw:gobottom(),oBrw:refresh()),),; cGet:=cGet+::cUltima ,; nGet:=val(cGet) ,; oGet:SetText(cGet) ,; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE WHEN int(nGet)==nGet oBtnP:cargo:='.' REDEFINE BUTTON oBtnSigno ID 111 OF oDlg; ACTION (::cUltima:='signo' ,; iif(::cUltimaOp='=' .or. ::cUltimaOp='AP' .or. ::cUltimaOp='AE',(::cUltimaOp:='',::nResult:=0,aadd( ::aRolloCalc, {' ',' '} ), oBrw:gobottom(),oBrw:refresh()),),; nGet:=(-1)*nGet ,; oGet:SetText(nGet) ,; cGet:=alltrim(str(nGet)),; oBtnIgual:Setfocus() ,; sysrefresh() ) UPDATE oBtnSigno:cargo:=' ' REDEFINE SAY oGet VAR nGet ID 211 OF oDlg FONT oFont1 ; COLOR nrgb( 0, 0, 0),nrgb(255,255,200) UPDATE REDEFINE SAY oSay VAR ::nResult ID 200 OF oDlg FONT oFont1 ; COLOR nrgb(50,250,50),nrgb(0,0,0) UPDATE REDEFINE LISTBOX oBrw FIELDS ; ::aRolloCalc[n][1],; ::aRolloCalc[n][2]; HEAD 'valor',' '; ID 212 OF oDlg FONT oFontLst COLOR nrgb(0,0,0),nrgb(255,255,200) ;//clrLtrBrow,clrFonBrow ; UPDATE oBrw:aJustify :={.t.,.f.} oBrw:aColSizes :={GetFontInfo(oFontLst)[2] * 1.25 * 17, GetFontInfo(oFontLst)[2] * 1.25 * 3} //aMatrizTc({17,3},oFontLst) oBrw:bGotop := { || n := 1 } oBrw:bGoBottom := { || n := eval( oBrw:bLogicLen ) } oBrw:bSkip := { | nwant, nold | nold := n , n += nwant,; n := max( 1, min( n, eval( oBrw:bLogicLen ))),; n - nOld } oBrw:bLogicLen := { || len( ::aRolloCalc ) } oBrw:nClrPane:={|| iif(::aRolloCalc[n][2]=='=',nrgb(200,255,125),nrgb(255,255,200)) } oDlg:bKeyDown:={|nKey| ::TCalc_Teclas(nKey,oDlg,oTget)} ACTIVATE DIALOG oDlg CENTERED ON INIT (if(lBorraAlInicio,oBtnBorra:CLICK(),.f.),oBrw:gobottom(),oBrw:refresh()) oFont1:end() oFontLst:end() return ::nResult METHOD nCalculadigual(nGet) CLASS TCalc do CASE CASE ::cUltimaOp = '-' ::nResult := ::nResult - nGet CASE ::cUltimaOp = '+' ::nResult := ::nResult + nGet CASE ::cUltimaOp = '*' ::nResult := ::nResult * nGet CASE ::cUltimaOp = '/' ::nResult := ::nResult / nGet endcase return NIL METHOD TCalc_Teclas(nKey, oDlg,oTGet) class TCalc local ny for ny:=1 TO len(oDlg:aControls) if oDlg:aControls[ny]:cargo==upper(chr(nKey)) oDlg:aControls[ny]:CLICK() endif next ny IF nKey == 84 .AND. VALTYPE(oTGet) == "O" oDlg:End() oTGet:VarPut(::nResult) oTGet:REFRESH() ENDIF return nil 4º Utilizar no seu sistema da seguinte forma: REDEFINE GET oCodigo VAR nCodigo PICTURE "99999" ID 4001 OF oDlgBanco Calculadora Não testei em gets do tipo caractere, data e etc, fiz um teste básico e funcionou. Quando pressiona F3 em um GET numérico ele abre a calculadora com o valor do GET, e quando pressiona a tecla T , ele transporta o valor para o get e fecha a calculadora.
  4. Realmente muito interessante. Daria pra implementar no GET para transportar o valor para o get ativo se for do tipo numerico. Assim que tiver um tempo, vou implementar e postar.
  5. João, faltou o resource da calculadora. Ao pressionar F12 dá erro ao criar a dialog.
  6. Eu implementei na classe Get, se alguem tiver interesse é só pedir.
  7. Kapi, parece que você não passou o parametro oCurGet para o ShowCalculator.
  8. AnaCatacombs

    NFC-e

    Sim Daniel, é Mato Grosso do Sul. Credo Gilmer, que egoísmo, faz uma LIB e coloca a venda. Como diria Dorsal Atlântica: Dividir e conquistar.
  9. Oscar, é tão fácil de resolver que acaba nem compensando pedir para o Linares desenvolver. No meu caso, o UPPER no SET é essencial.Minha array do combobox é capitalizada , e no banco de dados é maiúscula. Essa alteração estragaria meu sistema todo, e esse é o maior problema que eu vejo com as atualizações do fivewin hoje. Falta de compatibilidade com as versões anteriores. Quando migrei a versão do fivewin tive muito trabalho revisando e reescrevendo código por falta de compatibilidade, mas é interessante para outros desenvolvedores não terem o mesmo problema e ficar nativo, mas caso queira, é só pegar abaixo: #include "FiveWin.ch" #include "Constant.ch" //----------------------------------------------------------------------------// CLASS cComboBox FROM TCombobox METHOD Set( cNewItem ) ENDCLASS METHOD Set( cNewItem ) CLASS cComboBox local nAt if ValType( cNewItem ) == "N" nAt = cNewItem if nAt == 0 nAt = 1 endif else nAt = AScan( ::aItems,; { | cItem | AllTrim( cItem ) == ; AllTrim( cNewItem ) } ) endif if ValType( cNewItem ) == "N" .or. nAt != 0 .and. ::oGet == nil ::Select( nAt ) else cNewItem = cValToChar( cNewItem ) endif Eval( ::bSetGet, cNewItem ) SetWindowText( ::hWnd , cNewItem ) return nil Aí é só criar uma include sua, colocando a redefinição do comando setando para o cCombobox():New() ou cCombobox:Redefine() e incluir nos seus fontes. Não aconselho mudar o fivewin.ch, pois em caso tenha uma atualização da versão teria que mesclar o .CH. O único problema é se o Linares fizer uma melhoria no código desse método no fivewin novo, você perderia a atualização.
  10. Eu implementei o cobrebemx e estou muito satisfeita com o resultado. Conseguimos imprimir, enviar os boletos por e-mail, efetuar a leitura dos retornos, baixar as parcelas e tarifas bancárias. É bem completo e fácil de usar, só tem que se atentar no tratamento de erros... qualquer configuração incorreta dá erro em tempo de execução. Se precisar de exemplos ou de ajuda é só dar um toque. Segue o link do cobrebem: http://www.cobrebem.com/cobrebemx.html
  11. kkkkkkkkkkkkkkkkkkkkkkk Não Ale, não é ele a coisinha linda, é a alteração. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Falando nisso, eu fiz uma correção na classe (metodo FillList), quando utiliza o redefine, que está sujando a tela, segue abaixo: //--------------------------------------------------------------- METHOD FillList() CLASS TListGet //--------------------------------------------------------------- LOCAL i := 1, aRect IF ::bBeforeFill != NIL EVAL( ::bBeforeFill, ::aData[1] ) ENDIF ASIZE( ::aData, 1 ) DO CASE CASE ::cSource = 'ARRAY' DO WHILE LEN( ::aData ) < ::lenDisplay .AND. i <= LEN( ::aSource ) IF EVAL( ::bSearch, ALLTRIM(::aData[1]), ::aSource[i] ) AADD( ::aData, ::aSource[i] ) ENDIF i++ ENDDO CASE ::cSource = 'DBF' DO WHILE LEN( ::aData ) < ::lenDisplay .AND. ! (::cAlias)-> ( EOF() ) IF EVAL( ::bSearch, ALLTRIM(::aData[1]), (::cAlias)-> ( fieldGet( fieldPos( ::cField ) ) ) ) AADD( ::aData, (::cAlias)-> ( fieldGet( fieldPos( ::cField ) ) ) ) ENDIF (::cAlias) -> ( DBSKIP() ) ENDDO ENDCASE ::oWin:hide() ::oWin:SetSize( ::nWidth, ( LEN( ::aData ) ) * GetTextHeight( ::hWnd ) + LEN( ::aData ) ) aRect := getWndRect( ::hWnd ) ::oWin:move( aRect[1] + ::nHeight + 3, aRect[2] ) ::oBrw:refresh() ::oWin:show() RETURN NIL []'s Ana
  12. Kapi, coisinha linda ! Rapaz, que legal, era isso mesmo que eu estava procurando.
  13. Eu também gostaria dessa classe. Assim que responder, não esqueça de postar aqui no forum
  14. Meu caro, isso ocorre pq no método SET do combobox tem um UPPER para fazer a busca do novo item, e os itens do combobox. Uma maneira prática de resolver sem precisar alterar o tipo da sua variavel wCF, é ao setar um item no combobox ou entrar na tela, fazer manual utilizando o método SET passando o indice do item do combobox. Apenas verifique se o combobox não está com autosort para não setar o indice incorreto. At. Ana
  15. Valdir, permita-me discordar contigo de forma amistosa Eu não me deslocaria mais de 1000 km pra me confraternizar. Tenho uma equipe nova aprendendo a programar em xHarbour+Fivewin e valeria muito a pena leva-los independente dos temas das palestras. Não farei a inscrição do restante da equipe até ter a data fechada, não quero causar uma falsa expectativa nos meninos e nos organizadores do evento. Tenho certeza que os temas abordados nas palestras serão de grande valia, visto que são os próprios participantes que definem os temas. Por mais que tenhamos uma boa base a décadas de experiência, sempre conseguiremos extrair algo de proveitoso de qualquer palestra, tiro por base no ano passado, que participei do Agile Tour mesmo não programando em Java, adaptei o Scrum para a nossa realidade e conseguimos utiliza-lo com sucesso aqui na empresa. Digo isso por mim, mas infelizmente não posso assegurar a mesma opinião dos demais membros. []'s Ana
  16. 01 - Herberson Carlos Gontijo (Hergon) - Beloarrow-10x10.png Horizonte / MG - (01 chalé - 2 pessoas) 02 - Claudia M. R. Glória Gontijo (Cacau7) - Beloarrow-10x10.png Horizonte / MG (Acompanhante) 03 - Ana Possani (AnaCatacombs) - Cianorte / PR (01 Chalé - 1 Pessoa) 04 - João ** preencher o nome completo ** (Joaosolution) - Contagem / MG (01 chalé - 2 pessoas) 05 - ** Favor preencher o nome** acompanhante João (Acompanhante) 06 - Nárlem - Beloarrow-10x10.png Horizonte / MG - ( 01 chalé - 1 pessoa ) 07 - Vander Lúcio Nunes (VLNunes) - João Monlevade / MG 08 - Gilmer - Sorocaba / SP 09 - Evandro G. de Paula - Curvelo / MG - ( 01 chalé - 1 pessoa ) 10 - Cleber Ribeiro Conde - Caratinga / MG 11 - Vailton Renato - Sorocaba / SP 12 - José Manoel da Silva - São Paulo / SP 13 - Rodrigo Portugual - São Paulo / SP 14 - Roberto Júnior - São Paulo / SP 15 - Wesley Rodrigues - São Paulo / SP 16 - Luiz Roberto SERVULO Diadema/SP 17 - Leonardo Guimarães(LHSISTEMAS) Vitória-ES 18 - Helder Angelo Fiorotti(LHSISTEMAS) Vitória-ES 19 - Marcio Eduardo Teixeira - Visconde do Rio Branco - MG 20 - Rubens Martins (RUBENSMA) - São Paulo - SP - (01 chalé - 2 pessoas) 21 - Maria A. F. O. Martins - São Paulo - SP (Acompanhante)
  17. Pra quem for de fora, podemos ver os horários de chegada e dividir a corrida.
  18. Herberson, parabéns ! Muito bom! Eu tenho interesse.
  19. Eu apoio e participarei, mas apenas com a participação do Gilmer.
  20. Conforme de passei pelo Skype, utilizo esse codigo depois que eu fecho as janelas em fivewin e gt. hb_gcAll() MemoryFlush() FUNCTION MemoryFlush SetProcess( -1, -1, -1) RETURN NIL DLL32 Function SetProcess( ; hWnd As LONG, nMinWorkingSpace As LONG, nMaxWorkingSpace As LONG ) ; As LONG PASCAL From "SetProcessWorkingSetSize" Lib "Kernel32.dll" Se é aconselhável, a melhor solução, se resolve definitivamente, se o código é lindo maravilhoso eu não sei, só seu que resolveu meus problemas com falta de memória, pois no final, o cliente não quer nem saber a cor da zebra, ele quer o resto da tinta, e com certeza eu não poderia apenas dizer que o problema é no componente ou na forma que trabalhamos. É claro que futuramente quando abandonar a GT vou fazer um refactor no sistema todo.
  21. Sempre tivemos muitos problemas de memoria no sistema: Quanto mais utiliza, mais lento fica, até um ponto que fica insuportável, independente da configuração. Trabalhamos aqui com um I5, 3.1 8GB e ainda dava falta de memória antes do almoço. Não se te dizer uma configuração mínima para utilização, depende muito do sistema e das operações que o usuário realiza, mas se a configuração mínima for superior ao I5, tamo tudo lascado. Como eu tenho um sistema Frank, não sei te dizer se o alto consumo memória é uma particularidade do fivewin, da gtwvw, dois dois, ou pelo sistema legado com vários códigos que não me orgulho de dar manutenção, mas acredito que seja tudo isso junto. Utilizei uma função postada no forum (não lembro em qual) que resolveu de uma forma paliativa o problema, se você ou alguém mais tiver interesse, é só dar um toque.
  22. Vc está utilizando array ou DBF? Fiz o teste o array e não funcionou.
  23. Erciley, muito boa solução, só precisaria ver como ficaria na hora de adicionar o item, pois o item ainda não estaria na grid. Teria que ser adicionado o item, e depois alterar a primeira coluna para o valor de nArrayAt, e o fato de adicionar o item no final da grid, não quer dizer que o nArrayAt vá automaticamente para o final.
  24. Tião, eu já corrigi Obrigada pela atenção
×
×
  • Create New...