4D v16.3

Arrastar e Soltar

Página Inicial

 
4D v16.3
Arrastar e Soltar

Arrastar e Soltar  


 

 

4D dispõe de funções integradas que lhe permitem arrastar e soltar objetos em seus formulários e aplicações. É possível arrastar e soltar um objeto sobre outro, localizado na mesma janela ou em outra. Em outras palavras, pode arrastar e soltar ao interior de um processo ou entre diferentes processos.

Igualmente pode arrastar e soltar objetos entre formulários 4D e outras aplicações e vice-versa. Por exemplo, é possível arrastar e soltar um arquivo de imagem GIF em um campo imagem 4D. Também é possível selecionar texto em uma aplicação de processamento de palavras e soltá-la em uma variável de texto 4D.

Finalmente, é possível soltar objetos diretamente na aplicação sem ter que necessariamente um formulário de fundo. Ou Método de banco de dados On Drop pode ser utilizado para administrar a ação de arrastar e soltar neste caso. Isto significa, por exemplo, que pode abrir um documento 4D Write soltando-o no ícone da aplicação 4D

Nota: como introdução, assumimos que uma ação arrastar e soltar “transporta” dados de um ponto a outro. Mais adiante, veremos que arrastar e soltar também pode ser uma metáfora para todo tipo de operação.

Para arrastar e soltar um objeto sobre outro objeto, deve selecionar a Propriedade arrastável para esse objeto na janela da Lista de propriedades. Em uma operação arrastar e soltar, o objeto que é arrastado é o objeto fonte.

Para fazer que um objeto seja soltável, ou seja, que o objeto possa ser o destino de uma operação de arrastar e soltar, deve selecionar a propriedade soltável para esse objeto na Lista de propriedades. Em uma operação arrastar e soltar, o objeto que recebe os dados é o objeto de destino.

Arrastar automático e Soltar automático:

Estas propriedades adicionais estão disponíveis para campos e variáveis de tipo texto, combo boxes e list boxes. A opção Soltar automático também está disponível para campos e variáveis tipo imagem. Podem ser utilizadas para ativar um modo arrastar e soltar automático baseado em copiar o conteúdo (a ação arrastar e soltar já  nos é administrada pelos eventos de formulário 4D). Por favor consulte o parágrafo "Arrastar e soltar automático" ao final desta seção.

Automaticamente os objetos criados recentemente não possuem nenhuma destas propriedades. É sua decisão selecionar estas propriedades.

Todos os objetos em um formulário de entrada, ou em um diálogo, podem ser definidos como arrastáveis e soltáveis. Os elementos individuais de um array (por exemplo, uma área de rolagem), os elementos de uma lista hierárquica ou as filas em uma list box podem ser arrastáveis e soltáveis. Pelo contrário, pode arrastar e soltar um objeto sobre um elemento individual de um array ou de uma lista hierárquica ou uma linha de um list box. Entretanto, não pode arrastar e soltar objetos da área de detalhe de um formulário de saída.

Igualmente pode administrar arrastar e soltar na aplicação, fora de todos os formulários, utilizando o Método de banco de dados On Drop.

Facilmente pode criar uma interface de usuário arrastar e soltar, porque 4D lhe permite utilizar todo tipo de objeto ativo (campo ou variável) como objetos fonte ou de destino. Por exemplo, pode arrastar e soltar um botão.

Notas:

  • Para arrastar um texto ou um botão que tenha a propriedade "arrastável," primeiro deve pressionar a tecla Alt (Windows) ou Opção (Mac OS).
  • Automaticamente, no caso de campos e variáveis de imagem, a imagem e sua referência sâo arrastados. Se só deseja arrastar a referência da variável ou campo, primeiro pressione a tecla Alt (Windows) ou Opção (Mac OS).
  • Quando em um objeto de tipo List box, as propriedades “Arrastável” e “Filas moveis” estão definidas simultaneamente, a propriedade “Filas moveis” tem prioridade quando uma fila é movida. Neste caso não é possível arrastá-lo.

