-
Posts
105 -
Joined
-
Last visited
About reneumg
- Birthday 07/31/1967
Profile Information
-
Gender
Not Telling
reneumg's Achievements
Newbie (1/14)
0
Reputation
-
Vou Dar meu pitaco, se é que entendi o Post. Se fazer assim: Exemplo: Select("CLIENTE") index on Upper(NOME) tag NOMECLI to ("C:\TABELA") vBusca:="ANTONIO C" CLIENTE->(DbSeek(vBusca,.t.)) Ou SET SOFTSEEK ON CLIENTE->(DbSeek(vBusca)) SET SOFTSEEK OFF Fim
-
Valeu Galera, Tai uma coisa simples que eu não sabia como fazer, procurei em todos os exemplos e não achei. Rochinha, como é que não pensei nisso antes, usava este :nAt pra saber o registro que estava mas não sabia como posicionar nele, apanhei pra kct rsrsrsrs. Valeu mesmo, Obrigado.
-
Eroni, obrigado por responder mas não achei ai a minha resposta. Não sei se vc entendeu, por exemplo quando eu jogo um DBF no listbox e uso a função DBF->(DBGoTo(Reg)) e dou um :Refresh() em seguida fica lá o registro que eu quero e os que estão proximo, quero fazer isso em uma array será que isso é possivel?
-
Boa tarde galera. Estou tentando posicionar o ponteiro em uma array em um listbox e não consigo, Deixa eu me explicar: Tenho um Listbox assim; REDEFINE LISTBOX oLbx ; FIELDS aItens[ oLbx:nAt, 1 ],; aItens[ oLbx:nAt, 2 ],; aItens[ oLbx:nAt, 3 ],; AllTrim(aItens[ oLbx:nAt, 4 ])+" - "+aItens[ oLbx:nAt, 5 ] ; ID 200 OF oDlg ; TITLE "CNPJ ou CPF", "Nome do Cliente", "Endereço", "Cidade" ; FIELDSIZES 120, 300, 280, 200 ; ON LEFT DBLCLICK (oReg:=oLbx:nAt, ICliente(oCursor, oCNPJCli, aItens, .f.), oLbx:SetArray( aItens ), oLbx:Refresh(),; oCNPJCli:=aItens[ oReg, 1 ] ) ; ON CHANGE ( oCNPJCli:=aItens[ oLbx:nAt, 1 ]) ; COLOR CLR_BLUE Quando eu Altero ou Incluo um cliente ou faço uma busca do cliente pelo cnpj não sei como posiciar o ponteiro no listbox. Ex: Tenho 1000 registo ai e tenho que ir no registro 500 como faço isso. Assim eu acho o Registro oReg:=AScan( aItens, { | a | oCNPJCli== a[ 1 ] } ) Mas como usar as funcões oLbx:SetArray( aItens ), oLbx:Refresh() Desde ja agradeço quem puder me ajudar
-
Herberson, Vê se não ta faltando nada ai, no meu sistema assim ta funcionando, essa Dll é meio embaçada. já sofri muito com ela, As vezes são essas propriedades InicioNossoNumero , FimNossoNumero , ProximoNossoNumero ou ArquivoRemessa:Sequencia, eu nunca vi esse erro ai não. Abs. ********************************************************************************************************************* oCBX:= TOleAuto():New("CobreBemX.ContaCorrente") // Monta arquivo de licença de teste para banco 001 carteira 51 oCBX:ArquivoLicenca := "c:\CobreBemX\licenca\09999999000199-001-51.conf" If !File("c:\CobreBemX\licenca\09999999000199-001-51.conf") nMsgBox( "c:\CobreBemX\licenca\09999999000199-001-51.conf", "Arquivo de Licenca Não Localizado") RETURN( .t. ) EndIf // Monta dados da Agencia oCBX:CodigoAgencia := "9999" // Monta dados do Cod. Cedente oCBX:CodigoCedente := "99999999" // Monta dados da Sequencia do Arq. de Remessa oCBX:ArquivoRemessa:Sequencia:= "0001" // Monta dados do Sequencia Inicio nosso Número If oNossoNo= oCBX:InicioNossoNumero := "0001" EndIf // Monta dados da Sequencia Proximo nosso Número If oNossoNo= oCBX:ProximoNossoNumero := "0002" EndIf // Monta dados da Sequencia Fim nosso Número If oNossoNo= oCBX:FimNossoNumero := "0099" EndIf oCBX:PadroesBoleto:PadroesBoletoImpresso:ArquivoLogotipo := "c:\CobreBemX\Imagens\"+COD_BAN+".jpg" //BannerCBX.gif" oCBX:PadroesBoleto:PadroesBoletoImpresso:CaminhoImagensCodigoBarras := "c:\CobreBemX\Imagens\" oCBX:PadroesBoleto:InstrucoesCaixa:=MensBOL oCBX:PadroesBoleto:Demonstrativo:="Mensagem do corpo do boleto se vc for impromir" Do While !Eof() // Inicia a Linha da Remessa oBoleto := oCBX:DocumentosCobranca:Add() oMeusDds:= oBoleto:MeusDados:Add() oMeusDds:Nome:="TipoDocumentoTradicional" //"TipoDocumentoTradicional" ou "TipoDocumentoEscritural" oMeusDds:Valor:="Sim" // Monta dados do sacado oBoleto:NomeSacado := X->NOME oBoleto:DataDocumento := Dtoc(X->DT_EMISS) oBoleto:DataVencimento := Dtoc(X->DT_VENC) oBoleto:NumeroDocumento:= X->NUM_DUPL oBoleto:ValorDocumento := X->VALOR oBoleto:BancoEmiteBoleto := .t. // .f. o cliente Imprime se, .t. o Banco Imprime oBoleto:DiasProtesto := "05" oBoleto:InstrucaoCobranca1 := "2" //Codigo para Baixa/Devolução oBoleto:InstrucaoCobranca2 := " " oBoleto:InstrucaoCobranca3 := "2" //1-Baixar/Devolver 2-Nao oBoleto:CalculaDacNossoNumero := iif(oNossoNo=,.t.,.f.) oBoleto:BancoGeraNossoNumero := iif(oNossoNo=[N],.t.,.f.) oBoleto:TipoDocumentoCobranca := X->TIPODOC oBoleto:ValorDesconto := X->VAL_DESC oBoleto:ValorjurosdiaAtraso := X->JRS_DIA If vMulta>0 oBoleto:ValorMultaAtraso := (X->VALOR*vMulta) //Multa EndIf oBoleto:CPFSacado := AllTrim(X->CPF_CNPJ) oBoleto:EnderecoSacado := AllTrim(X->ENDERECO) oBoleto:BairroSacado := AllTrim(X->BAIRRO) oBoleto:CidadeSacado := AllTrim(X->CIDADE) oBoleto:EstadoSacado := X->UF oBoleto:CepSacado := X->CEP If oNossoNo= oCBX:CalcularDadosBoletos() oDbf:NOSSO_NO := oBoleto:NossoNumero EndIf DBSkip() EndDo DBGoTop() //Gera o arquivo de remessa oCBX:ArquivoRemessa:Arquivo := oArqRem //"Ex Remessa.txt" oCBX:ArquivoRemessa:Diretorio:= "C:\Banco\" oCBX:ArquivoRemessa:Layout := CNAB400 // "CNAB400" ou "FEBRABAN240" oCBX:GravaArquivoRemessa() //Improme o Boleto oCBX:ImprimeBoletos() //oCBX:End()
-
oCBX:InicioNossoNumero := 0001 oBoleto := oCBX:DocumentosCobranca:Add() oBoleto:CalculaDacNossoNumero := .t. .... .... If oNossoNo= oCBX:CalcularDadosBoletos() oDBF:NOSSO_NO := oBoleto:NossoNumero EndIf Neste caso ele calcula o nosso numurero, mas vc tem que ou pegar o ultimo nosso numero gereado, ou gerar em outra carteira pra nao gerar duplicidade. Espero que ajude.
-
A Cobrebem se toronu uma fria, quem tem; comece a pensar em outra coisa, pois eles não estão mais fazendo correcões. o primeiro email que pedi correção em uma carteira do ITAU em 17/04, e o Segundo 30/04 e até hoje não me deram respostas. Resumindo quem já entrou, procure outra ferramento, quem não entrou, NÃO ENTRE. 1º Email--> Suporte Técnico Cobre Bem Adicionar aos contatos 17/04/2014 Para: Reneu Mendes Garcia Prezado(a) Reneu Reneu Mendes Garcia, Obrigado por entrar em contato conosco. Foi aberto um chamado junto à nossa equipe de desenvolvimento. Assim que esse estiver concluído, retornaremos o contato através deste e-mail. Por favor, aguarde nosso retorno. Colocamo-nos a sua disposição para esclarecer eventuais dúvidas. Atenciosamente, Marcelo Andrade | Cobre Bem Tecnologia www.cobrebem.com.br RJ: +55 (21) 2288 5990 SP: +55 (11) 5041 2228 Suporte Técnico Cobre Bem Adicionar aos contatos 30/04/2014 Para: Reneu Mendes Garcia ******************************************************************************************* 2º Email----> Prezado(a) Reneu Reneu Mendes Garcia, Obrigado por entrar em contato conosco. Ainda não obtivemos um parecer quanto a prazo para conclusão deste chamado. Esse permanece em desenvolvimento e assim que estiver concluso, retornaremos o contato através deste mesmo histórico. Colocamo-nos a sua disposição para esclarecer eventuais dúvidas. Atenciosamente, Marcelo Andrade | Cobre Bem Tecnologia www.cobrebem.com.br RJ: +55 (21) 2288 5990 SP: +55 (11) 5041 2228
-
Valeu Amigo João, Assim também abriu.. Com a dll acho que vai funcionar melhor. CNN:Open("DRIVER=Firebird/InterBase® driver;"+; "Password=masterkey;"+; "User ID=sysdba;"+; "Database=D:\FireBird\promaspe.fdb;"+; "dbclient_library=fbclient.dll") Abraço
-
Ah Pessoal Assim Abriu Leu e Gravou, Será que é esse o Jeito Certo? public CNN Try CNN:=CreateObject("ADODB.Connection") CNN:Open("driver=Firebird/InterBase® driver;Server=d em Computador;Database="+D:\FireBird\promaspe.fdb+";Uid="+alltrim(upper(m_usuario))+";Pwd="+alltrim(m_senha)+";") Catch e Error Connection CNN QUIT End
-
Olá Pessoal. Alguém sabe como usar o comando para abir um BD Firebird com ADODB ; Achei os comandos abaixo em xharbour mas da o erro.: Erro Nativo: -904 Descrição..: [ODBC Firebird Driver] unavailable database public CNN Try CNN:=CreateObject("ADODB.Connection") CNN:Open("DRIVER=Firebird/InterBase® driver;UID=SYSDBA;PWD=masterkey;DBNAME=D:\FireBird\promaspe.fdb;CHARSET=WIN1252;DIALECT=3;CLIENT=fbclient.dll") Catch e Error Connection CNN ? "Erro Connection" Quit End Ah tentei também miudar a dll de fbCliente.dll p/ fbembed.dll mas não deu certo Se alguém souber e puder me ajudar eu agradeço
-
Esse seu problema ta muito estranho já que vc disse que está funcionando em outro lugar, tente sair do campo com TAB ou de outra maneira sem usar o enter e vê se da o mesmo erro, as vezes o erro esta no próximo campo ou em outro lugar num when ou valid, sei lá. é muito dificil saber o que ta errado no sistema.
-
Bom dia Primeiro ve se não tem nada de diferente da tela que vc ta fazendo com as anteriores do workshop, e tente o exemplo abaixo. No workshop na Dialog q vc fez clique botão direito e entre em Edit as Text... vc vai ver se os fontes são iguais. ******************************************************************************************************** Local aUF, oUF, oCmb aUF := { "AC","AL","AM","AP","BA","CE","DF","ES","GO","MA","MG","MT","MS","PA",; "PB","PE","PI","PR","RJ","RN","RO","RR","RS","SC","SE","SP","TO" } oUF:="SP" REDEFINE COMBOBOX oCmb Var oUF ITEMS aUF ID 109 OF oDlg02 UPDATE
-
Boa Tarde Oscar De uma olhada na Classe, talvez vc tem essa resposta lá. C:\FWH\SOURCE\CLASSES\printer.prg oPrn := PrintBegin( oTitulo, ; // Titulo .F., ; // User lPreview,; // Preview nil, ; // Model lModal, .F. ) // lselect Abraços
-
Valeu Yury deu certo sua dica *Mudei este //PRINTER oPrn FROM USER preview NAME "Ficha Técnica do Produto" MODAL // Escolhe a Impressora *Para Este oPrn:=PrintBegin("Ficha Técnica do Produto", .T., .T., NIL, .T.) Ah não tinha visto que tinha ficado daquele jeito, tá corrigido. Obrigado.
-
Bom dia pessoal. Estou tentando fazer uma impressao usando o Fw 13.02 BCC5.82 e esta acontecento o seguinte. Depois da impressao ao inves de parar no preview da impressao ele volta para a Dialog que pedi a impressao e a impressao fica embaixo desta dialog. Como resolver isso? Desde ja Agradeco quem puder me ajudar. Fontes Abaixo -; //------------------------------------------------------------// * FUNCION : F_RelFichaProd() -> NIL * * * * FUNCTION F_RelFichaProd() Local oDlg, oLst, oDbfCd, oGet[6], lNv:=.f. Local aTipo:={.t.,.f.,.f.,.f.} If !Acesso_Modulo("R") Return .f. EndIf vBusca:="" Select("PRODUTO") DATABASE oDbfCd oDbfCd:Load() oDbfCd:bEoF := {|| NIL} oDbfCd:bBoF := {|| NIL} F_OrdScope( "MATPROD", PRODUTO->COD_PRO) MATPROD->(DbSetRelation("MATERIAL",{||MATPROD->COD_MAT},"MATPROD->COD_MAT")) PRODUTO->(DbSetRelation("GRUPOPRO",{||PRODUTO->GRUP_PRO},"PRODUTO->GRUP_PRO")) DEFINE DIALOG oDlg RESOURCE "Dlg_FichaTecPro" REDEFINE GET oGet[1] VAR oDbfCD:COD_PRO ID 101 OF oDlg UPDATE ; PICTURE "@R 99/99.999" WHEN .f. REDEFINE GET oGet[2] VAR oDbfCD:NOME ID 102 OF oDlg UPDATE ; PICTURE "@!" WHEN .f. REDEFINE CHECKBOX oGet[3] var aTipo[1] ID 103 OF oDlg ; ON CLICK ( aTipo:={.t.,.f.,.f.,.f.}, F_Refresh(oGet, 3, 6)) REDEFINE CHECKBOX oGet[4] var aTipo[2] ID 104 OF oDlg ; ON CLICK ( aTipo:={.f.,.t.,.f.,.f.}, F_Refresh(oGet, 3, 6)) REDEFINE CHECKBOX oGet[5] var aTipo[3] ID 105 OF oDlg ; ON CLICK ( aTipo:={.f.,.f.,.t.,.f.}, F_Refresh(oGet, 3, 6)) REDEFINE CHECKBOX oGet[6] var aTipo[4] ID 106 OF oDlg ; ON CLICK ( aTipo:={.f.,.f.,.f.,.t.}, F_Refresh(oGet, 3, 6)) REDEFINE LISTBOX oLbx1 ; FIELDS PRODUTO->COD_PRO,; PRODUTO->NOME,; PRODUTO->UNIDADE ; ID 200 OF oDlg ; FIELDSIZES 90, 330, 45 ; TITLE "Codigo", "Descrição", "Unid." ; ON LEFT DBLCLICK (BscFocus(oGet[3]) ) ; ON CHANGE (oDbfCD:Load(), F_OrdScope( "MATPROD", oDbfCD:COD_PRO), F_Refresh(oGet, 1, 2)) ; COLOR CLR_BLUE oLbx1:bGoTop:={|| 1 } oLbx1:cAlias:= "PRODUTO" oLbx1:bKeyChar = { | nKey | LstBusca( oLbx1, nKey ) } oLbx1:aActions:= {{|| PRODUTO->(dbSetOrder(1)),oLbx1:Refresh() },; {|| PRODUTO->(dbSetOrder(2)),oLbx1:Refresh() }} oGet[1]:lDisColors := .f. oGet[2]:lDisColors := .f. REDEFINE BTNBMP ID 10 OF oDlg RESOURCE "Print32" ; TOOLTIP "Imprimir o Produto" ; NOBORDER ; ACTION (ImprFichaProduto("MATPROD", aTipo)) REDEFINE BTNBMP ID 20 OF oDlg RESOURCE "Cancel" ; TOOLTIP "Sair do Modulo" ; NOBORDER ACTION (oDlg:End()) ACTIVATE DIALOG oDlg Center RETURN ( NIL ) *************************************************************************************** Function ImprFichaProduto(oAuxil, aT_Prc) Local oFnt[4], oPn[3], oLi, oLb , oPag:=1, oTot:=0 Local oT_Incid:=0, oMarg:=0, oMark:=0, oPreco Public oPrn oLi:=0.6 PRINTER oPrn FROM USER preview NAME "Ficha Técnica do Produto" // Escolhe a Impressora // oPrn:SetLandScape() // Paisagem oPrn:SetPortrait() //Retrato oPrn:SetPage(9) //A4 oPrn:SetSize(2150,2790) If Empty( oPrn:hDC ) msgalert("Impressora não esta Instalada!!!") Return nil // Printer was not installed or ready Endif Define FONT oFnt[1] NAME "Ms Sans Serif" SIZE 0, -6 OF oPrn Define FONT oFnt[2] NAME "Ms Sans Serif" SIZE 0, -8 OF oPrn BOLD Define FONT oFnt[3] NAME "Ms Sans Serif" SIZE 0, -10 OF oPrn ITALIC Define FONT oFnt[4] NAME "Times New Roman" SIZE 0, -14 OF oPrn Define PEN oPn[1] width 0.5 of oPrn Define PEN oPn[2] width 1 of oPrn Define PEN oPn[3] width 3 of oPrn PAGE oLi+=0.4 SayTxt( oLi, 5.30 , "FICHA DE COMPOSIÇÃO DO PRODUTO", oFnt[4], oprn) SayBox( oLi, 0.2 , oLi+.6, 20.0 , oPrn , oPn[1]) oLi+=0.6 SayTxt( oLi, 0.40 , "Código", oFnt[1], oprn) SayTxt( oLi, 3.10 , "Descrição do Produto", oFnt[1], oprn) SayTxt( oLi,12.60 , "Unid.", oFnt[1], oprn) SayTxt( oLi,14.40 , "Grupo de Venda", oFnt[1], oprn) SayTxt( oLi+.2, 0.40 , PRODUTO->COD_PRO, oFnt[3], oprn) SayTxt( oLi+.2, 3.10 , PRODUTO->NOME , oFnt[3], oprn) SayTxt( oLi+.2,12.60 , PRODUTO->UNIDADE, oFnt[3], oprn) SayTxt( oLi+.2,14.40 , GRUPOPRO->GRUP_PRO+"-"+GRUPOPRO->DESCR, oFnt[3], oprn) SayBox( oLi, 0.2 , oLi+.6, 03.0 , oPrn , oPn[1]) SayBox( oLi, 3.0 , oLi+.6, 12.5 , oPrn , oPn[1]) SayBox( oLi,12.5 , oLi+.6, 14.3 , oPrn , oPn[1]) SayBox( oLi,14.3 , oLi+.6, 20.0 , oPrn , oPn[1]) oLi+=0.6 (oAuxil)->(DbGotop()) Do While !(oAuxil)->(Eof()) oPreco:=iif(aT_Prc[2], MATERIAL->ULT_PRECO,; iif(aT_Prc[3], MATERIAL->MED_PRECO,; iif(aT_Prc[4], MATERIAL->MOR_PRECO, MATERIAL->COT_PRECO))) SayTxt( oLi, 0.30 , "Código", oFnt[1], oprn) SayTxt( oLi, 1.80 , "Descrição do Material", oFnt[1], oprn) SayTxt( oLi, 9.30 , "Quantidade", oFnt[1], oprn) SayTxt( oLi,10.50 , "Peso Espec.", oFnt[1], oprn) SayTxt( oLi,12.10 , "ICMS", oFnt[1], oprn) SayTxt( oLi,13.35 , "IPI", oFnt[1], oprn) SayTxt( oLi,14.40 , "Qtde Total", oFnt[1], oprn) SayTxt( oLi,16.60 , "Val. Unitário", oFnt[1], oprn) SayTxt( oLi,18.60 , "Valor Total", oFnt[1], oprn) SayTxt( oLi+.2, 0.40 , Transform(MATPROD->COD_MAT, [@R 99/99.999] ), oFnt[2], oprn) SayTxt( oLi+.2, 1.90 , MATERIAL->NOME , oFnt[2], oprn) SayTxt( oLi+.2, 9.20 , Transform(MATPROD->QTD_TOT, [@E 99,999.999] ), oFnt[2], oprn) SayTxt( oLi+.2,10.40 , Transform(MATERIAL->PESO_ESP, [@E 9,999.9999] ) , oFnt[2], oprn) SayTxt( oLi+.2,12.00 , Transform(MATERIAL->ICMS, [@E 99.99] )+"%" , oFnt[2], oprn) SayTxt( oLi+.2,13.10 , Transform(MATERIAL->IPI, [@E 999.99] )+"%" , oFnt[2], oprn) SayTxt( oLi+.2,14.30 , Transform(F_QtdeTotal(), [@E 9,999,999.999] )+" "+MATPROD->UNIDADE, oFnt[2], oprn) SayTxt( oLi+.2,16.40 , Transform(oPreco, [@E 9,999,999.999] ), oFnt[2], oprn) SayTxt( oLi+.2,18.10 , Transform(F_CstTotal(F_QtdeTotal(), aT_Prc), [@E 9,999,999.99] ), oFnt[2], oprn) SayBox( oLi, 0.2 , oLi+.5, 01.7 , oPrn , oPn[1]) SayBox( oLi, 1.7 , oLi+.5, 09.2 , oPrn , oPn[1]) SayBox( oLi,09.2 , oLi+.5, 10.4 , oPrn , oPn[1]) SayBox( oLi,10.4 , oLi+.5, 11.9 , oPrn , oPn[1]) SayBox( oLi,11.9 , oLi+.5, 13.1 , oPrn , oPn[1]) SayBox( oLi,13.1 , oLi+.5, 14.3 , oPrn , oPn[1]) SayBox( oLi,14.3 , oLi+.5, 16.4 , oPrn , oPn[1]) SayBox( oLi,16.4 , oLi+.5, 18.0 , oPrn , oPn[1]) SayBox( oLi,18.0 , oLi+.5, 20.0 , oPrn , oPn[1]) oLi+=0.5 oTot+=F_CstTotal(F_QtdeTotal(), aT_Prc) // oLi+=1.2 If oLi >= 25 ENDPAGE oLi:=0.6 PAGE EndIf (oAuxil)->(DBSkip()) EndDo Tot_Encargos(oTot, @oT_Incid, @oMarg, @oMark) SayTxt( oLi, 0.30 , "Incidências", oFnt[1], oprn) SayTxt( oLi, 2.10 , "Marg. Lucro", oFnt[1], oprn) SayTxt( oLi, 4.10 , "Mark Up", oFnt[1], oprn) SayTxt( oLi, 6.10 , "Preço Venda", oFnt[1], oprn) SayTxt( oLi,18.10 , "Custo Total", oFnt[1], oprn) SayTxt( oLi+.2, 0.3, Transform(oT_Incid, [@E 999.99] )+"%", oFnt[3], oprn) SayTxt( oLi+.2, 2.1, Transform(oMarg, [@E 999.99] )+"%", oFnt[3], oprn) SayTxt( oLi+.2, 4.1, Transform(oMark, [@E 99.99999] ), oFnt[3], oprn) SayTxt( oLi+.2, 6.1, Transform(oTot*oMark, [@E 99,999,999.99] ), oFnt[3], oprn) SayTxt( oLi+.2,18.1, Transform(oTot, [@E 9,999,999.99] ), oFnt[3], oprn) SayBox( oLi, 0.2 , oLi+.6, 2.0 , oPrn , oPn[1]) SayBox( oLi, 2.0 , oLi+.6, 4.0 , oPrn , oPn[1]) SayBox( oLi, 4.0 , oLi+.6, 6.0 , oPrn , oPn[1]) SayBox( oLi, 6.0 , oLi+.6, 8.5 , oPrn , oPn[1]) SayBox( oLi,18.0 , oLi+.6, 20.0 , oPrn , oPn[1]) oLi+=0.5 ENDPAGE ENDPRINT CursorArrow() oFnt[1]:End() // Destroy the font object oFnt[2]:End() // Destroy the font object oFnt[3]:End() // Destroy the font object oFnt[4]:End() // Destroy the font object oPn[1]:End() // Destroy the font object oPn[2]:End() // Destroy the font object oPn[3]:End() // Destroy the font object Return nil