terça-feira, 13 de janeiro de 2015

Windev Internet Abrir Navegador

Windev Internet Abrir Navegador

Segue exemplo:

bStarted
is boolean
sParameters is string = "http://www.arsistemas.com.br"
bStarted = ExeRun("""C:\Program Files\Internet Explorer\iexplore.exe"" " + sParameters, exeActive, exeDontWait, "C:\Program Files\Internet Explorer\")

IF ErrorOccurred THEN
    Error()
END
--------------------


Windev Estruturas

Windev Estruturas

stFILE is structure as FILENAMEprodutos
// Cria uma estrutura igual a analyse 
MyFileRecord is Record of MyAnalysisFile

// use as funções hreadxxx... para localizar record no arquivo original
//pra preehcer as estruturas com os nomes dos campos
MyfileRecord = MyAnalysisFile

MyfileRecord = MyAnalysisFile
//depois é só fazer a atribuição

algumacoisa = MyFileRecord.nomedocampo 


Windev Pdf para Texto

Windev Pdf para Texto

//Procedimento para Extrair texto de arquivos PDF com Windev
tmpArq is string
tmpArq = fImageSelect(EdtArqPdf,"","Selecione PDF...","PDFs"+TAB+"*.PDF")
IF tmpArq<>"" THEN
       EdtArqPdf = tmpArq  // mostra o nome do arquivo na tela
       ImgPDF = tmpArq            // mostra o PDF na tela
       StaTextoDoPDF =  PDFToText(tmpArq,"1") // extrai texto pg 1
END
 
 

Windev Data e Hora

Windev Data e Hora

Posix (Unix Timestamp) corresponde ao número de segundos após 01/01/1970.
 // Summary: Converte Data/Hora para Tempo Unix (Posix) = nro. de sgundos após 01/01/1970 
 // Syntax:
 //[ <Result> = ] ConvDtHo2UnixTime (<pDtHo> is datetime)
 //
 // Parameters:
 // pDtHo (datetime): data e hora a converter
 // Return Value:
 // duration: // data Posix (timestamp Unix)
 //
 // For instance:
 // tmpUnix is duration = ConvDtHo2UnixTime(tmpdtho)
 // TempoUnix = tmpUnix..InSeconds
 //
 PROCEDURE ConvDtHo2UnixTime(pDtHo is DateTime)

 tmpDtHo is DateTime = pDtHo
 tmpDtHo..Millisecond = 0

 // calcula a diferença de tempo entre 01/01/1970 e a data fornecida
 tmpDif is TO string = DateTimeDifference("19700101000000",tmpDtHo)

 // calcula a data Posix
 tmpUnix is Duration = StringToDuration(tmpDif,durationCenti)
 tmpUnix..Millisecond = 0

 RESULT tmpUnix

// Summary: Converte Tempo Unix (Posix = nro. de sgundos após 01/01/1970) para Data/Hora
 // Syntax:
 //[ <Result> = ] ConvUnixTime2DtHo (<pUnixTime> is numeric)
 //
 // Parameters:
 // pUnixTime (numeric): data Posix (timestamp Unix)
 // Return Value:
 // datetime: // data e hora
 //
 // For instance:
 // tmpUnix is numeric = TempoUnix
 // tmpDtHo is datetime = ConvUnixTime2DtHo(tmpUnix)
 //
 PROCEDURE ConvUnixTime2DtHo(pUnixTime is numeric)
 tmpMaxInt4b is int on 4 bytes = 2147483647
 tmpSegundos is int on 8 bytes
 tmpUnix is Duration
 IF pUnixTime <= tmpMaxInt4b THEN
 tmpUnix..Second = pUnixTime
 ELSE // para suportar datas após 19/01/2038 e Posix > 2147483647 (valor máximo em 4 bytes)
 tmpSegundos = pUnixTime
 LOOP
 tmpUnix..Second += tmpMaxInt4b
 tmpSegundos -= tmpMaxInt4b
 IF tmpSegundos < tmpMaxInt4b THEN
 tmpUnix..Second += tmpSegundos
 BREAK
 END
 END
 END
 tmpDtHo is DateTime = "19700101000000"
 tmpDtHo += tmpUnix

 RESULT tmpDtHo

Fonte: LIFETECH

 

Windev Aliases

Windev Aliases


HAlias

            Cria um aliás lógico para um arquivo de dados (ou consulta), ou cancela todos os aliases existentes. Um aliás também pode ser cancelado pela sentença HCancelAlias, da Wlanguage.
            Para quem não lembra mais, permite que você trabalhe em arquivos de dados físicos diferentes, mas com a mesma descrição lógica. Para todos os arquivos de dados, por exemplo, a descrição do arquivo é realizada na Análise (ou dicionário de dados, se preferirem), e HAlias, é usado para criar uma cópia lógica desse arquivo.
            A partir da versão 17 do WinDev, esta função também está disponível para aplicações Ipad e Iphone.

Exemplo de uso

Pedidos2000 is Data Source
// Cria um alias para o arquivo “Pedidos”
IF HAlias(Pedidos, Pedidos2000) = True THEN
// Agora "Pedidos2000" pode ser usado pelo processo.
// Ele se comporta da mesma maneira que o arquivo "Pedidos" descrito na
// Análise
// Nome do arquivo físico associado: Pedidos2000.
HCreationIfNotFound(Pedidos2000)
END

Sintaxe

<Result> = HAlias(<Nome Lógico> [, <Nome do Aliás>])

<Result>: Boolean
  • True Se o aliás foi criado,

Windev Internet conexao

Windev Internet conexao

Muitas vezes, antes de enviarmos um comando que faça acesso a Internet, é conveniente verificar se a conexão está ativa, para não exibir uma mensagem "pouco amigável" para  o usuário. O código abaixo faz esta verificação:
ResConnection = InternetConnected()
IF ResConnection = True THEN
//Executa a sua rotina
ELSE
Info("Não existe conexão com a Internet. O programa não pode continuar")
END


Windev HttpRequest Consulta Completa

Windev HttpRequest Consulta Completa

Dependendo da consulta a ser executada, pode funcionar corretamente no navegador, mas retornar um resultado errado com a função HTTPRequest da WLanguage. Normalmente isso ocorre devido à uma má codificação da requisição, e o servidor WEB não tem como explorar adequadamente o recurso. Neste caso é necessário codificar adequadamente a consulta com a função URLEncode da WLanguage e em seguida passar a sequência codificada para a função HTTPRequest.
sminhaconsulta is string = "http://..."
//codifica a consulta via URLEncode
//substitui os espaços por %20, por exemplo
sminhaconsulta = URLEncode(sminhaconsulta)
//executa a consulta codificada
HTTPRequest(sminhaconsulta)
 
 

Windev Imprimir Ip/Porta

Windev Imprimir Ip/Porta

Muitas vezes precisamos enviar comandos diretamente a uma impressora (exemplo Impressoras PCL) e mais anda para um determinado endereço e porta.
Veja o exemplo abaixo:
/ / Imprime diretamente para a impressora
/ / No endereço: 192.168.15
/ / Na porta da rede: 9100
 
iDestination (iPCL, "192.168.15:9100")
//Imprime "alo" no canto superior esquerdo da página
 
iPrint (iYPos (10) iXPos + (10) + "Alo")
iEndPrinting()
 
 

Windev Tablea Colunas Cores

Windev Tablea Colunas Cores

Para fazer estes tratamentos, utilizamos os comandos g*.
Exemplo
TABLE_LOG_GRANDE_USUARIO.COL_CEP..Caption = gPen(LightRed) + "CEP"
//Faz com que o título CEP apareça em vermelho.
Para atribuir cores ao conteúdo de uma determinada coluna
// Fonte em azul
TABLE_LOG_GRANDE_USUARIO.COL_CEP..Color = iLightBlue
// Fundo em verde
TABLE_LOG_GRANDE_USUARIO.COL_CEP..BrushColor = iLightGreen
 
 

Windev Tabela Celulas

Windev Tabela Celulas


Considere:
VAL_soma_das_vendas
// como sendo o nome da célula
TCD_venda_cliente  
// como sendo o nome da tabela dinâmica
COL_NomeCliente
// como sendo o nome do cliente
COL_
Data_Ano
// como sendo o perído
// Claro que você deverá estar manipulando a tabela por células e não por linhas.
No evento DisplayCell desua tabela entre um código semelhante a:
IF TCD_Venda_Cliente.VAL_soma_das_vendas > 200 THEN
    TCD_Venda_Cliente.VAL_soma_das_vemdas .. Color = RGB (45, 255, 0)
END
IF TCD_Venda_Cliente.VAL_soma_das_vemdas <100 THEN
    TCD_Venda_Cliente.VAL_soma_das_vemdas .. Color = RGB (254, 0, 29)
END

Windev Pagina Httpgetresult

Windev Pagina Httpgetresult

// Retorna o código HTML da página "www.windev.com" 
ResStart = HTTPRequest("http://www.windev.com")
IF ResStart = True THEN
Info("O código HTML é: " + HTTPGetResult())
END
// Exemplo de processamento de um erro retornado pelo servidor web
url is string 
HTTP_Res is string
HTTPError is string
Url = "http://www.amazon.fr/s/ref=nb_ss?__mk_fr_FR=AMAZON&url" + ...
"=search-alias=aps&field-keywords=2746049805"

// Envia uma solicitação para o servidor da Amazon
IF HTTPRequest(Url) THEN
// Solicitação enviada, a url é válida
HTTP_Res = HTTPGetResult()
IF Length(HTTP_Res) = 0 THEN
// Erro do servidor web, 
// os detalhes do erro estão no cabeçalho da página
HTTPError = HTTPGetResult(httpHeader)
Error(HTTPError)
END
END





Windev Moblie Celular Sms

Windev Moblie Celular Sms

// Summary : envia uma mensagem SMS e retorna o resultado TRUE/FALSE
 // Syntax :
 //[ <Résultat> = ] EnviarSMS (<pNúmero>, <pMensagem>)
 //
 // Paramètres :
 // pNúmero : número do telefone celular
 // pMensagem : mensagem com até 160 caractertes
 // Valeur de retour :
 // booléen : // TRUE=sucesso, FALSE=falha no envio
 //
 PROCEDURE EnviarSMS(pNúmero,pMensagem)

 SMS.Number = pNúmero
 SMS.Message = pMensagem

 IF SMSSend() THEN 
 RESULT True
 ELSE
 Error(ErrorInfo(errMessage)) 
 RESULT False
 END

// Fonte Lifetech
 
 
 

Windev Moblie Cartao Sd Pasta

Windev Moblie Cartao Sd Pasta

// Summary : retorna o diretório definido no cartão SD
 // Syntax :
 //[ <Résultat> = ] DiretórioDoCartãoSD()
 //
 PROCEDURE DiretórioDoCartãoSD()

 DirCartãoSD is string 
 StatusCartão is int = SysStatusStorageCard()

 IF StatusCartão = sysCardAvailable THEN
 DirCartãoSD = SysDirStorageCard() + ["/"] + "Android Analytics"
 IF NOT fDirectoryExist(dirCartãoSD) THEN fMakeDir(dirCartãoSD)
 END

 RESULT DirCartãoSD
 
 

Windev Mobile Protecao Tela

Windev Mobile Protecao Tela

//Desativar Bloqueio de Tela, protecao de tela, hibernar
import android.app.Activity;
import android.view.Window;
import android.view.WindowManager.LayoutParams;

public static void DesativarBloqueioTela(boolean keepScreenOn) {
    Activity xa = getCurrentActivity();
    Window xw = xa.getWindow();
    if (keepScreenOn == true) {
        xw.addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    } else {
        xw.clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }
}

Windev Mobile Sqlite

Windev Mobile Sqlite

import android.database.sqlite.*;
import android.content.Context;
import android.util.*;
import android.database.*;
public static String AtivarDesativarIntegridadeSQLite(String sTipo){
String DB_NAME = "O NOME DO SEU ARQUIVO.db";
String alterQuery = "";
SQLiteDatabase db;
try {
db = getContexteApplication().openOrCreateDatabase(DB_NAME, 0, null);
try {
if (sTipo.toLowerCase() == "desativar"){
db.execSQL("PRAGMA synchronous = OFF;");
db.rawQuery("PRAGMA journal_mode = OFF;",null);
}
else{
db.execSQL("PRAGMA synchronous = FULL;");
db.rawQuery("PRAGMA journal_mode = DELETE;",null);
}
db.close();
return "ok";
} catch(SQLException e) {
db.close();
return e.getMessage();
}
} catch (SQLException e) {
return e.getMessage();
}
}

// USANDO NA SUA APLICAÇÃO
IF InAndroidSimulatorMode() = False THEN 
sErro is string = AtivarDesativarIntegridadeSQLite("desativar")
IF sErro <> "ok" THEN 
Error(sErro)
EndProgram()
END
ELSE
        HExecuteSQLQuery(Query,Minhaconexao,hQueryWithoutCorrection,"PRAGMA synchronous = OFF;")
        HExecuteSQLQuery(Query,Minhaconexao,hQueryWithoutCorrection,"PRAGMA journal_mode = OFF;")
END
 
 

Windev Mobile Rede

Windev Mobile Rede

A função da Wlanguage InternetConnected permite verificar se uma conexão de Internet está ativa para o dispositivo móvel. Esta função é muito útil para testar a conexão com a internet antes de realizar qualquer processo que exija uma conexão com a rede mundial de computadores.
Esta função da Wlanguage realiza um teste de acesso ao servidor de DNS do Google.
Não há nenhuma porta específica a ser aberta. A função simplesmente verifica se é possível realizar um PING no servidor.


Windev Mobile Vpn

Windev Mobile Vpn


A função NetOpenRemoteAccess permite estabelecer uma conexão remota e especialmente uma conexão VPN.
A função NetCloseRemoteAccess permite fechar a conexão.
Por exemplo, para estabelecer uma conexão remota com um PC
// Inicia uma conexão de internet em um PC
// O nome da conexão usa o nome definido na conexão do Painel de controle.
Report is int NetOpenRemoteAccess("Connection_LiveBox")
IF 
Report 0 THEN
        ...
        NetCloseRemoteAccess()
ELSE
        Error("Error durante a conexão"NetMsgError(Report))
END
Para abrir uma conexão em um smartphone
// Abre uma conexão a partir de um  Smartphone
sConnectionName is string 
nCntReturn is int

// Nome da conexão é dado pelo provedor
sConnectionName "Bouygues Internet"

// Estabiliza a conexãon
nCntReturn NetOpenRemoteAccess(sConnectionName
IF 
nCntReturn 0 THEN// Processo requerido
// ...
NetCloseRemoteAccess(sConnectionName)
ELSE
Error("Erro durante a conexão:"NetMsgError(nCntReturn))
END
O retorno desta função é um inteiro com as seguintes características:
  • 0 (zero) se a conexão for bem sucedida;
  • De outra forma, ocorre um erro que pode ser especificado pela função NetMsgError.
  •  
  •  

Windevv Moblie Sd Card

Windevv Moblie Sd Card

As aplicações Android permitem armazenar dados de forma “embarcada” em arquivos SQLite ou HyperFileSQL.
Na fase de testes, geralmente utilizamos o emulador do SDL do Android, e é interessante copiar um banco de dados SQLite do PC para o SDCard do emulador.
Para fazer isto, usamos a seguinte metodologia:

  • Executamos o programa DDMS.bat que está na pasta tools do SDK do Android.
  • A aplicação “Dalvik Debug Monitor” é iniciada.
  • Selecione o menu “DEvice...File Explorer”,
  • Selecione o locar correspondente ao Sdcard: \mmt\scard\
  • Use o botão “+” para criar uma pasta
  • Utilize o botão “Push file onto device”  para selecionar um banco de dados SQLite do disco do PC (normalmente um arquivo com a extensão .db) e inicar a cópia para o SDCard do emulador.
A pasta criada no SDCard do emulador pode ser usadas por Aplicações com um código com o exemplo :
sDados is strting = SysDirStorageCard()  +["/"]+ "Minhapastadedados"
Se nenhum SDCard aparece no emulador, é possível adicionar usando o programa AVD Manager.exe  do SDK do Android.
Ao selecionar ou criar o SDCard no emulador, basta digitar o tamanho desejado para o SDCard e adicionar à propriedade "hardware" a propriedade " SD card support – yes".

Webdev Parametros

Webdev Parametros


Recentemente um dos nossos clientes relatou que, ao passar como parâmetro parra um formulário, uma coluna de uma tabela, na chamada do procedimento, no lado do formulário, logo após o Hreset(), o conteúdo do parâmetro era zerado, provavelmente porque, de acordo com a documentação da PCSOFT, este comando inicializa uma ou mais variáveis dos arquivos de dados, com seus valores default.  Estes valores default são definidos quando o arquivo de dados é descrito na Modelagem de Dados. O comado Hreset não modifica o registro no arquivo físico (arquivo de dados), ele apenas modifica os dados em memoria. Como o parâmetro está em memória, o Hreset, modifica-o e o seu conteúdo é perdido.  Para contornar esse problema, a coluna da tabela deve ser passada entre parêntesis. Desta forma, uma chamada para um form, passando como parâmetro uma coluna da tabela, seria semelhante a:
OPEN(Formulario,parametronormal,(parametro por conteúdo))
Fonte: Suporte PCSoft.
 
 

Webdev Json

Webdev Json

A função JSonExecute permite chamar uma URL que retorna um objeto JSON (JavaScript Object Notation). Esta função é executado na seção Browser do editor do Webdev. No entanto se o objeto é uma tabela de elementos, não podemos simplesmente declarar:
 
MeusContatos is dynamic object
 
Nesta caso, devemos usar a seguinte declaração:
 
pclMeuscontatos is dynamic object = new "Object"
//Execucao
pclMeuscontatos:tabResultat JSONExecute("URL")
//Percorre a tabela
FOR i = 1  TO Dimension(pclMeuscontatos:tabResultat)
ListAdd(LISTA_elementos,pclMeuscontatos:tabResultat[i]:nome + " " + pclMeuscontatos:tabResultat[i]:caracteristic)
END
 
 

WebDev Parametros Data

WebDev Parametros Data

Se você tiver um controle em uma janela que seja originado por um campo de data de um arquivo, este será apresentado como uma string ANSI. Desta forma se você tentar passasr este controle para um procedimento que espere uma data, o que ocasionará um erro.
Uma solução é usar o seguinte código:
Minhadata is Date = DocumentDate
INHEAD.PeriodCode = GetPeriodFromDate(Minhadata)
Isto faz com que o procedimento chamado use a data passada diretamente.

PROCEDURE GetPeriodFromDate(lcDate is Date)
MyReturnVal is int = -1
 HReadFirst(Finperiods,FinperiodsID)
WHILE NOT HOut(Finperiods)
IF Finperiods.PeriodStart <= lcDate AND Finperiods.PeriodEnd >= lcDate THEN
MyReturnVal = Finperiods.PeriodCode
BREAK
END
HReadNext(FinperiodsFinperiodsID)
END
RESULT MyReturnVal

WebDev Numeros Strings

WebDev Numeros Strings

O Windev trata todos os controles de tela como strings (inclusive as colunas de uma tabela)
por isso o comando:
Trace(NumToString(COL_HstInvHdrSysId,"012d"))
não funcionará satisfatoriamente. Nenhum erro será apresentado, mas também... nada acontecerá, isto porque isto não é um número. Então se COL_HstInvHdrSysId contém 123456 o resultado será "123456" .
Ao invés diso podemos escrever um código como:
nHstInvHdrSysId is int = COL_HstInvHdrSysId
Trace(NumToString(nHstInvHdrSysId,"012d"))
Agora o resultado será:
000000123456
Isto resolve alguns problemas com a formatação de valores em tabelas.

Webdev Enter por Tab

Webdev Enter por Tab

//Nas propriedades da página em Advanced:
<script language="javascript" type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function(e) {
 $('input').keydown( function(e) {
        var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
        if(key == 13) {
            e.preventDefault();
            var inputs = $(this).closest('form').find(':input:visible');
            inputs.eq( inputs.index(this)+ 1 ).focus();
        }
 
 

Teste

Teste
teste