Um objeto que é arrastável e soltável também pode ser soltável em si mesmo, a menos de que recuse a operação. Para mais detalhes, consulte os parágrafos seguintes.

A seguinte imagem mostra a janela da Lista de propriedades com as propriedades Arrastável e Soltável definidas para o objeto selecionado:

A gestão de arrastar e soltar por programação está baseada em três eventos de formulário: On Begin Drag Over, On Drag Over e On Drop.

Note que o evento On Begin Drag Over gera no contexto do objeto fonte de arrastar enquanto On Drag Over e On Drop são enviados ao objeto de destino unicamente.

Para que a aplicação processe estes eventos, devem ter sido selecionados de uma forma adequada na Lista de Propriedades:

O evento de formulário On Begin Drag Over é selecionável para todos os objetos de formulário que possam ser arrastados. É gerado em todos os casos onde o objeto tenha a propriedade Arrastável.

A diferença do evento de formulário On Drag Over, On Begin Drag Over é chamada dentro do contexto do objeto fonte da ação arrastar. Pode ser chamada desde o método do objeto fonte ou desde o método do formulário do objeto fonte.

Este evento é útil para a gestão avançada da ação arrastar. Pode ser utilizado para:

  • Obter os dados e as firmas presentes na área de transferência (pelo comando GET PASTEBOARD DATA).
  • Adicionar os dados e as assinaturas na área de transferência (pelo comando APPEND DATA TO PASTEBOARD)
  • Aceitar ou recusar ou arrastar através de $0 no método do objeto arrastado. Para indicar que a ação arrastar é aceita, o método do objeto fonte deve devolver 0 (zero); portanto deve executar $0:=0. Para indicar que as ações de arraste são recusadas, o método ou o objeto fonte deve devolver -1 (menos 1); você deve portanto executar $0:=-1. Se não retorna o resultado, 4D considera que o arrastar é aceito.

Os dados de 4D são colocados na área de transferências antes de chamar ao evento. Por exemplo, no caso de arrastar sem a ação Arrastar automático, o texto arrastado já está na área de transferências quando se chamar o evento.

O evento On Drag Over é enviado repetidamente ao objeto de destino quando o ponteiro do mouse é movido sobre o objeto. Em resposta a este evento, você geralmente:

  • Chama ao comando DRAG AND DROP PROPERTIES, o qual lhe informa sobre o objeto fonte.
  • Dependendo da natureza e tipo do objeto de destino (cujo método de objeto está sendo executado) e o objeto fonte, você aceita ou recusa o arrastar e soltar.

Para aceitar arrastar, o método do objeto de destino deve retornar 0 (zero), de maneira que você escreve $0:=0. Para recusar ou arrastar, o método de objeto deve retornar -1 (menos uno), de maneira que escreve $0:=-1. Durante um evento On Drag Over, 4D trata o método do objeto como uma função. Se não retorna nenhum resultado, 4D assume que se aceita arrastar.

Se aceitar o arrastar, o objeto de destino é ativa. Se o recusar, o objeto de destino permanece inativo. Aceitar o arrastar não significa que os dados arrastados sejam inseridos no objeto de destino. Só significa que se o botão do mouse foi liberado neste ponto, o objeto de destino aceitaria os dados arrastados.

Se não processa o evento On Drag Over para um objeto soltável, o objeto é ativado para todas as operações de arrastar, sem importar a natureza e tipo dos dados arrastados.

O evento On Drag Over lhe permite controlar a primeira fase de uma operação de arrastar e soltar. Não só pode provar se o tipo dos dados arrastados é compatível com o objeto de destino e depois aceitar ou recusar o arraste; pode simultaneamente notificar ao usuário dessa ocorrência, porque 4D ativa ou não o objeto de destino, em função de sua decisão.

O código que trata um evento On Drag Over deve ser curto e ser executado rapidamente, porque o evento é enviado repetidamente ao objeto atual de destino, devido aos movimentos do mouse.

