sábado, 9 de janeiro de 2016

A incrivel variável do tipo VARIANT e BUFFER - WinDev

http://forum.pcsoft.fr/fr-FR/pcsoft.br.windev/854-incrivel-variavel-tipo-variant-buffer-uma-das-solucoes/read.awp




http://wxinformatica.blogspot.com.br/

http://help.windev.com/en-US/?3013054&name=VariantConvert

http://doc.windev.com/en-US/?1514019


Posté le 08 janvier 2016 - 13:44
Prezados,

A linguagem WL é cheia de recursos, quando alguém fala que não dá, muitas vezes não conhece os por menores da Suíte PcSoft. E a cada dia fico impressionado o quando é poderosa e como pode simplificar a nossa vida de consultor, analista e desenvolvedor de sistemas. Hoje vou falar sobre a variável do tipo VARIANT E O TIPO BUFFER, ou seja, ela pode ser o que vc quiser, ela pode armazenar, textos, binários, NULL, retornos de httprequest com padrões de caracteres que acabam vindo com caracteres acentuados ou com caracteres diferentes da tabela ANSI ou UNICODE e gerando travamento.

A Variant tipo (Type da variável)
Em francês: Variant

A variante tipo é usado para:

armazenar qualquer simples value: boolean, numérico (moeda, de 8 bytes reais, assinado inteiro de 4 bytes), personagens e cadeia de caracteres, data (data, hora, DateTime e Duração).
loja chamada ou subscrito sub-elementos.
armazenar qualquer complexo valor: estruturas, classes, tipos avançados, matrizes, matrizes associativas, filas, pilhas e listas.
lidar com o valor NULL em WLanguage.
armazenar as interações com os objetos ActiveX e da programação Automation.

Exemplo

nValue é Variant = 10
nValue = EDT_ Edit1
nValue = Cliente. Nome


Sintaxe

Declarando e atribuindo um Variant tipo Esconder os detalhes
<Nome da variável> é Variant = <Value> OU <nome da variável> é Variant <nome da variável> = <Value>

<Nome da variável>:

Nome da variável a declarar.

<Valor>:

Valor que deve ser atribuído à variável. A Variant variável pode ser atribuído com:

qualquer valor literal,
o conteúdo de uma variável,
o conteúdo de um controle simples,
o conteúdo de um item.

Observações

Variant tipo e NULL
Para especificar que uma Variant variável não contém nenhum valor, use a constante NULL.

Notas:

para uma variante tipo, NULL significa "Não atribuído".
para um tipo numérico, NULL significa "igual a 0".

nVal é int
IF vVal = NULL THEN ... // o teste retorna True porque nVal = 0
nVal = 5
IF vVal = NULL THEN ... // o teste retorna False porque nVal = 5

vVal é Variant
IF vVal = NULL THEN ... // retorna True porque a variante não é atribuído
vVal = 0
SE vVal = NULL THEN ... // retorna False porque a variante é atribuído
// com um inteiro cujo valor é 0
vVal = 5
IF vVal = NULL THEN ... // retorna False porque a variante é atribuído
// com um inteiro cujo valor é 5

vVal é Variant
vVal = Null
IF vVal = 0 THEN ... // retorna True porque uma variável não atribuída
// e um valor não pode ser comparado, True é retornado por convenção


Tipo de uma variante
O tipo de uma variante é retornado por ..Type. ..Type É usado para descobrir o tipo do valor armazenado na variável.

Notas:

VariantConvert é usado para converter o tipo de valor armazenado numa variante variável.
TypeVar é usado para descobrir o tipo de uma variável (Variant tipo para um Variant variável).

v Val é Variante
TypeVar (v Val) // devolve o número da variante de tipo
v Val ..Type // retorna o tipo do valor armazenado na variante

..Class Propriedade sobre as variantes
..Class Nas variantes variáveis ​​é usado para encontrar o nome da classe utilizada se a variante corresponde a uma classe.

Sub-elementos nomeados
Você pode usar diretamente os membros sem qualquer declaração em uma Variant variável.

Ao atribuir um membro, se o membro não existe, ela é criada automaticamente; se o membro já existe, ele é modificado.

Exemplo:

Pessoa é Variant
pessoa. LastName = "MOORE"
Pessoa. FirstName = "Vince"


