Jump to content
Fivewin Brasil

giovanyvecchi

Membros
  • Posts

    793
  • Joined

  • Last visited

  • Days Won

    13

Everything posted by giovanyvecchi

  1. Isto realmente poderia ser resolvido. Mais a gente é Brasileiro e da jeito em tudo. REDEFINE RADIO oRadMenu VAR nOpcBuscaClie ID 201, 202, 203, 204, 205, ; 206 OF oDlgInd UPDATE No inicio do Dialogo coloca ACTIVATE DIALOG oDlgTeste ON INIT CTRL_COLORS(oDlgTeste) FUNCTION CTRLS_COLORS(f_oDlgContainer) Local lc_aCtrls := {}, lc_iFor := 0 Local lc_aItemsRadio := {} lc_aCtrls := f_oDlgContainer:aControls For lc_iFor := 1 To Len(lc_aCtrls) If ValType(lc_aCtrls[lc_iFor]) == "O" if lc_aCtrls[lc_iFor]:ClassName() == "TRADIO" aEval(lc_aCtrls[lc_iFor]:oRadMenu:aItems,; {|_oRadId|{SetWindowTheme(_oRadId:hWnd, "", "" ),; _oRadId:SetColor(CLR_YELLOW,CLR_HBLUE)}}) ElseIf lc_aCtrls[lc_iFor]:ClassName() == "TCHECKBOX" SetWindowTheme(lc_aCtrls[lc_iFor]:hWnd, "", "" ) lc_aCtrls[lc_iFor]:SetColor(G_COLOR_SYS(31),G_COLOR_SYS(1)) EndIf EndIf Next RETURN NIL
  2. No harbour a função é: Hb_StrIsUTF8(<cString>)
  3. Eu uso a tScan32 desde 2006, mais é a versão free. Não tem suporte para OCR e nem leitor de codigo de barras. Precisei fazer uma rotina e uso esta zbarimg.exe no prompt de comando e para mim resolveu. WaitRun("cmd.exe /c zbarimg.exe --raw "+Dir_Temp()+::cFileScan+" > Barcode.txt",0) lc_cCodeBarFile := Alltrim(SubStr(Hb_MemoRead("Barcode.txt"),1,24))
  4. Baixa o zBarImg http://zbar.sourceforge.net/download.html
  5. Crie um Snippet do projeto, não global para colocar os campos das suas tabelas DBF Para gerar o snippet use o código abaixo //Classe Dbf2Snippet / 13/05/20 - 17:38:59 #Include "FiveWin.ch" FUNCTION DBF_TO_SNIPPET() Local lc_oDbf2Snippet lc_oDbf2Snippet := Dbf2Snippet():New() lc_oDbf2Snippet:Dbf2Snippet_Start() lc_oDbf2Snippet:End() RETURN NIL Class Dbf2Snippet Data aFilesDbfRota Data cSnippetTxt Data cTxtFileSalva Method New() Constructor Method End() Method Dbf2Snippet_Start() Method Dbf2Snippet_BuildTable(f_cDbfFile) EndClass //----------------------------------------------------------------------------- Method New() Class Dbf2Snippet ::aFilesDbfRota := {} ::cSnippetTxt := "" ::cTxtFileSalva := Hb_DirTemp()+"SnippetDBF.txt" Return Self //----------------------------------------------------------------------------- Method End() Class Dbf2Snippet Return Nil //----------------------------------------------------------------------------- Method Dbf2Snippet_Start() Class Dbf2Snippet Local lc_cTxtSelFiles Local lc_iFor := 0 lc_cTxtSelFiles := "Selecione as Tabelas DBFs" ::aFilesDbfRota := MY_AGETFILES( "Tabelas DBFs (*.dbf)|*.dbf|",; lc_cTxtSelFiles,,"SeuProjeto.ini","lc_cPastaDbf2Snippet") If Len(::aFilesDbfRota) == 0 MsgStop("Nenhum arquivo foi selecionado.",; "Procedimento Abortado.") Return Nil EndIf //xbrowse(::aFilesDbfRota) For lc_iFor := 1 To Len(::aFilesDbfRota) ::cSnippetTxt += ::Dbf2Snippet_BuildTable(::aFilesDbfRota[lc_iFor]) Next hb_memowrit(::cTxtFileSalva,::cSnippetTxt) WinExec("Notepad.exe "+::cTxtFileSalva) Return Nil //----------------------------------------------------------------------------- Method Dbf2Snippet_BuildTable(f_cDbfFile) Class Dbf2Snippet Local lc_cSnippetCreate := "" Local lc_aStructDbf := {}, lc_aFieldNames := {} Local lc_iFor := 0 Local lc_cDbfName := hb_FNameNameExt(f_cDbfFile) Local lc_cDbfDisp := hb_FNameName(f_cDbfFile) Local lc_cIndexName := StrTran(Lower(f_cDbfFile),".dbf",".cdx") MemVar TMPDBF //? lc_cIndexName If !File(lc_cIndexName) USE (f_cDbfFile) alias TMPDBF NEW EXCLUSIVE VIA "DBFCDX" Else USE (f_cDbfFile) INDEX (lc_cIndexName) alias TMPDBF NEW EXCLUSIVE VIA "DBFCDX" EndIf If NetErr() MsgStop("Erro ao tentar abrir o DBF "+f_cDbfFile,; "Procedimento abortado") Return Nil EndIf //XBROWSE("TMPDBF") lc_aStructDbf := TMPDBF->(dbStruct()) For lc_iFor := 1 To Len(lc_aStructDbf) aadd(lc_aFieldNames,lc_aStructDbf[lc_iFor,1]) Next lc_aFieldNames := ASort(lc_aFieldNames) lc_cSnippetCreate := Space(2)+Chr(34)+"File "+lc_cDbfName+Chr(34)+":{"+CRLF lc_cSnippetCreate += Space(2)+Chr(34)+"prefix"+Chr(34)+":"+chr(34)+"_DB_"+lc_cDbfDisp+chr(34)+","+CRLF lc_cSnippetCreate += Space(2)+Chr(34)+"body"+Chr(34)+": ["+CRLF lc_cSnippetCreate += Space(4)+Chr(34)+"${1|" For lc_iFor := 1 To Len(lc_aFieldNames) lc_cSnippetCreate += lc_aFieldNames[lc_iFor] If lc_iFor != Len(lc_aFieldNames) lc_cSnippetCreate += "," EndIf next lc_cSnippetCreate += "|}"+Chr(34)+","+CRLF lc_cSnippetCreate += Space(4)+"],"+CRLF lc_cSnippetCreate += Space(4)+Chr(34)+"description"+Chr(34)+":"+Chr(34)+"Dbf "+lc_cDbfName+Chr(34)+CRLF lc_cSnippetCreate += Space(2)+"},"+CRLF TMPDBF->(dbCloseArea()) Return lc_cSnippetCreate //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- FUNCTION MY_AGETFILES(f_cMask, f_cTitle, f_nDefaultMask, f_cInitialFile, f_cFlagDir ) Local lc_aRetFiles := {}, cPastaDir := "", lc_cInitDir := "" If !Hb_IsNil(f_cInitialFile) f_cInitialFile := Dir_Prog()+f_cInitialFile lc_cInitDir := AllTrim(GetPvProfString( "PASTAS_SALVAS", f_cFlagDir, "", f_cInitialFile)) EndIf lc_aRetFiles := aGetFiles( f_cMask, f_cTitle, f_nDefaultMask, lc_cInitDir,,.T. ) If !Hb_IsNil(f_cInitialFile) .and. Len(lc_aRetFiles) > 0 //cPastaDir := Lfn2SfnEx(lc_aRetFiles[1]) cPastaDir := Lfn2SfnEx(SubStr(lc_aRetFiles[1],1,Rat("\",lc_aRetFiles[1]))) WritePProString( "PASTAS_SALVAS", f_cFlagDir, cPastaDir, f_cInitialFile) EndIf RETURN lc_aRetFiles
  6. Oi pessoal. Criei um arquivo de snippets (trechos de códigos) com os comandos de fivewin. Para incluir no seu VsCode leia o arquivo pdf referente os links abaixo: https://easyupload.io/m215wo https://www.dropbox.com/s/h4bxaga1g3oex80/Fivewin_Snippets.zip?dl=0
  7. Nesta questão de permissões eu faço assim Um campo memo para cada usuario e apenas um flag composto de caracteres para todas as permissões, ex: cada pipe é uma ação, e o conteudo um numero com regra de bites 0 - nào permitido 1 - Permissão direta depois de logado 2 - Permissão com senha 4 - Permissão com Digital 8 - Permissão com PenDrive privado 16 - Permissão com Certificado digital 32 - Permissão inclusão 64 - Permissão alteração 128 - Permissão Exclusão 256 - Permissão Visualização 512 - Permissão Relatorios 1024 - Permissão Copia 2048 - Permissão privada Flag 240|358 Cadastro de usuario seria o primeiro fpipe 240 > 16,32,64,128 Cadastro de clientes seria o segundo pipe 358 > 2,4,32,64,256 Desta maneira vc pode controlar as permissões com um numero apenas.
  8. Oi pessoal. A tempos venho elaborando uma forma de gerenciar os meus projetos. Antes eu trabalhava em um projeto chamado RAIOX, que eu mesmo considerei um fracasso. A uns 2 anos e meio resolvi arquitetar novamente e iniciei o projeto Object Manager. Confesso que falta muito ainda, mais ja tenho ótimos resultados usando ele. Só não distribui anteriormente porque eu refiz varias rotinas novamente para que quando fosse publicado não teria o problema de cadastrar tudo novamente, e isto ocorreu comigo umas 10 vezes. Então, não vou explicar aqui. Fiz um video de 20 minutos explicando o basico. Baixe o Object Manager aqui ftp://Contrib:123@giovanyvecchi.no-ip.info:97/ObjManager/ O video aqui. https://www.instagram.com/tv/B_iLdPTA6Cj/?igshid=1drmcqid5b4dw Qualquer duvida Skype: giovany.vecchi https://ibb.co/vwbRWkD
  9. Execute o programa em modo administrador e tente novamente
  10. Copie a tela e compartilhe neste site https://pt-br.imgbb.com/
  11. Pega a variavel depois de processada. Assim MsgInfo(lc_clink)
  12. Fala Jackson, blz ? Olha, eu vi alguma coisa neste sentido para enviar fotos pelo Whats usando este método ai. Deve ser a mesma coisa para pdfs. Só que não interessei. Hoje vou dar uma olhada para ver e se der um tempinho faço as adaptações se funcionar.
  13. Poste aqui a linha de comando da variavel lc_clink Outra coisa, o contato tem que estar cadastrado no whats que esta em funcionamento.
  14. Estranho, uso esta rotina em varios clientes e não tem problemas. Voce pode deixar o whatsapp carregado que ele envia certinho. Mostra pra mim a linha de comando, a variavel lc_cLink lc_cLink := chr(34)+f_cWhatsAppCaminho+chr(34)+" https://api.whatsapp.com/send?phone=55"+TXT_CHAR_CLEAN(f_cNumeroWhats,{"(",")","-",".","+"})
  15. Certifique que o numero não tenha caracteres, somente números. E não coloque o 55 Olhe tambem se o caminho do whatsapp.exe esta correto
  16. Desta maneira você só consegue enviar mensagens. A vantagem é que não tem custos. Se precisar de algo mais profissional, ai seria um api pago.
  17. Eu uso assim Instale o WhatsZap desktop no computador, conecte usando o qrcode com celular e execute assim WHATS_APP_MSN("17997121234","Ola, sou eu no Whats","C:\Users\GiovanyVecchi\AppData\Local\WhatsApp\WhatsApp.exe") #Include "Fivewin.ch" FUNCTION WHATS_APP_MSN(f_cNumeroWhats,f_cMensagem,f_cWhatsAppCaminho) Local lc_oShell, lc_cLink, lc_cFindExe := Space(1000) Local lc_hWndWhats, lc_nSecondsWhats := 0 Local lc_lWhatsPresent := .F. f_cNumeroWhats := AllTrim(f_cNumeroWhats) f_cMensagem := AllTrim(f_cMensagem) f_cWhatsAppCaminho := Alltrim(f_cWhatsAppCaminho) lc_hWndWhats := FindWindow(,"WhatsApp") if hb_IsNil(lc_hWndWhats) lc_lWhatsPresent := .F. Else if lc_hWndWhats == 0 lc_lWhatsPresent := .F. Else lc_lWhatsPresent := .T. BringWindowToTop( lc_hWndWhats ) SysWait(.3) SendMessage(lc_hWndWhats,WM_SETFOCUS,0,0) SysWait(.2) EndIf EndIf If !lc_lWhatsPresent WinExec(chr(34)+f_cWhatsAppCaminho+chr(34)) hb_idleSleep(40) EndIf lc_cLink := chr(34)+f_cWhatsAppCaminho+chr(34)+" https://api.whatsapp.com/send?phone=55"+TXT_CHAR_CLEAN(f_cNumeroWhats,{"(",")","-",".","+"}) lc_oShell := tOleAuto():New( "WScript.Shell" ) lc_oShell:run(lc_cLink,,.T.) hb_idleSleep(5) f_cMensagem := StrTran(f_cMensagem,CRLF,"+{ENTER}") lc_oShell:sendkeys(f_cMensagem) hb_idleSleep(1) lc_oShell:SendKeys("~") hb_idleSleep(1.5) if !lc_lWhatsPresent lc_hWndWhats := FindWindow(,"WhatsApp") if hb_IsNil(lc_hWndWhats) lc_lWhatsPresent := .F. Else if lc_hWndWhats == 0 lc_lWhatsPresent := .F. Else lc_lWhatsPresent := .T. EndIf EndIf EndIf Return lc_lWhatsPresent
  18. Arquivos .RC tem suas grandes vantagens quando voce trabalha em projetos usando GitHub, Svn etc. Imagina o projeto sendo editado por varios programadores. Se for RES não haverá atualizações. Em RC ocorrerá merges. Eu mesmo tenho meus programas todos no GitHub. Programa em qualquer lugar, e depois atualizo os dados podendo trabalhar em varios computadores.
  19. Uso o PellesC desde 2006 e recomento para todos. Para quem for usar arquivos .RC voce tem que criar um script para gerar os arquivos .RES que é o meu caso. Mais se for usar .RES direto, não tem problemas. Vai o link abaixo https://www.pellesc.de/index.php?page=download&lang=en
  20. Oi Jorge Eu uso a minha classe tAds para isto: https://github.com/giovanyvecchi/tAdsGit.git Para gravar ::oDb_Certificado := DB_CERT_A1():OpenRdd() ::oDb_Certificado:rLock() ::oDb_Certificado:Files2BlobZip({"C:\PASTA\CertificadoA1.pfx"},"bCertificados") //Grava compactado no campo bCertificados ::oDb_Certificado:Commit(.T.) Para extrair ::oDb_Certificado := DB_CERT_A1():OpenRdd() aFilesInZip := ::oDb_Certificado:Blob2ZipFiles("C:\PASTA","bCertificados") // Extrai os arquivos na pasta ? aFilesInZip[1] // Primeiro arquivo gravado
  21. oBtnSeu:Click() // Primeira opção Eval(oBtnSeu:bAction) // Segunda Opção
  22. Ai seria assim Hb_DirScan("C:\","QualquerProgramaOuArquivo.ext")
  23. Tenta assim Hb_DirScan("C:\Program Files (x86)","ValidadorSintegra2017.exe","H") ou Hb_DirScan("C:\Program Files","ValidadorSintegra2017.exe","H")
×
×
  • Create New...