Advertência: a partir da versão 11 de 4D, se o arrastar e soltar é um arrastar e soltar interprocesso, o qual significa que o objeto fonte está localizado em um processo (janela) diferente da do objeto de destino, o método do objeto de destino para um evento On Drag Over é executado no contexto do processo de destino. Para conhecer o valor dos elementos arrastados, deve utilizar os comandos de comunicação interprocesso. Geralmente é preferível nesse caso utilizar o evento On Begin Drag Over e os comandos do tema Área de Transferência (Pasteboard).

On Drop  

O evento On Drop é enviado ao objeto de destino (uma só vez) quando o cursor do mouse é liberado sobre o objeto. Este evento é a segunda fase da operação arrastar e soltar, na qual você realiza uma operação em resposta à ação do usuário.

Este evento não é enviado ao objeto se o arrastar não foi aceito durante os eventos On Drag Over. Se processar o evento On Drag Over para um objeto e recusa um arrastar, não ocorre o evento On Drop. Se durante o evento On Drag Over você provou a compatibilidade de tipos de dados entre os objetos fonte e destino e aceitou um possível soltar, não necessita provar novamente os dados durante On Drop. Você já sabe que os dados são compatíveis com o objeto de destino.

Um aspecto interessante da implementação de arrastar e soltar é que 4D lhe permite fazer o que você queira. Exemplos:

  • Se um elemento de uma lista hierárquica é solto sobre um campo de tipo texto, você pode inserir o texto do elemento da lista ao começo, ao final, ou na metade do campo de texto.
  • Seu formulário contém um botão de imagem de dois estados, o qual representa uma lata de lixo vazia ou cheia. Soltar um objeto sobre esse botão poderia significar (desde o ponto de vista de la interface do usuário) “suprimir o objeto que foi arrastado e soltado na canastra.” Aqui, arrastar e soltar não transporta dados de um ponto a outro; ao invés disso, realiza uma ação.
  • Arrastar um elemento de um array de uma janela flutuante a um objeto em um formulário poderia significar “mostrar nesta janela o registro do cliente cujo nome você acaba de arrastar e soltar desde a janela flutuante listando os clientes armazenados no banco de dados”.
  • Etc.

A interface de arrastar e soltar de 4D é um  framework que lhe permite a qualquer usuário implementar todas as metáforas de interface de usuário que você possa imaginar.

Os comandos DRAG AND DROP PROPERTIES retornam:

  • Um ponteiro até o objeto arrastado (campo ou variável)
  • O número de elemento, se o objeto arrastado é um elemento do Array ou um elemento de uma lista
  • O número do processo fonte.

O comando Drop position retorna o número ou a posição do elemento objetivo se o objeto de destino é um array (ou seja, uma área de rolagem) uma lista hierárquica, um texto o um combo box, além do número de coluna se o objeto é uma list box.

Os comandos como RESOLVE POINTER e Type são úteis para provar a natureza e o tipo de objeto fonte.

Quando a operação arrastar e soltar estiver destinada a copiar os dados arrastados, a funcionalidade desses comandos depende de quantos processos estén involucrados:

  • Se o arrastar e soltar está limitado a un processo, utilize estos comandos para realizar as ações correspondentes (ou seja, simplesmente atribuir o objeto fonte ao objeto de destino).
  • Se o arrastar e soltar é interprocesso, deve ter cuidado quando acessa aos dados arrastados; deve acessar a instância de dados do processo fonte. Se os dados arrastados vêm de uma variável, utilize GET PROCESS VARIABLE para obter o valor correto. Se os dados arrastados vêm de um campo, lembre que o registro atual de uma tabela provavelmente não é o mesmo para os dois processos, de maneira que deve acessar ao registro correto. Em geral é recomendado neste caso utilizar os comandos do tema e o evento On Begin Drag Over.
Se o arrastar e soltar não estiver destinado a mover dados, mas a criar metáforas de interface para uma operação em particular, você pode fazer todo o que queira.

Se as operações arrastar e soltar implicam o movimento de dados heterogêneos ou de documentos entre duas aplicações 4D ou uma aplicação 4D e uma terceira aplicação, os comandos do tema "Área de transferência" lhe oferecerão as ferramentas necessárias.

