Jump to content
Fivewin Brasil

giovanyvecchi

Membros
  • Posts

    793
  • Joined

  • Last visited

  • Days Won

    13

Everything posted by giovanyvecchi

  1. Como o kapi ja mensionou, é só incluir o arquivo manifest mesmo. Só que quando voce compacta o executavel com UPX usando este manifest pode ocasionar erros.
  2. Veja bem. Há 2 maneiras para conectar com ads. 1-LOCAL SERVER > Não precisa de instalar o sistema remoto (que não é gratuito) , Em rede, funciona P2P (Ponto a Ponto) igual voce faz com DBFCDX, por mapeamentos. A configuração padrão aceita 5 conexões sendo que tem como voce configurar para 10 conexões. 2-REMOTE SERVER ou INTERNET SERVER > Voce não precisa mudar nada nos seus códigos a partir do momento que vc converteu para ADT e criou um dicionario de dados. Funciona igual o MySql. Postgresql, Oracle. FireBird etc etc. Só que o sistema remoto tem custos e não é barato, mais vale até o ultimo centavo. Adiciona meu Skype que esclareço algumas partes importantes para voce. SKYPE: giovany.vecchi
  3. Baixa este exemplo simples aqui: https://www.sendspace.com/file/x0a5qe Na pasta TadsHelp tem os documentos de como fazer para iniciar usando tAds. Voce poderá usar suas rotinas procedurais Ex: APPEND, RLOCK, REPLACE E ir mesclando para objeto de tAds com sql. Os Dbfs tem que ser convertidos para ADT. Para isto use o utilitario Dbf2Advantage.exe que esta na pasta .\Util\Dbf2Advantage. Leia o Help que tem as instruções de como iniciar. Para Baixar o Tads completo é aqui: https://github.com/giovanyvecchi/tAdsGit.git Instale o tortoise ou GitHub Desktop para baixar o projeto. Qualquer duvida pode me adicionar no skype: giovany.vecchi
  4. Para trabalhar com ADS, aconselho usar dicionario de dados. Voce pode tentar usando minha classe tAds https://github.com/giovanyvecchi/tAdsGit.git Em tads seria assim: TAds_CreateIndex(f_nConnection,f_cTableName,f_cTagIndex,f_cTagExpr) Compatibilidade com RDDCDX FOX PRO: #define HB_FT_NONE 0 #define HB_FT_STRING 1 /* "C" */ #define HB_FT_LOGICAL 2 /* "L" */ #define HB_FT_DATE 3 /* "D" */ #define HB_FT_LONG 4 /* "N" */ #define HB_FT_FLOAT 5 /* "F" */ #define HB_FT_INTEGER 6 /* "I" */ #define HB_FT_DOUBLE 7 /* "B" */ #define HB_FT_TIME 8 /* "T" */ #define HB_FT_TIMESTAMP 9 /* "@" */ #define HB_FT_MODTIME 10 /* "=" */ #define HB_FT_ROWVER 11 /* "^" */ #define HB_FT_AUTOINC 12 /* "+" */ #define HB_FT_CURRENCY 13 /* "Y" */ #define HB_FT_CURDOUBLE 14 /* "Z" */ #define HB_FT_VARLENGTH 15 /* "Q" */ #define HB_FT_MEMO 16 /* "M" */ #define HB_FT_ANY 17 /* "V" */ #define HB_FT_IMAGE 18 /* "P" */ #define HB_FT_BLOB 19 /* "W" */ #define HB_FT_OLE 20 /* "G" */ Tipos de campos Tabelas ADT FUNCTION TAds_StructInfo() Local aStructInfo := {} aadd(aStructInfo,"Logical") // 01-Logical / DBF and ADT / 1 Byte // 1-byte logical (boolean) field. Recognized values for True are // ‘1’, ‘T’, ‘t’, ‘Y’, and ‘y’. aadd(aStructInfo,"Numeric") // 02-Numeric / DBF and ADT / 2 to 32 (Decimal: 0 to Length-2) // Fixed-length (exact ASCII representation) numeric. One byte is reserved // for the sign of the numeric value. If the decimal value is not zero, // one additional byte is used for the decimal point. aadd(aStructInfo,"Date") // 03-Date / DBF and ADT / 4 byte // 4-byte integer containing a Julian date. aadd(aStructInfo,"Char") // 04-String or Character / DBF and ADT / 1 to 65530 Bytes // Fixed-length character field that is stored entirely in the table. aadd(aStructInfo,"Memo") // 05-Memo / DBF and ADT / 9 Bytes // Variable-length memo field containing character data. The size of each // field is limited to 4 GB. The memo data is actually stored in a // separate file, called a memo file, to reduce table bloat. aadd(aStructInfo,"Blob") // 06-Binary / DBF and ADT / 9 Bytes // Variable-length memo field containing binary data. The size of each field // is limited to 4 GB. The binary data is actually stored in a separate file, // called a memo file, to reduce table bloat. aadd(aStructInfo,"Image") // 07-Image / DBF and ADT / 9 Bytes // Variable-length memo field containing binary image data. The size of each // field is limited to 4 GB. The binary image data is actually stored in a // separate file, called a memo file, to reduce table bloat. aadd(aStructInfo,"Varchar") // 08-Varchar / DBF_VFP and ADT / 1 to 65000 Bytes // This field type allows variable length character data to be stored up to // the maximum field length, which is specified when the table is created. // It is similar to a character field except that the exact same data will be // returned when it is read without extra blank padding on the end. If you // are creating this field using the Advantage Client Engine API directly // (e.g., AdsCreateTable), you must specify the type as "VarCharFox" to avoid // legacy compatibility issues with an older obsolete varchar field type. aadd(aStructInfo,"Compactdate") // 09-Compactdate / DBF only / 4 Bytes aadd(aStructInfo,"Double") // 10-Double / DBF and ADT / 8 Bytes // 8-byte IEEE floating point value in the range 1.7E +/-308 (15 digits of // precision). The decimal value affects the use of the field in expressions. // It does not affect the precision of the stored data. If the length is given, // it will be ignored. For example, "salary, double, 10, 2" and "salary, // double, 2" produce the same field. aadd(aStructInfo,"Integer") // 11-Integer / DBF and ADT / 4 Bytes // 4-byte long integer values from -2,147,483,647 to 2,147,483,647. aadd(aStructInfo,"Short") // 12-ShortInt / ADT only / 2 Bytes // 2-byte short integer value from -32,767 to 32,767. aadd(aStructInfo,"Time") // 13-Time / ADT only / 2 Bytes // 4-byte integer internally stored as the number of milliseconds since midnight. aadd(aStructInfo,"TimeStamp") // 14-TimeStamp / ADT only / 8 Bytes // 8-byte value where the high order 4 bytes are an integer containing a Julian // date, and the low order 4 bytes are internally stored as the number of // milliseconds since midnight. If using the Advantage CA-Visual Objects RDDs, // this is a string type. aadd(aStructInfo,"AutoInc") // 15-AutoInc / ADT only / 4 Bytes // 4-byte read-only positive integer value from 0 to 4,294,967,296 that is // unique for each record in the table. aadd(aStructInfo,"Raw") // 16-Raw / ADT only / 1 to 65530 Bytes // Fixed-length, data-typeless raw data field. If using the Advantage CA-Visual // Objects RDDs, Advantage Client Engine APIs must be used to set and retrieve // the raw data. aadd(aStructInfo,"CurDouble") // 17-CurDouble / ADT only / 8 Bytes // Currency data stored internally as an 8-byte IEEE floating-point value in // the range 1.7E +/-308 (15 digits of precision). The decimal value affects // the use of the field in expressions. It does not affect the precision of the // stored data. If the length is given, it will be ignored. For example, // "salary, CurDouble, 10, 2" and "salary, CurDouble, 2" produce the same field. aadd(aStructInfo,"Money") // 18-Money / ADT only / 8 Bytes // Currency data stored internally as a 64-bit integer, with 4 implied decimal // digits from -922,337,203,685,477.5807 to +922,337,203,685,477.5807. // The Money data type will not lose precision. aadd(aStructInfo,"LongLong") // 19-LongLong / ADT only aadd(aStructInfo,"CIChar") // 20-CIString / ADT only / 1 to 65530 Bytes // Case insensitive fixed-length character field that is stored entirely in // the table. aadd(aStructInfo,"RowVersion") // 21-RowVersion / ADT only / 8 Bytes // An 8-byte unsigned integer unique for each record in the table that is // automatically incremented each time a record is updated. aadd(aStructInfo,"ModTime") // 22-ModTime / ADT only / 8 Byte // 8-byte value where the high order 4 bytes are an integer containing a Julian // date, and the low order 4 bytes are internally stored as the number of // milliseconds since midnight. If using the Advantage CA-Visual Objects RDDs, // this is a string type. The value of this field is automatically updated with // the current date and time each time a record is updated. aadd(aStructInfo,"VarCharFox") // 23-VarCharFox / DBF and ADT / 1 to 65000 Bytes // This field type allows variable length character data to be stored up to // the maximum field length, which is specified when the table is created. // It is similar to a character field except that the exact same data will be // returned when it is read without extra blank padding on the end. If you // are creating this field using the Advantage Client Engine API directly // (e.g., AdsCreateTable), you must specify the type as "VarCharFox" to avoid // legacy compatibility issues with an older obsolete varchar field type. AADD(aStructInfo,"VarBinaryFox") // 24-VarBinaryFox / DBF and ADT / 1 to 65000 Bytes // Variable length binary data. The maximum length of data that can be stored // in the field is specified when the table is created. This is similar to // the Raw field type except that the true length of the data is stored // internally in the record. aadd(aStructInfo,"SystemField") // 25-SystemField / Internal use only aadd(aStructInfo,"nChar") // 26-NChar / DBF and ADT / 1 to 32500 // Fixed length Unicode character field that is stored entirely in the table. // The length specified for the field is the number of UTF16 code units or // characters. The internal storage uses UTF16 encoding so the number of // bytes occupied by the field in each record is 2 times the specified length. aadd(aStructInfo,"NVarChar") // 27-NVarChar / DBF and ADT / 1 to 32500 // Variable length Unicode character data. The field is stored entirely in // the table. The maximum length of the data that can be stored in the field // is specified when the table is created. The internal storage uses UTF16 // encoding so the number of bytes occupied by the field in each record is 2 // times the specified length plus 2 bytes for the length. aadd(aStructInfo,"NMemo") // 28-NMemo / DBF and ADT / 9 Bytes // Variable length Unicode memo field. The maximum length of data that can be // stored in the field is 4GB. Since UTF16 is used as the internal storage, // the number of UTF16 code units is limited to 2G. The data is stored in a // separate file, called a memo file. RETURN aStructInfo Tudo isto esta incluso na classe.
  5. Opa,desculpa a demora. É só achar o numero de referencia da versão. Fiz somente para verificar a versão atual do NET. Se precisar checar os outros voce tem que mudar a chave do caminho #define HKEY_LOCAL_MACHINE 2147483650 FUNCTION NET_FRAMEWORK_ATUAL() Local oRegNet, nFlagNetInstall, cNetVersaoTxt oRegNet := TReg32():New( HKEY_LOCAL_MACHINE ,; "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\" ) nFlagNetInstall := oRegNet:Get("Release",0) oRegNet:Close() If nFlagNetInstall == 378389 cNetVersaoTxt := ".NET Framework 4.5" ElseIf nFlagNetInstall == 378675 cNetVersaoTxt := ".NET Framework 4.5.1 instalado com Windows 8.1 ou Windows Server 2012 R2" ElseIf nFlagNetInstall == 378758 cNetVersaoTxt := ".NET Framework 4.5.1 instalado no Windows 8, Windows 7 SP1 ou Windows Vista SP2" ElseIf nFlagNetInstall == 379893 cNetVersaoTxt := ".NET Framework 4.5.2" ElseIf nFlagNetInstall == 394254 .or. nFlagNetInstall == 393297 cNetVersaoTxt := ".NET Framework 4.6" ElseIf nFlagNetInstall == 394254 .or. nFlagNetInstall == 394271 cNetVersaoTxt := ".NET Framework 4.6.1" ElseIf nFlagNetInstall == 394802 .or. nFlagNetInstall == 394806 cNetVersaoTxt := ".NET Framework 4.6.2" ElseIf nFlagNetInstall == 460798 .or. nFlagNetInstall == 460805 cNetVersaoTxt := ".NET Framework 4.7" ElseIf nFlagNetInstall == 461308 .or. nFlagNetInstall == 461310 cNetVersaoTxt := ".NET Framework 4.7.1" ElseIf nFlagNetInstall == 461808 .or. nFlagNetInstall == 461814 cNetVersaoTxt := ".NET Framework 4.7.2" Else cNetVersaoTxt := "Versão do .NET Framework não catalogada ou não presente." EndIf Return cNetVersaoTxt
  6. Simples If oMyXbrowse01:lFocused bla bla bla EndIf
  7. Não tem como emular uma versão superior do internet explorer se no computador a versão é inferior. É como se você tentasse executar funções do java versão 9 e no computador tem java versão 6.
  8. E tem outra Depois de muitas pesquisas (uma atras da outra) o capcha começa a pedir muitas tarefas, tipo assim: marque os carros, marque as vias, marque as placas etc etc. Então aconselho depois de umas 5 consultas chamar esta função para apagar os cockies e data caches WaitRun("RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 4351") E esta solução voces só vão achar aqui no nosso forum > (Nós somos melhores) kkkkkkkk
  9. Parametrize seu programa com a versão do seu navegador atual. Ex: se seu navegador for iexplorer 11 coloque assim INTER_APP_WEB_CONFIG("SeuPrograma.exe",11001) FUNCTION INTER_APP_WEB_CONFIG(f_cNameProg,f_nVersion_IE) Local oRegKey, cRegProgGet, lDeleteKey := .f. Default f_nVersion_IE := 11001 if IsWow64() oRegKey := TReg32():New( HKEY_LOCAL_MACHINE,; "SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION" ) oRegKey:Set(f_cNameProg,f_nVersion_IE,4) oRegKey:Close() oRegKey := TReg32():New( HKEY_LOCAL_MACHINE,; "SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_AJAX_CONNECTIONEVENTS" ) oRegKey:Set(f_cNameProg,0,4) // Padrão 0 oRegKey:Close() oRegKey := TReg32():New( HKEY_LOCAL_MACHINE,; "SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_ZONE_ELEVATION" ) oRegKey:Set(f_cNameProg,0,4) // Padrão 1 oRegKey:Close() oRegKey := TReg32():New( HKEY_LOCAL_MACHINE,; "SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_READ_ZONE_STRINGS_FROM_REGISTRY" ) oRegKey:Set(f_cNameProg,1,4) // Padrão 0 oRegKey:Close() oRegKey := TReg32():New( HKEY_LOCAL_MACHINE,; "SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BEHAVIORS" ) oRegKey:Set(f_cNameProg,1,4) oRegKey:Close() oRegKey := TReg32():New( HKEY_LOCAL_MACHINE,; "SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_ENABLE_WEB_CONTROL_VISUALS" ) oRegKey:Set(f_cNameProg,1,4) oRegKey:Close() oRegKey := TReg32():New( HKEY_LOCAL_MACHINE,; "SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_SHOW_APP_PROTOCOL_WARN_DIALOG" ) oRegKey:Set(f_cNameProg,1,4) // Padrao 0 oRegKey:Close() oRegKey := TReg32():New( HKEY_LOCAL_MACHINE,; "SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_GPU_RENDERING" ) oRegKey:Set(f_cNameProg,1,4) // Padrao 0 oRegKey:Close() oRegKey := TReg32():New( HKEY_LOCAL_MACHINE,; "SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_NINPUT_LEGACYMODE" ) oRegKey:Set(f_cNameProg,0,4) // Padrao 1 oRegKey:Close() Else oRegKey := TReg32():New( HKEY_LOCAL_MACHINE,; "Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION" ) oRegKey:Set(f_cNameProg,f_nVersion_IE,4) oRegKey:Close() oRegKey := TReg32():New( HKEY_LOCAL_MACHINE,; "SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BEHAVIORS" ) cRegProgGet := oRegKey:GetBinary(f_cNameProg) //? cRegProgGet If Empty(cRegProgGet) oRegKey:Set(f_cNameProg,1,4) EndIf oRegKey:Close() oRegKey := TReg32():New( HKEY_LOCAL_MACHINE,; "SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_ENABLE_WEB_CONTROL_VISUALS" ) oRegKey:Set(f_cNameProg,1,4) oRegKey:Close() EndIf RETURN NIL
  10. Alterei o arquivo .Manifest com as informações de otimização para Windows 7,8,8.1 e 10 e chamada de solicitação de acesso para administrador quando carregado. É só incluir no arquivo de recursos. Windows10.Manifest
  11. Verifica se não esta faltando alguma DLL que o seu programa usa e não esta na mesma pasta.
  12. Estou sem scanner mult folhas para testar. Mais acho que a solução é esta aqui WHILE .T. nSeqImg++ //cImagem:=DIR_TEMP()+"_IMG_"+LIMPO(nSeqImg,.f.)+".JPG" cFilescan := STRZERO(nNUMDOC,8) + STRZERO(nSeqImg,2)+ ".Jpg" AADD(aFilesScan,cFilescan) nDib:=(oScan:AcquireToFile(cFilescan)) IF nDib < 0 EXIT ENDIF syswait(.5) oScan:FreeDib() syswait(.3) SEEK cFilescan IF REGLOCK(10,(EOF()) ) REPLACE NOMEARQ WITH cFilescan,DATA WITH DATE(),HORA WITH TIME() REPLACE STATUS WITH 1 DbUnlock() ENDIF ///// colocar aqui If oScan:State() == 5 // Não ha mais imagens no buffer Exit EndIf ENDDO
  13. Sim, Uso Fivewin com Harbour. a Função TWAIN_ACQUIRETOFILENAME( 0, cFilescan ) tem que retornar -1 quando não há mais imagens no buffer do twain. Se esta dando erro nesta linha, tente saber o tipo de retorno na variavel > nDib
  14. Pode ser tambem o arquivo Eztwain.h estou postando tudo agora tScan_Completo.zip
  15. Pode ser alguma incompatibilidade com xHarbour. Eu uso Harbour com BCC7. Lembro que no scanner da Kodac dava este problema quando era windows XP tambem. Nos scanners BROTHER é só alegria, nunca da pau. Tenta executar seu programa em modo ADMINISTRADOR e veja se resolve.
  16. Voce tem que alterar as propriedades do dialogo no PellesC http://imgur.com/a/FHZsq
  17. Usa este aqui que to postando. Nem me lembro das alterações que fiz. TSCAN.zip
  18. Tem outras opções mais simples. se quiser testar tai. #Include "Fivewin.ch" FUNCTION CEP_PESQUISA(f_cCep) Local oCep oCep := CorreiosCep():New(f_cCep) xBrowse(oCep) oCep:End() RETURN oCep Class CorreiosCep Data oHttp, cHtml, aHtml Data nConsultaResultado Init 0 // 0-Ok consultou e cep existe // 1-Não consultou no site ou sem internet // 2-Consultou e cep não existe // 3-Cep incorreto // 4-Cep em branco Data cResultado Init "" Data cResultadoTxt Init "" Data cEstado Init "" Data cCidade Init "" Data cTpLogradouro Init "" Data cEndereco Init "" Data cBairro Init "" Data cCepFlag Init "" Data cIbge Init "" Data cComplemento Init "" Method New() Constructor Method End() EndClass //----------------------------------------------------------------------------- Method New(f_cCep) Class CorreiosCep local oError, cTxtTmp := "", aTmpResultado := {}, uRet , nError := 0, cError := "" Default f_nTpProcesso := 0 If !INTER_ACESSO_OK() MsgStop("Não há conexão com a Internet","Erro.") ::nConsultaResultado := 1 Return Self EndIf f_cCep := StrTran(AllTrim(f_cCep),"-","") IF Len(f_cCep) != 8 ::nConsultaResultado := 3 ///MsgAlert("Cep Inválido "+f_cCep,"Atenção") RETURN Self ENDIF IF Len(TXT_CHAR_CLEAN(f_cCep,{" ","-"})) == 0 ::nConsultaResultado := 4 RETURN Self ENDIF ::oHttp := TOleAuto():New("winhttp.winhttprequest.5.1") ::oHttp:SetTimeouts(40000,40000,40000,40000) ::nConsultaResultado := 0 uRet := ::oHttp:Open("GET","http://viacep.com.br/ws/" + f_cCEP + "/piped/",.f.) Try ::oHttp:Send() Catch oError MsgStop("Erro ao carregar a pagina dos Correios.","Erro") ::nConsultaResultado := 1 Return Self End Try If ::oHttp:Status != 200 MsgStop("Erro ao carregar a pagina dos Correios.","Erro") ::nConsultaResultado := 1 Return Self EndIf ::cHtml := ::oHttp:ResponseBody() ::cHtml := HB_UTF8TOSTR( ::cHtml ) ::aHtml := hb_aTokens( ::cHtml, '|' ) IF LEN( ::aHtml ) < 7 ::nConsultaResultado := 2 RETURN Self ENDIF ::cResultado := "" ::cResultadoTxt := "" ::cEstado := UPPER(SUBSTR( ::aHtml[6], AT( ':', ::aHtml[6] ) + 1 )) ::cCidade := UPPER(SUBSTR( ::aHtml[5], AT( ':', ::aHtml[5] ) + 1 )) ::cTpLogradouro := "" ::cEndereco := UPPER(SUBSTR( ::aHtml[2], AT( ':', ::aHtml[2] ) + 1 )) ::cBairro := UPPER(SUBSTR( ::aHtml[4], AT( ':', ::aHtml[4] ) + 1 )) ::cIBGE := UPPER(SUBSTR( ::aHtml[8], AT( ':', ::aHtml[8] ) + 1 )) ::cComplemento := UPPER(SUBSTR( ::aHtml[3], AT( ':', ::aHtml[3] ) + 1 )) ::nConsultaResultado := 0 //xbrowse(self) Return Self //----------------------------------------------------------------------------- Method End() Class CorreiosCep Self := Nil ///Hb_gcAll Return Nil //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// FUNCTION TXT_CHAR_CLEAN(f_cTxt,f_aCaracteresRetira) Local cTxtRetorno := f_cTxt, iFor := 0 For iFor := 1 To Len(f_aCaracteresRetira) cTxtRetorno := StrTran(cTxtRetorno,f_aCaracteresRetira[iFor],"") Next RETURN cTxtRetorno
  19. Tenta assim oScan := TScan32():New( "" ) IF oScan:State() < 4 MSGINFO("Não foi possivel estabelecer a conexão com o scanner. "+CRLF+; "Verifique se o scanner esta ligado e plugado neste computador.",; "Procedimento Abortado...") oScan:End() RETURN .F. ENDIF oScan:PixelType( 1 ) oScan:SetRes( 200 ) // Resolucion 150 by Default. oScan:SetHide( .F. ) Scan:AutoFeed(.F.) SysWait(.1) oScan:SetMultiTransfer(1) // Varias paginas SysWait(.1) oScan:EnableDuplex(1) // Frente e verso SysWait(.1) oScan:SetFileFormat(4) ///1-Bmp 2-Tga 3-Tiff 4-Jpg 5-Pdf oScan:SetJpegQuality(70) /// 75 default DO WHILE .T. nSeqImg++ cImagem := DIR_TEMP()+"_IMG_"+LIMPO(nSeqImg,.f.)+".JPG" // Nome das imagens AADD(aFilesScan,cImagem) nDib := (oScan:AcquireToFile(cImagem)) IF nDib < 0 EXIT ENDIF syswait(.5) oScan:FreeDib() syswait(.3) ENDDO oScan:End() // Fim FOR iFor:=1 TO LEN(aFilesScan) IF FILE(aFilesScan[iFor]) AADD(aFilesConfirma,aFilesScan[iFor]) // Pasta e nomes das imagens ENDIF NEXT
  20. Depois de muito tempo fechei mais uma versão do tAds. Para quem tiver interessado é só baixar e acompanhar. https://github.com/giovanyvecchi/tAdsGit.git
  21. Temos que mudar certos conceitos sobre objeto e uso de variaveis. Tenta fazer assim Em vez de usar VALID Checa_Contratos("Produto",f_CodServ,oSayCont[1],.F.,1) .AND. !Empt(F_CodServ) Use oGetCont[1] :bValid := {|_oBjGet|Checa_Contratos("Produto",_oBjGet:VarGet(),oSayCont[1],.F.,1) .AND. !Empt(_oBjGet:VarGet())}
×
×
  • Create New...