quarta-feira, 17 de outubro de 2007

Clipboard: copie e cole !

Uma classe simples de utilizar no NetExpress é a classe Clipboard. Com ela, você pode ler ou gravar informações na área de transferência do Windows. A classe só permite a gravação e a leitura de sequências de caracteres.

Defina as classes que serão utilizadas:

class-control.
Clipboard is class "clipbrd"
CharacterArray is class "chararry"
.

Defina as variáveis da working-storage section:

77 umaString object reference value null.
77 wsTexto pic x(255) value spaces.

A classe Clipboard trabalha com objetos (instâncias) da classe CharacterArray. Portanto, para gravar dados na área de transferência precisamos criar uma instância dessa classe:

move z"Este é um texto de exemplo." to wsTexto
invoke CharacterArray "withValue" using wsTexto
returning umaString
invoke Clipboard "write" using umaString
invoke umaString "finalize" returning umaString

Nesse momento, se o desenvolvedor estiver utilizando um editor de textos ou qualquer outro programa que permita colagem de dados da área de transferência, vai notar que a sequência de caracteres "Este é um exemplo de texto" será mostrada.

Para ler dados da área de transferência, utilize os seguintes comandos:

invoke Clipboard "read" returning umaString
invoke umaString "getValue" returning wsTexto
invoke umaString "finalize" returning umaString

Note que o método "getValue" espera que a variável de retorno tenha tamanho suficiente para armazenar a informação. Caso contrário, ocorrerá problemas de memória.

Em um próximo "post", vou mostrar a utilização de API´s para trabalhar com outros formatos de dados na área de transferência.

2 comentários:

Fernando disse...

Olá Alex,
Tentei utilizar o mecanismo de copiar colar no NetExpress 3.1 mas estou recebendo a mensagem seguinte
==================================
load error : file 'clipbrd'
error code: 173, pc=0, call=1, seg=0
==================================
Fiz alguns stops no programa e vi que o erro eh exatamente na linha seguinte:
==================================
invoke Clipboard "write" using umaString.
==================================
Como devo proceder?
Agradeco sua atencao,

Fernando
fernandolordao@gmail.com

Fernando disse...

Olá Alex,

Consegui resolver o problema.
No próprio help do NetExpress, a descrição do erro 173, descreve que antes de invocar classes da API Gráfica, devemos utilizar o comando CALL "APIGUI" para carregar a DLL que contém as classes.
Portanto, a solução foi apenas incluir CALL "APIGUI" no início e CANCEL "APIGUI" no final.
Parabéns pelo Blog.

Fernando Lordão