Realmente, estes comandos podem ser utilizados para administrar o copiar/colar e arrastar e soltar de dados. 4D utiliza duas áreas de transferências: uma para dados copiados (ou cortados), o qual é a área de transferência atual, e o outro para os dados que estão sendo arrastados e soltados. Essas duas áreas de transferências são administrados utilizando os mesmos comandos. Você acessa a uma ou a outra dependendo do contexto.

Para maior informação sobre a utilização dos comandos do tema "Área de transferência" para operações de arrastar e soltar, por favor consulte  .

As áreas de texto (campos, variáveis, combo boxes e list boxes) como também objetos de imagem permitem o arrastar e soltar automático, ou seja o movimento ou cópia de uma seleção de texto ou imagem de uma área a outra em um só clique. Pode ser utilizada na mesma área 4D, entre duas áreas 4D, ou entre 4D e outra aplicação, por exemplo WordPad.

Nota: no caso de arrastar e soltar automático entre duas áreas 4D, os dados são movidos, em outras palavras, são eliminados da área fonte. Se deseja copiar os dados, mantenha pressionado Ctrl (Windows) ou Opção (OS X) durante a ação (sob OS X, deve pressionar a tecla Opção logo de iniciar arrastar os elementos).

O arrastar e soltar automático pode ser configurado separadamente para cada objeto de um formulário através de de duas opções da Lista de propriedades: Arrastar automático e Soltar automático.


  • Arrastar automático: (objetos de tipo texto unicamente): quando esta opção estiver selecionada, o modo arrastar automático é ativado para o objeto. Este modo é prioritário para as imagens, inclusive se a opção Arrastável estiver selecionada. Neste modo, o evento de formulário On Begin Drag Over NÃO é gerado.Se deseja "forçar" a uilização de arrastar padrão, pressione a tecla Alt (Windows) ou Opção (OS X) durante a operação (sob OS X, deve pressionar a tecla Opção logo de iniciar arrastar os elementos).
    Esta opção não está disponível para imagens.
  • Soltar automático: Esta opção é utilizada para ativar o modo soltar automático. Neste modo, 4D maneja automaticamente, se possível, a inserção de dados arrastados de tipo texto ou imagem e soltados no objeto (os dados são colados no objeto). Os eventos de formulário On Drag Over e On Drop não são gerados neste caso.
    No caso de soltar dados diferentes de texto ou imagens (outro objeto 4D, arquivo, etc. ) ou dados complexos, a aplicação se refere ao valor da opção Soltável: se estiver selecionada, são gerados os eventos de formulário On Drag Over e On Drop; caso contrário, é recusado o soltar. Isto também depende do valor da opção "Proibido soltar dados que não provenham de 4D" (ver a continuação).

A partir da versão 11, 4D permite o arrastar e soltar de seleções, de objetos, ou de arquivos externos a 4D, como por exemplo os arquivos de imagens. Esta possibilidade deve ser compatível pelo código do banco.

Nos bancos convertidos de uma versão anterior de 4D, esta possibilidade pode levar ao malfuncionamento se o código existente não estiver adaptado. Por essa razão, uma opção nas Preferências pode ser utilizada para desativar esta função: Proibido soltar dados que não provenham de 4D.

Esta opção é encontrada na página Aplicação/Compatibilidade. Está selecionada automaticamente nos bancos convertidos.

Quando esta opção estiver selecionada, é recusada o soltar objetos externos em formulários 4D. Note entretanto que a inserção de objetos externos continua sendo possível em objetos que tenham a opção Soltar automático, quando a aplicação pode interpretar os dados soltados (texto ou imagem).



Ver também 

DRAG AND DROP PROPERTIES
Drop position
Form event
GET PROCESS VARIABLE
Is a list
RESOLVE POINTER
Type

 
PROPRIEDADES 

Produto: 4D
Tema: Arrastar e Soltar

 
HISTÓRIA 

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)