Ao ler um membro, se o membro não existe, não é criado. Você tem a capacidade de verificar a presença de um membro via ..Exist. Exemplo:

Pessoa é Variant
SE NÃO personn. Nome ..Exist ENTÃO
erro ("O nome não foi especificado")
END


Se o membro não existe, o valor retornado é nulo. No entanto, ..Value deve ser usado para verificar explicitamente o valor nulo.
Exemplo:

Elemento é Variant
IF elemento. MemberNotFound ..Value = NULL THEN
...
END


Os sub-elementos nomeados podem ser tratados pelas seguintes propriedades:

Existir Retorna:

Verdadeiro se o elemento existe,
False se o elemento não existe. O elemento não foi criado.

Nome Nome do elemento
Tipo Tipo de o elemento (mesmos valores que TypeVar).
Valor Valor do elemento.

..Member Nas Variant variáveis ​​é usado para obter a matriz de elementos nomeados. Esta matriz pode ser tratada por para cada um, o ..Occurrence propriedade, o operador [], ...

Sub-elementos subscritos
Você pode usar diretamente o Variant variável de tipo como uma matriz de variantes. Usando o operador [] cria automaticamente a matriz.

Exemplo:

Dias é Variant
dias [1] = "Segunda"
Dias [2] = "terça-feira"
Dias [3] = "quarta-feira"
Dias [4] = "Quinta-feira"
Dias [5] = "Friday"
Dias [6] = "Saturday
"Dias [7] =" Sunday "


As operações de matriz pode ser realizada diretamente na Variant variável: para cada um, ..Occurrence, [] operador, ...

Aninhando sub-elementos nomeados e subscritos
Os sub-elementos nomeados e sub-elementos subscritas sendo eles mesmos de Variant tipo, você pode recursivamente ninho eles.

Exemplo:

Biblioteca é Variant
biblioteca. Reserve [1]. Título = "Mrs Dalloway"
Biblioteca. Reserve [1]. Autor = "Virginia Woolf"
Biblioteca. Reserve [2]. Título = "Oliver Twist"
Biblioteca. Reserve [2]. Autor = "Charles Dickens"


Veja também VariantConvert:

http://help.windev.com/en-US/…

Em resumo Show de bola!!!!


O "BUFFER" (tipo de variável)

Visão geral
O BUFFER tipo corresponde a uma zona de memória binária.

Através deste tipo, um código que lida com o formato binário pode ser compartilhado entre um aplicativo WINDEV padrão e uma aplicação WINDEV Mobile.

Em WINDEV padrão, uma variável seqüência de caracteres podem conter caracteres e dados binários (uma imagem por exemplo).

Em WINDEV Móvel, se uma variável de seqüência de caracteres contém dados binários, estes dados podem ser corrompidos (conversão indevida por exemplo). Para lidar com dados binários, recomendamos que você use um buffer de variável.

O BUFFER tipo gere nenhum marcador fim específico e que permite que você armazene zeros binários.

Dois tipos de variáveis ​​estão disponíveis:

BUFFER: Este tipo permite que você gerencie uma zona de memória com um tamanho dinâmico: ele é automaticamente adaptado ao buffer de conteúdo.
BUFFER em: Este tipo é usado para lidar com uma zona de memória cujo tamanho (em bytes) é definido durante a compilação. Este é um tipo avançado usado para executar operações específicas na memória, para usar algumas APIs do Windows.

Por que eu deveria usar um BUFFER tipo?
Em WINDEV, o seguinte código pode ser usado para lidar com os bytes binários:

S é seqüência = Charact (1) + Charact (0)


A zona de memória correspondente é:


0 1

Este mesmo código executado em ANSI (padrão WINDEV) e Unicode (WINDEV Mobile) não tem o mesmo comportamento.

Para ter o mesmo código em ANSI e em Unicode, a seqüência de caracteres deve ser substituído por um BUFFER. O código torna-se:

S é BUFFER
S [[1]] = 1
S [[2]] = 0


O buffer Tipo: Sintaxe e uso

Declarando um BUFFER variável

<Nome da variável> é BUFFER

OU

<Nome da variável 1>, <Nome de Variável 2> são Buffers

Detalhes da sintaxe


<Nome da variável>: Nome da variável a declarar.

Notas:

