-
Posts
1,229 -
Joined
-
Last visited
-
Days Won
24
Posts posted by alex2002
-
-
Estamos usando o flutter aqui na empresa e estamos gostando. Curva de aprendizado bem baixa (DART) e de fato já soltamos aplicativos sem ao menos terminar os cursos.
-
Olha só, fui no GIT que o João postou, e acabei vendo que o Fast agora é Open Source.
Alguém, já baixou o projeto?
Quanto ao problema do citado do tópico, sugiro usar alias que funciona muito bem.Um abraço,
Alexandre Pereira -
Olá Galera.
Que o Senhor Jesus possa nos abençoar neste Natal, no ano que está por iniciar e em todos os momentos das nossas vidas.
Feliz Natal a todos e um próspero ano novo. -
Em 15/12/2021 at 13:01, edutraini disse:
Boa tarde a todos
Queria agradecer a todos que me ajudaram tudo funcionando perfeitamente.
Um unica duvida se tem como colocar a dll libmysql dentro do sistema ou tem que jogar na pasta aonde esta executavel
Obrigado
Não tem como colocar a DLL dentro seu sistema. Por isso ela é uma DLL, vc tem que ter ela na pasta da aplicação (ou conforme o ambiente).
Eduardo, já terminou a questão do Atualizador? Você não me ligou mais.
Um abraço,
Alexandre Pereira -
21 horas atrás, edutraini disse:
Boa tarde, Alex
To usando a sua rotina mas esta dando erro
Vc poderia me ajudar
ABraço
Olá Edu.
Claro, vc tem o meu telefone. Pode me chamar novamente, já cheguei na cidade onde vou ficar até o dia 15/12
Só no horário comercial que é meio difícil, mas no mais estou a disposição.
Um abraço,
Alexandre Pereira
CAMPEÃO BRASILEIRO -
Em 02/12/2021 at 12:24, Jorge Andrade disse:
Bom dia. Veja a mensagem que te enviei e ele já deve ter contatado vc.
[]s,
Sim, já me mandou email.
Obrigado -
Vou postar aqui o fonte do meu atualizador.
Qualquer coisa é só chamar.
Um abraço,
/////////////////////////////////////////////////////////////
#include "fivewin.ch"
STATIC oDlg, oTxt, oRas, oMeter, oRecup, oAtualiza, oSair//////////////////////
Function Main()
local oIni
parameters cSistema, cPerfil, cPar1, cPar2
public lSair := .f.
public lCheck := .f.
public lUpLoad := .f.
public lQuiet := .f.
public cTxt
public cLogFile := 'ftplog.txt'
public cRecup := ''
public cArquivo
public cLocal := CurDrive()+':\'+Curdir()
public cPasta := '/livecred'
public oFtp
Set Date Brit
Set Century OnSet 3DLook On
DEFAULT cSistema := 'NomeDoSistema'
// Verificando se o Sistema já está aberto
if isExeRunning( 'LiveCRED.exe' )
Return .f.
endifif cSistema = '/check'
lCheck := .t.
lQuiet := .t.
cSistema := cPerfil
cPerfil := cPar1
endifif cSistema = '/quiet'
lQuiet := .t.
cSistema := cPerfil
cPerfil := cPar1
endifif cSistema = '/upload'
lUpLoad := .t.
cSistema := cPerfil
cPerfil := cPar1
endifDEFAULT cPerfil := '1'
cArquivo := rtrim( lower(cSistema) )+'.zip'
cTxt := 'Início'nAtual := 0
if !lCheck
DEFINE ICON oIcon RESOURCE 'LiveCRED'
DEFINE DIALOG oDlg RESOURCE "Live_A" Title "LiveCRED Versão 2.3" Icon oIconredefine Get oTxt Var cTxt Memo id 101 Color nRgb(0,0,220),nRgb(253,252,213) Of oDlg
redefine Say oRecup Var cRecup id 102 Color nRgb(150,0,0) of odlg
redefine Meter oMeter Var nAtual Total 100 id 103 Of oDlgredefine BUTTON oAtualiza id 501 ACTION (oAtualiza:Disable(), oSair:Disable(), Atualiza(), oAtualiza:enable(), oSair:enable() ) CANCEL
redefine BUTTON oSair id 510 ACTION (lSair:= .t., oDlg:end() ) CANCEL
ACTIVATE DIALOG oDlg CENTERED valid lSair on init iniciar()
else
ChecaVersao()
endif
return .t./////////////////////////
static function iniciar()
oDlg:SetFocus()
oDlg:show()
oAtualiza:setfocus()
oAtualiza:refresh()
oDlg:refresh()
SysRefresh()
if lCheck
// Visualiza('Verificando se existe nova versão disponível, aguarde...')
// oAtualiza:disable()
// oSair:Disable()
ChecaVersao()
elseif lQuiet
oAtualiza:disable()
oSair:Disable()
Atualiza()
lSair := .t.
oDlg:end()
hb_gcAll()
elseif lUpload
oAtualiza:disable()
oSair:Disable()
EnviaVersao()
else
visualiza('Clique em Executar para que a sua versão do '+upper(cSistema)+' seja automaticamente atualizada')
endif
return nil
Function ChecaVersao()
LOCAL lRetorno := .T.
local lErro := .f., lAchou := .f., lTemVersaoNova := .f., lAtualiza := .f.
local i
local dDataRemoto, dDataLocal, cHoraRemoto, cHoraLocal, nTamRemoto, nTamLocalcArqLocal := cLocal+'\'+cSistema+'.zip'
cArqRemoto := cArquivo
for i = 1 to 2
if Conecta( i )
visualiza( "Conexão estabelecida, Verificando se existe Atualização..." )
oFtp:Cwd(cPasta)
aArquivo := oFTP:listfiles( cArqRemoto )
if len( aArquivo ) = 0
lRetorno := .f.
// visualiza('Atualização não encontrada! **** ERRO **** ')
else
// dDataRemoto := aArquivo[1,3]
// cHoraRemoto := aArquivo[1,4]
nTamRemoto := aArquivo[1,2]
endif
oFTP:Close()
else
lRetorno := .f.
endif
if lRetorno
exit
endif
next
if lRetorno
if file( cArqLocal )
// dDataLocal := fDate( cArqLocal )
// cHoraLocal := substr( fTime( cArqLocal ),1,5)
nTamLocal := fsize( cArqLocal )
else
// dDataLocal := ctod( '01/01/2000' )
// cHoraLocal := '00:00'
nTamLocal := 0
endif
if nTamRemoto <> nTamLocal
lTemVersaoNova := .t.
endif/*
if dDataRemoto > dDataLocal
lTemVersaoNova := .t.
elseif dDataRemoto = dDataLocal
if cHoraLocal < cHoraRemoto
cTempo := elaptime( cHoraLocal, cHoraRemoto )
else
cTempo := elaptime( cHoraRemoto, cHoraLocal )
endif
nTempo := val(substr( cTempo,1,2))*60 + val(substr( cTempo,4,2))
if nTempo > 210 // 3 horas e meia (diferença de horários do servidores ftps)
lTemVersaoNova := .t.
endif
endif
*/else
lErro := .t.
visualiza("Problemas para verificar nova versão! ")
if !lQuiet
MsgInfo('Problemas para verificar nova versão!','Erro de Atualização')
endif
endifif !lErro .and. !lTemVersaoNova
visualiza("Não Existe nova versão disponibilizada! ")
if !lQuiet
MsgInfo('Não Existe nova versão disponível!','Sem Atualização')
endif
endifif !lErro .and. lTemVersaoNova
if MsgYesNo('Existe nova versão disponível do NomeDoSistema, deseja atualizar?','Nova Versão')
lAtualiza := .t.
endif
endifif lAtualiza
visualiza("Resetando conexões...! ")
syswait(2)
sysrefresh()
killprocess(cSistema+".exe")
MyWinExec('livecred '+if(lQuiet,'/quiet ','')+cSistema+' '+cPerfil)
endiflSair:= .t.
quit
hb_gcAll()
return nil
///////////////////////////////////////////////////////
FUNCTION EnviaVersao()
local aFR3, aArqs := {}
local lErro := .f.
local cArqLocal, cArqEXE, cExtensao, cPastaFR3, cPastaImagemcArqLocal := CurDrive()+':\'+Curdir()+'\'+cArquivo
cPastaFR3 := 'p:\desenv\fr\'
cArqEXE := CurDrive()+':\'+Curdir()+'\'+cSistema+'.EXE'
cExtensao := lower( right( cSistema, 3 ) )
aFR3 := directory( cPastaFR3+'*.fr3' )for x = 1 to len( aFR3 )
aadd( aArqs, cPastaFR3+aFR3[x,1] )
nextif cExtensao <> 'zip' .and. cExtensao <> 'rar'
fErase( cArqLocal )
aadd( aArqs, cArqEXE )// ? hb_zipfile( cArqLocal, {'c:\cardPrinter\crdLandEraseFront.bmp'} )
hb_zipfile( cArqLocal, aArqs )
else
cArqLocal := CurDrive()+':\'+Curdir()+'\'+cSistema
endifif EnviaFtp( cArqlocal )
if !lQuiet
MsgInfo('Ok! versão Enviada para o servidor WEB!','Ok')
endif
else
if !lQuiet
MsgStop('ERRO AO ENVIAR VERSÃO!','Erro')
endif
endif
lSair:= .t.
oDlg:end()
hb_gcAll()RETURN NIL
//////////////////////////////////////////////////
FUNCTION Atualiza()
local aArquivos := {}, i
local cArqLocal := CurDrive()+':\'+Curdir()+'\'+cArquivo
local cPastaBak := sonumeros(dtoc(date()))+'_'+sonumeros(time())
local cExtensao
local lErro := .f.
// Apagando o arquivo existente
Ferase( cArquivo )
Ferase( cArqLocal )if RecebeFtp( cArqlocal, cArquivo )
visualiza("Executando Backup da Versão Atual...")// Criando um backup dos arquivos anteriores
lmkdir(cLocal+'\fr')
lmkdir(cLocal+'\Live')
lmkdir(cLocal+'\Live\'+cPastaBak)
aArquivos := ZipRead(cLocal+'\'+cArquivo)for i = 1 to len(aArquivos)
cExtensao := lower( right( aArquivos, 3 ) )
if cExtensao <> 'fr3' .and. cExtensao <> 'gif'
frename(cLocal+'\'+aArquivos,cLocal+'\Live\'+cPastaBak+'\'+aArquivos)
endif
next// Backup Criado
visualiza("Descompactando a Versão Atual...")// Descompactando
for i = 1 to len(aArquivos)
// entrando em um loop caso o arquivo a ser descompactado esteja aberto
do while .t.
cExtensao := lower( right( aArquivos, 3 ) )
if cExtensao <> 'fr3' .and. cExtensao <> 'gif' .and. file(cLocal+'\'+aArquivos) .and. frename(cLocal+'\'+aArquivos, cLocal+'\Live\'+cPastaBak+'\'+aArquivos ) <> 0
if !lQuiet .and. MsgYesNo('Erro ao criar backup do Arquivo '+cLocal+'\'+aArquivos+' !'+CRLF+'Possivelmente ele está sendo utilizado.'+CRLF+'Deseja Retentar?','Arquivo Sendo Usado')
loop
else
lErro := .t.
exit
endif
endif
if !hb_unzipfile( cLocal+'\'+cArquivo, {|cArq| qout(cArq) }, .t.,'', cLocal, aArquivos )
if !lQuiet .and. MsgYesNo('Erro ao DESCOMPACTAR o Arquivo '+cLocal+'\'+aArquivos+' !'+CRLF+'Possivelmente ele está sendo utilizado.'+CRLF+'Deseja Retentar?','Arquivo Sendo Usado')
loop
else
lErro := .t.
exit
endif
endif
// Tratando os arquivos FR3
if cExtensao = 'fr3' .and. !copyfile(cLocal+'\'+aArquivos, cLocal+'\fr\'+aArquivos )
if !lQuiet .and. MsgYesNo('Erro ao DESCOMPACTAR o Arquivo '+cLocal+'\'+aArquivos+' !'+CRLF+'Possivelmente ele está sendo utilizado.'+CRLF+'Deseja Retentar?','Arquivo Sendo Usado')
loop
else
lErro := .t.
exit
endif
elseif cExtensao = 'gif' .and. !copyfile(cLocal+'\'+aArquivos, cLocal+'\imagem\'+aArquivos )
if !lQuiet .and. MsgYesNo('Erro ao DESCOMPACTAR o Arquivo '+cLocal+'\'+aArquivos+' !'+CRLF+'Possivelmente ele está sendo utilizado.'+CRLF+'Deseja Retentar?','Arquivo Sendo Usado')
loop
else
lErro := .t.
exit
endif
elseif cExtensao = 'fr3' .or. cExtensao = 'gif'
ferase( cLocal+'\'+aArquivos )
endif
exit
enddo
if lErro
exit
endif
next
if lErro
visualiza("ERRO, houve um erro! - VERSÃO NÃO ATUALIZADA")
visualiza("Restaurando a versão anterior...")
for i = 1 to len(aArquivos)
CopyFile(cLocal+'\Live\'+cPastaBak+'\'+aArquivos, cLocal+'\'+aArquivos)
next
else
visualiza("OK! Versão atualizada e pronta para ser usada!")
endifelse
lErro := .t.
visualiza("ERRO ao Receber o Arquivo de Atualização! - VERSÃO NÃO ATUALIZADA")
if !lQuiet
MsgAlert('Falha na recepção do arquivo!','Erro')
endif
endif
if !lerro
if !lQuiet
MsgInfo('Ok! versão Atualizada e pronta para ser usada!','Ok')
else
MyWinExec( cSistema )
endif
endif
RETURN NIL// Visualizar o que está sendo executado
/////////////////////////////
Function Visualiza( cTexto )
/////////////////////////////if !lQuiet
if valtype(cTexto) <> 'O'
cTxt += CRLF+cTexto
endif
oTxt:SetText( cTxt )
oTxt:SetPos(Len(cTxt))
oTxt:refresh()
oDlg:Refresh()
endif
sysrefresh()
Return Nil
// Ler os nomes dos arquivos que estão dentro do ZIP
* -----------------------------------------------------------------------------
Function zipread(zip_file)
* -----------------------------------------------------------------------------
local _array := {}
local zip := fopen(zip_file, 2), tmp :=space(4)
local method, orig_date, fn_date, comp_size, uncomp
local fn_size, extra, junk, file_name, orig_hora, fn_hora
do while .t.
tmp := space(4)
if fread(zip, @tmp, 4) != 4 // End of file
exit
endif
if tmp = "PK" + chr(1) + chr(2) // Central dir
exit
elseif tmp != "PK" + chr(3) + chr(4)
exit
endif
tmp := space(26)
fread(zip, @tmp, 26)
method := bin2i(substr(tmp, 5, 2))
comp_size := bin2l(substr(tmp, 15, 4))
fn_size := bin2i(substr(tmp, 23, 2))
extra := bin2i(substr(tmp, 25, 2))
file_name := freadstr(zip, fn_size)
junk := if(extra = 0, "", freadstr(zip, extra))
extract(zip, comp_size, method, file_name)
aadd(_array, file_name )
enddo
fclose(zip)
return _array* -----------------------------------------------------------------------------
Static Function extract(_handle, _size, _method, unzip_file)
* -----------------------------------------------------------------------------
local newfile, tmp := space(4096)
if _method != 0
fseek(_handle, _size, 1) // Skip file
else
if newfile = fcreate(unzip_file, 0)
do while _size > 0
fread(_handle, @tmp, len(tmp))
_size -= min(_size, 4096)
fwrite(newfile, tmp)
enddo
fclose(newfile)
endif
endif
return nil
function SoNumeros( cString, cExcecao )local cRetorno:='', x
DEFAULT cExcecao:=''
for x=1 to len( cString )
if substr( cString,x,1 )$'1234567890' .or. substr( cString,x,1 )$cExcecao
cRetorno+=substr( cString,x,1 )
endif
nextreturn cRetorno
////////////////////////////DADOS DA FUNCAO//////////////////////////////////
// NOME : MyWinExec ///
// FINALIDADE : adequar WinExec ao windows 2000/nt ///
// PARAMETROS : <1> cComando ///
// RETORNO : nada ///
/////////////////////////////////////////////////////////////////////////////
function MyWinExec( cComando )local cExecute:=''
if IsWinNT() // NT, 2000 e XP
cExecute:=GetEnv( 'COMSPEC' )+' /C '
endifreturn WinExec( cExecute+cComando, 0 )
Function timefromstart
return '00:00:00'KillProcess( "calc.exe" )
/////////////////////////////
FUNCTION KillProcess( cExe )local oWmi, oList, oProc
oWmi := WmiService()
oList := oWmi:ExecQuery( "select * from Win32_Process where Name = '" + cExe + "'" )
for each oProc in oList
oProc:Terminate()
next
return nilFUNCTION WMIService()
// It would be useful to keep this function in the library
static oWMIlocal oLocator
if oWMI == nil
oLocator := CREATEOBJECT( "wbemScripting.SwbemLocator" )
oWMI := oLocator:ConnectServer()endif
return oWMI
////////////////////////////////////////////////////////////////////////
FUNCTION RecebeFTP( cArqLocal, cArqRemoto )
////////////////////////////////////////////////////////////////////////LOCAL lRetorno := .T.
local ifor i = 1 to 2
IF Conecta( i )
visualiza( "Conexão estabelecida, fazendo o Download..." )
oFtp:Cwd(cPasta)
aArquivo := oFTP:listfiles( cArqRemoto )
if len( aArquivo ) = 0
lRetorno := .f.
visualiza('Atualização não encontrada! **** ERRO **** ')
lRetorno := .f.
else
lRetorno := Inicia_Progress(cArqLocal, aArquivo[1][2], cArqRemoto, oFtp )
endif
oFTP:Close()
else
lRetorno := .f.
endif
if lRetorno
exit
endif
nextif lRetorno
visualiza( "Arquivo Recebido com sucesso!" )
else
visualiza( "Falha no Recebimento ***** ERRO *****" )
endifRETURN lRetorno
//////////////////////////////////////////////////////
FUNCTION EnviaFtp( cFile )
//////////////////////////////////////////////////////LOCAL lRetorno := .T.
local i
for i = 1 to 1
IF Conecta( i )
visualiza( "Conexão estabelecida, fazendo o Upload..." )
oFtp:Cwd(cPasta)
if !oFtp:UploadFile( cFile )
lRetorno := .F.
endif
oFTP:Close()
if lRetorno
visualiza( "Arquivo enviado com sucesso!" )
else
visualiza( "Falha no Envio!" )
endif
ELSE
lRetorno := .f.
ENDIF
nextRETURN lRetorno
/////////////////////////////////////////////////////////////////////
Function Inicia_Progress( cArquivoDestino, nTotal, cArqRemoto, oftp)
/////////////////////////////////////////////////////////////////////
local lOk
oFtp:exGauge := { | done, size| ShowGauge(done, size, nTotal, cArqRemoto ) }
if !oFtp:DownLoadFile(cArquivoDestino)
lOk := .f.
else
lOk := .t.
endif
return lOk
// Mostrar a Barra de Progresso durante upload/download
///////////////////////////////////////////////////
STATIC FUNCTION FtpProgress( nSent, nTotal, oFtp )
///////////////////////////////////////////////////
LOCAL cProgress
cProgress := Int( 100*nSent/nTotal )
ometer:set(cProgress )return .t.
/////////////////////////////////////////////////////
Procedure ShowGauge( nSent, nSize, wTotal, ftpfile )
/////////////////////////////////////////////////////
if nSent > 0
cProgress := Int( (nSent/wTotal)*100 )
ometer:set(cProgress )
endif
return
///////////////////////////////
FUNCTION Conecta( nConexao )
///////////////////////////////local cServer, cUsuario, cSenha, i
local cUrl
local oUrl
local lRetorno := .f.default nConexao := 1
for i = nConexao to 2
if i = 1
cServer := 'ftp.declatecnologia.com.br'
cUsuario := 'XXXXXXXXXXXXXXXXXXX'
cSenha := 'YYYYYYYYYYY'
elseif i = 2
cServer := 'ftp.declatecnologia.com.br'
cUsuario := 'XXXXXXXXXXXXXXXXXXX'
cSenha := 'YYYYYYYYYYY'
endif
If !IsDigit( cServer ) //O Servidor é um Nome
WSAStartup()
cServer := GetHostByName( cServer )
WSACleanUP()
EndifcUrl := "ftp://" + cUsuario + ":" + cSenha + "@" + cServer
visualiza( "Abrindo conexão com o "+str(i,1)+"o. Servidor..." )
oUrl := tUrl():New( cUrl )
oFTP := tIPClientFtp():New( oUrl )
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .T.// Forçar UserID se houver @ no usuário
IF At( "@", cUsuario ) > 0
oFTP:oUrl:cServer := cServidor
oFTP:oUrl:cUserID := cUsuario
oFTP:oUrl:cPassword := cSenha
ENDIFoFtp:exGauge := ( @FtpProgress() )
if oFTP:Open( cUrl )
lRetorno := .t.
exit
endif
Visualiza('Não conectou ao Servidor!!!')
if oFTP:SocketCon == NIL
Visualiza('Conexão não inicializada!!!')
elseif InetErrorCode( oFTP:SocketCon ) == 0
Visualiza('Resposta do Servidor: '+oFTP:cReply)
else
Visualiza('Erro na Conexão: '+InetErrorDesc( oFTP:SocketCon ))
endif
nextRETURN lRetorno
-
Eduardo, pelo que entendi, você não conseguirá renomear/apagar o executável ao qual vc está utilizando. A saída é montar um executável paralelo que faz a verificação de nova versão em seu FTP e a partir daí vc roda ele em background (assim que entrar no seu aplicativo). Caso haja nova versão você avisa ao usuário e aí sim, traz a versão, mata a aplicação principal, renomeia o executável e reabre a aplicação.
O meu aplicativo é assim e faz anos que não tenho problema.
Qualquer coisa, entra em contato comigo que posso te ajudar.
Um abraço,Alexandre Pereira
-
Toya, parece que a sua declaração de cFile está errada:
"E:\JOBs/NFSe\xml_teste\S_NS9_000000001-nfSe.xml"
Não teria que ser:
"E:/JOBs/NFSe/xml_teste/S_NS9_000000001-nfSe.xml"
ou
"E:\JOBs\NFSe\xml_teste\S_NS9_000000001-nfSe.xml"
?
-
Em 27/11/2021 at 10:37, kapiaba disse:
Fala meu baixinho querido. Quantos anos estais agora, 24 anos?
Pela altura estou com 16, mas pela idade verdeira 47 rsrsrsrsrs
-
8 horas atrás, kapiaba disse:
Não entendi. Esta postagem é de 2002, ou eu perdi alguma coisa? Meu Nick ainda era o <Karinha>. E o <Alex2002>, ainda era jovem. kkkkkkkkkkkkkkkkk
KKKKKK, continuo jovem meu amigo.
Só um pouco mais experiente rsrsrsrsrs -
Pode ser Jorge.
Me envia então
meu email: alexandre@declatecnologia.com.br -
Na verdade é pra Cooperativa de Táxi.
Mas que tenha um controle integrado de voucher, financeiro.... -
Olá PessoALL,
Alguém do grupo tem sistema integrado para controle de Cooperativa de Transporte?
Um abraço,
Alexandre Pereira -
1 hora atrás, Jmsilva disse:
Pelles C 9.0, uma alternativa!
Vixe, arrumou guerra com o João.
rsrsrsrsrs -
11 minutos atrás, marcioe disse:
Há muito tempo eu tive que importar o banco de dados de uma loja que estava com esse banco de dados, eu consegui fazer via ODBC com acess, na epoca.
Dai acessei as tabelas que precisava e importei no acess, e depois gerei o que queria para migrar.Não sei se esse é o seu caso
Pode ser, vou tentar.
-
Em 14/09/2021 at 10:14, giovanyvecchi disse:
Tem que ver qual gerenciador da sybase esta instalado no servidor do seu cliente.
1-ADS (Advantage Database Server)
2-ASE (Adaptive Server Enterprise)
3-Sap SQL AnyWhere
4-Sap HANA
Eu tenho o arquivo .DB
Será que tem como saber?
Um abraço,
Alexandre Pereira -
Meu Deus, o trem é pior do que imaginei. rsrsrsrsrsrs
Mas valeu, vou ver como conseguir subir essa bagaça. -
Olá PessoALL,
Algum amigo aqui do fórum já subiu este tipo de Banco?
Estou com o arquivo .DB e o proprietário me disse que é SyBASE, daí gostaria de saber se alguém tem expertise nisso.
Obrigado.
Alexandre Pereira -
O Vilian é do grupo. Tenta contato com ele
-
Acho que vc terá que criar as imagens compondo cada situação. Não tenho certeza, mas é uma alternativa.
-
Olá Márcio.
É possível.
oLbx:aCols[9]:AddResource("BRANCO16")oLbx:aCols[9]:AddResource("AMARELO16")oLbx:aCols[9]:AddResource("VERDE16")oLbx:aCols[9]:AddResource("PRETO16")oLbx:aCols[9]:lBmpTransparent := .f.oLbx:aCols[9]:nDataBmpAlign := AL_LEFToLbx:aCols[9]:cHeader := "Análise"oLbx:aCols[9]:nHeadStrAlign := AL_CENTERoLbx:aCols[9]:nDataStrAlign := AL_RIGHToLbx:aCols[9]:nWidth := 80oLbx:aCols[9]:bBmpData := {|| nStat := aLbx[oLbx:nArrayAt,12], if( nStat = 1, 1, if( nStat = 2, 2, if( nStat = 0, 4, 3 )))}No seu caso, vc tem que montar uma imagem com as duas opções.Um abraço,
Alexandre Pereira -
Olá Dorneles.
Segue.
Os prints de como fica o .FR3
Primeira barra:
Segunda:
Muito fácil
Um abraço,
Alexandre Pereira -
Olá Pessoal,
Tenho um relatório em FAST REPORT que uso o método DBLCLICK em uma linha/coluna para chamar uma função xHarbour. Esta função está funcionando legal.
Agora preciso de passar mais de uma coluna da linha para a função xHarbour. Já tentei um monte de coisa e não tive êxito, alguém tem uma solução?No exemplo abaixo ele retorna o valor apenas da linha/coluna clicada. Mas eu preciso de mais colunas da mesma linha.
programacao pra celular
in Programação
Posted
Cara, o pessoal está fazendo na Udemy mesmo.