A uma e uma palavras-chave são opcionais: eles fornecem uma melhor legibilidade.
Por padrão, um BUFFER variável está vazia.

Mybuffer é BUFFER

Declarar e inicializar um buffer variável
Para declarar e inicializar um buffer variável, Use a seguinte sintaxe:

<Nome da variável> é BUFFER = [<Hexa Valor 1>, <Hexa Valor 2>, ..., <Valor Hexa N>]

Detalhes da sintaxe


<Nome da variável>:Nome da variável a declarar.
Hexa ValueValor hexadecimal
Exemplo:

b é BUFFER = [0x01, 0x02, 0x03]

Operações nos buffers
Os tampões podem ser tratadas como as cadeias de caractères.

Para atribuir um BUFFER, Use uma das seguintes sintaxes:

a atribuição de um buffer de string: <Nome do BUFFER variável> = <My String>. Por exemplo:

[code:wl]
Mybuffer é BUFFER
mybuffer = "WINDEV é grande"
// Em ANSI, o BUFFER contém: WINDEV é fantástico
// Em Unicode, o BUFFER contém:
// W0i0n0D0e0v0 080 0i0s0 0g0r0r0e0a0t0


a atribuição de um buffer de bytes: <Nome do BUFFER variável> [[<Byte Subscrito>]] = <código ASCII de Byte>. Por exemplo:

Mybuffer é BUFFER
mybuffer [[1]] = 65 // mybuffer contém "A"


Usando funções:

Esquerda, Direita e Oriente pode ser usado nos buffers. Veja a ajuda sobre estas funções para obter mais detalhes.
Tamanho é utilizada para descobrir o tamanho real dos dados contidos no BUFFER (em bytes).

Usando os operadores:

O operador [[]] é usado para acessar:

um byte DO BUFFER. Por exemplo:

Mybuffer é BUFFER
mybuffer = "WINDEV é grande"
mybuffer [[1]] = "W"

uma secção DO BUFFER. Por exemplo:

Mybuffer é BUFFER
mybuffer = "WINDEV é grande"
Informações (mybuffer [[8 PARA 15]])



O BUFFER On tipo: Sintaxe e uso avançado

Declarando um BUFFER Na variável

<Nome da variável> é BUFFER Em <Buffer de Tamanho>
OU
<Nome da variável 1>, <Nome de Variável 2> são amortecedores Em <tamanho dos buffers>

Detalhes da sintaxe


<Nome da variável>: Nome da variável a declarar.
<Buffer de tamanho>: Tamanho do BUFFER de bytes

Notas:

A uma e uma palavras-chave são opcionais: eles fornecem uma melhor legibilidade.
Por padrão, um BUFFER na variável é preenchido com o caractere 0.

Mybuffer é BUFFER em 4
mybuffer = "ABCDE" // mybuffer contém "ABCD"
mybuffer = "ZZ" // mybuffer contém "ZZCD"



Manipulação dos buffers fixos
Os buffers fixos são tratados como os buffers simples. No entanto, deve ser tido em conta algumas diferenças.

Em tempo de execução, o tamanho real dos dados encontrados no BUFFER não é conhecido:

Quando a gravação de dados que é maior do que o BUFFER de tamanho, os dados são truncados para o tamanho da memória intermédia.
Quando a gravação de dados que é mais pequeno do que o BUFFER de tamanho, a secção do BUFFER não afectada pela operação de escrita mantém o seu valor anterior.

Para lidar com este tipo de BUFFER, recomendamos que você armazenar o tamanho real do BUFFER em uma variável Integer.

Lembrete: o BUFFER tipo gerencia automaticamente o seu próprio tamanho. Ao usar um fixo BUFFER, aconselhamo-lo a copiar rapidamente o seu valor em um automático de buffer.

// Use uma API que retorna o tamanho de um BUFFER
bFixedBuffer é BUFFER em 200
nSize é int
// Chamar o API
nSize = API (<API Name>, <Parâmetros>, bFixedBuffer, 200)
// Copie o BUFFER
bBuffer é BUFFER
bBuffer = Esquerda (bFixedBuffer, nSize)


Bom espero ter ajudado com esse novo post alguém e mostrado o quanto é poderosa a WL.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/































Nenhum comentário:

Postar um comentário

Teste

Teste
teste