Este é o site histórico da documentação 4D. As documentações estão sendo movidas progressivamente para developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
Form event code
|
Form event code -> Resultado | ||||||||
Parâmetro | Tipo | Descrição | ||||||
Resultado | Inteiro longo |
![]() |
Número do evento do formulário | |||||
Form event code era chamado Form event em versões anteriores de 4D. Foi renomeado para maior claridade quando o comando FORM Event, que retorna um objeto, foi adicionado.
Form event code retorna um valor númerico que identifica o tipo de evento de formulário que acaba de ocorrer. Geralmente, Form event code são utilizados em um método formulário ou em um método objeto.
4D oferece constantes predefinidas (localizadas no tema Form event) para comparar os valores retornados pelo comando Form event code.
Certos eventos são genéricos (gerados por todo tipo de objeto) e outros são específicos a um tipo de objeto particular.
Constante | Tipo | Valor | Comentário |
On Load | Inteiro longo | 1 | O formulário está prestes a ser exibido ou impresso |
On Mouse Up | Inteiro longo | 2 | (Apenas imagens) O usuário acabou de soltar o boto esquerdo do mouse em um objeto Imagem |
On Validate | Inteiro longo | 3 | A entrada de dados foi validada |
On Clicked | Inteiro longo | 4 | Ocorre um clique sobre um objeto |
On Header | Inteiro longo | 5 | O cabeçalho do formulário está prestes a ser impresso ou exibido |
On Printing Break | Inteiro longo | 6 | Uma das áreas de quebra do formulário está prestes a ser impressa |
On Printing Footer | Inteiro longo | 7 | A área do rodapé do formulário está prestes a ser impressa |
On Display Detail | Inteiro longo | 8 | Um registro está prestes a ser mostrado na lista |
On VP Ready | Inteiro longo | 9 | (apenas em áreas 4D View Pro) O carregamento da área 4D View Pro está completo |
On Outside Call | Inteiro longo | 10 | O formulário recebe um chamado POST OUTSIDE CALL |
On Activate | Inteiro longo | 11 | A janela de formulário vira a janela atual. |
On Deactivate | Inteiro longo | 12 | A janela do formulário deixa de ser a janela atual |
On Double Clicked | Inteiro longo | 13 | Ocorreu clique duas vezes num objeto |
On Losing Focus | Inteiro longo | 14 | Um objeto do formulário está perdendo o foco |
On Getting Focus | Inteiro longo | 15 | Um objeto do formulário tem o foco |
On Drop | Inteiro longo | 16 | Os dados foram liberados no objeto |
On Before Keystroke | Inteiro longo | 17 | Um caractere está prestes a entrar no objeto que tem o foco. Get edited text retorna o texto de objeto sem o caractere. |
On Menu Selected | Inteiro longo | 18 | Um comando do menu foi selecionado |
On Plug in Area | Inteiro longo | 19 | Um objeto externo solicitou que fosse executado o seu método de objeto |
On Data Change | Inteiro longo | 20 | Os dados do objeto foram modificados |
On Drag Over | Inteiro longo | 21 | Os dados podem ser liberados num objeto |
On Close Box | Inteiro longo | 22 | Um clique ocorreu na caixa de fechar a janela. |
On Printing Detail | Inteiro longo | 23 | A área de detalhe do formulário está prestes a ser impressa |
On Unload | Inteiro longo | 24 | O formulário está prestes a ser fechado e liberado |
On Open Detail | Inteiro longo | 25 | O formulário detalhado associado com o formulário de saída ou com o listbox está aponto de ser aberto |
On Close Detail | Inteiro longo | 26 | O formulário de entrada é fechado e regressa ao formulário de saída |
On Timer | Inteiro longo | 27 | O número de tiques definido pelo comando SET TIMER passou |
On After Keystroke | Inteiro longo | 28 | Um caractere que vai ser inserido no objeto que tem o foco. Get edited text retorna o texto do objeto, incluindo esse caractere |
On Resize | Inteiro longo | 29 | A janela do formulário é redimensionada ou o objeto subformulário é redimensionado (neste caso o evento é gerado no método formulário do subformulário) |
On After Sort | Inteiro longo | 30 | (List box only) Uma ordenação padrão foi realizada em uma list box coluna |
On Selection Change | Inteiro longo | 31 |
|
On Column Moved | Inteiro longo | 32 | (List box apenas) O usuário move uma coluna de list box com arrastar e soltar. |
On Column Resize | Inteiro longo | 33 | (List box apenas) A largura de uma coluna de list box é modificado por um usuário com o mouse |
On Row Moved | Inteiro longo | 34 | (Somente List Box) O usuário move uma fileira de uma list box usando arrastar e soltar |
On Mouse Enter | Inteiro longo | 35 | O ponteiro do mouse ingressa à área gráfica de um objeto |
On Mouse Leave | Inteiro longo | 36 | O ponteiro do mouse sai da área gráfica de um objeto |
On Mouse Move | Inteiro longo | 37 | O ponteiro do mouse se move (pelo menos um pixel). Ou quando se pressiona uma tecla de modificação (Ctrl, Alt, Caps Lock). Se o evento está selecionado para um objeto unicamente, é gerado só quando o cursor se encontra dentro da área gráfica do objeto |
On Alternative Click | Inteiro longo | 38 |
|
On Long Click | Inteiro longo | 39 | (Somente botões 3D) Um botão 3D é clicado e o botão do mouse permanece pressionado por um instante |
On Load Record | Inteiro longo | 40 | No modo de entrada em lista, enquanto é modificado, um registro é carregado (o usuário clica numa linha do registro e um campo passa ao modo de edição) |
On Before Data Entry | Inteiro longo | 41 | (List box only) Uma célula de list box está prestes a mudar para modo editar |
On Header Click | Inteiro longo | 42 | (Somente list box) Ocorre um clique num cabeçalho de coluna do list box |
On Expand | Inteiro longo | 43 | (Somente listas hierarquicas ) Um elemento da lista hierarquica foi expandido fazendo clique ou utilizando uma tecla |
On Collapse | Inteiro longo | 44 | (Listas hierárquicas apenas) Um elemento da lista hierárquica foi contraído através de um clique ou uma tecla. |
On After Edit | Inteiro longo | 45 | Os conteúdos do objeto editável que tem o foco foram modificados. |
On Begin Drag Over | Inteiro longo | 46 | Um objeto está sendo arrastado |
On Begin URL Loading | Inteiro longo | 47 | (apenas Web areas) Uma nova área URL é carrega na área WEb |
On URL Resource Loading | Inteiro longo | 48 | (Somente áreas web) Um novo recurso é carregado na área web |
On End URL Loading | Inteiro longo | 49 | (Somente áreas web) Todos os recursos da URL foram carregados |
On URL Loading Error | Inteiro longo | 50 | (Somente áreas web) Ocorreu um erro quando a URL estava sendo carregada |
On URL Filtering | Inteiro longo | 51 | (Somente áreas web) Uma URL foi bloqueada pela área web |
On Open External Link | Inteiro longo | 52 | (Somente áreas web) Foi aberta uma URL externa no navegador |
On Window Opening Denied | Inteiro longo | 53 | Uma janela pop-up foi bloqueada |
On bound variable change | Inteiro longo | 54 | A variável relacionada a um subformulário é modificada. |
On Page Change | Inteiro longo | 56 | A página atual do formulário foi mudada |
On Footer Click | Inteiro longo | 57 | (Somente List box) um clique ocorreu no pé de uma list box ou coluna de list box |
On Delete Action | Inteiro longo | 58 | (Listas hierárquicas e List box somente) O usuário é solicitado a remover um item |
On Scroll | Inteiro longo | 59 | O usuário desloca o conteúdo de um campo ou de uma variável imagem utilzando o mouse ou uma tecla. |
On Row Resize | Inteiro longo | 60 | (Apenas em 4D View Pro) A altura da linha é modificada por um usuário com o mouse |
On VP Range Changed | Inteiro longo | 61 | O intervalo de células 4D View Pro mudou (por exemplo, o cálculo de uma fórmula, o valor eliminado de uma célula, etc.) |
Nota: os eventos específicos de formulários de saída não podem utilizar-se em formularios projeto. Estes são: On Display Detail, On Open Detail, On Close Detail, On Load Record, On Header, On Printing Detail, On Printing Break, On Printing Footer.
Quando ocorre um evento de formulário, 4D efetua as seguintes ações:
Primeiro, examina os objetos do formulário e chama o método de objeto para qualquer objeto (envolvido no evento) cuja propriedade de evento de objeto correspondente tenha sido selecionada.
Segundo, chama o método de formulário se a propriedade do evento de formulário correspondente foi selecionada.
Não assuma que os métodos de objeto, se houver, serão chamados numa ordem particular. A regra é que os métodos de objeto sempre são chamados antes do que os métodos de formulário. Se um objeto é um subformulário, primeiro são chamados os métodos de objeto do formulário de saída do subformulário e depois o método de formulário do formulário de saída. 4D continua depois chamando aos métodos do formulário pai. Em outras palavras, quando um objeto está num subformulário, 4D utiliza a mesma regra para os métodos de objeto e formulário em subformulários.
Com excepção dos eventos On Load e On Unload, se a propriedade de evento de formulário não estiver selecionada para um determinado evento, isto não impede que ocorram as chamadas aos métodos de objeto para os objetos cuja propriedade de evento estiver selecionada. Em outras palavras, a ativação ou desativação de um evento no nível do formulário não tem efeito nas propriedades do evento do objeto.
O número de objetos envolvidos num evento, depende da natureza do evento:
Evento On Load - os métodos de objeto de todos os objetos do formulário (de todas as páginas) que tenham selecionada a propriedade de evento On Load serão chamados. Então, se a propriedade do evento On Load for selecionada, o método de formulário será chamado.
Eventos On Activate ou On Resize - nenhum método de objeto será chamado porque este evento aplica ao formulário como um todo e não como um objeto em particular. Portanto, se o evento de formulário On Activate estiver selecionado, somente será chamado o método do formulário.
Evento On Timer - este evento é gerado somente se o método de formulário contém uma chamada anterior para o comando SET TIMER. Se a propriedade de evento de formulário On Timer, somente o método de formulário receberá o evento, não se chamará ao método de formulário.
Evento On Drag Over, - somente será chamado o método do objeto soltável envolvido no evento (se a propriedade de evento "soltável" estiver selecionada para o objeto). Não se chamará o método do formulário.
Pelo contrário, para o evento On Begin Drag over,, se chamará o método do objeto ou o método do formulário do objeto arrastado (se a propriedade do evento "Arrastável" estiver selecionada para o objeto).
AVISO: Ao contrário de outros eventos, durante um evento On Begin Drag over, o método chamado é executado no contexto do processo de arrastar e soltar do objeto fonte, não no contexto do processo de arrastar e soltar o objeto de destino. Para maior informação, consulte a seção Arrastar e Soltar
Se os eventosOn Mouse Enter, On Mouse Move e On Mouse Leave foram selecionados para o formulário, são gerados para cada objeto do formulário. Se estiverem selecionados para um objeto, são gerados somente para o objeto. No caso de superposição de objetos, o evento é gerado pelo primeiro objeto capaz de gerenciá-lo que se encontre do nível superior ao mais baixo. Os objetos que se fizeram invisíveis utilizando o comando OBJECT SET VISIBLE não geram estes eventos. Durante a entrada de dados, outros objetos podem receber este tipo de eventos dependendo da posição do mouse.
Note que o evento On Mouse Move é gerado quando o cursor do mouse se mexe mas também quando o usuário pressiona uma tecla de modificação como Maiús, Caps Lock, Ctrl ou Opção (isto permite manipular as operações de arrastar e soltar de tipo copia o deslocamento).
Registros em lista: a sequência de chamadas a métodos e eventos de formulários nos formulários listados exibidos viaDISPLAY SELECTION / MODIFY SELECTION e os subformularios é a seguinte:
Para cada objeto da área de cabeçalho: |
Método objeto com evento On Header |
Método formulário com evento On Header |
Para cada registro: |
Para cada objeto na área de detalhe: |
Método de objeto com evento On Display Detail |
Método de formulário com evento On Display Detail |
Evento | Métodos de objeto | Método de formulario | Que objetos |
On Load | Sim | Sim | Todos |
On Unload | Sim | Sim | Todos |
On Validate | Sim | Sim | Todos |
On Clicked | Sim (se clicável ou editável) (*) | Sim | Apenas o objeto implicado |
On Double Clicked | Sim (se clicável ou editável) (*) | Sim | Apenas o objeto implicado |
On Before Keystroke | Sim (se editável) (*) | Sim | Apenas o objeto implicado |
On After Keystroke | Sim (se editável) (*) | Sim | Apenas o objeto implicado |
On After Edit | Sim (se editável) (*) | Sim | Apenas o objeto implicado |
On Getting Focus | Sim (se tabulável) (*) | Sim | Apenas o objeto implicado |
On Losing Focus | Sim (se tabulável) (*) | Sim | Apenas o objeto implicado |
On Activate | Nunca | Sim | Nenhum |
On Deactivate | Nunca | Sim | Nenhum |
On Outside Call | Nunca | Sim | Nenhum |
On Page Change | Never | Yes | Nenhum |
On Begin drag over | Sim (se arrastável) (**) | Sim | Apenas o objeto implicado |
On Drop | Sim (se soltável) (**) | Sim | Apenas o objeto implicado |
On Drag Over | Sim (se soltável) (**) | Nunca | Apenas o objeto implicado |
On Mouse Enter | Sim | Sim | Todos |
On Mouse Move | Sim | Sim | Todos |
On Mouse Leave | Sim | Sim | Todos |
On Mouse Up | Yes | Never | Involved object only |
On Menu Selected | Nunca | Sim | Nenhum |
On bound variable change | Nunca | Sim | Nenhum |
On Data Change | Sim (se modificável) (*) | Sim | Apenas o objeto implicado |
On Plug in Area | Sim | Sim | Apenas o objeto implicado |
On Header | Sim | Sim | Todos |
On Printing Detail | Sim | Sim | Todos |
On Printing Break | Sim | Sim | Todos |
On Printing Footer | Sim | Sim | Todos |
On Close Box | Nunca | Sim | Nenhum |
On Display Detail | Sim | Sim | Todos |
On Open Detail | Não, exceto para List boxes | Sim | Nenhum exceto List box |
On Close Detail | Não, exceto para List boxes | Sim | Nenhum exceto List box |
On Resize | Nunca | Sim | Nenhum |
On Selection Change | Sim (***) | Sim | Só o objeto implicado |
On Load Record | Nunca | Sim | Nenhum |
On Timer | Nunca | Sim | Nenhum |
On Scroll | Sí | Nunca | Apenas o objeto implicado |
On Picture Scroll | Sim | Sim | Apenas o objeto implicado |
On Before Data Entry | Sim (List box) | Nunca | Apenas o objeto implicado |
On Column Moved | Sim (List box) | Nunca | Apenas o objeto implicado |
On Row Moved | Sim (List box) | Nunca | Apenas o objeto implicado |
On Column Resize | Sim (List box) | Nunca | Apenas o objeto implicado |
On Header Click | Sim (List box) | Nunca | Apenas o objeto implicado |
On Footer Click | Yes (List box) | Never | Apenas o objeto implicado |
On After Sort | Sim (List box) | Nunca | Apenas o objeto implicado |
On Long Click | Sim (Botón 3D) | Sim | Apenas o objeto implicado |
On Alternative Click | Sim (Botón 3D y list box) | Nunca | Apenas o objeto implicado |
On Expand | Sim (Lista jerárq.) | Nunca | Apenas o objeto implicado |
On Collapse | Sim (Lista jerárq.) | Nunca | Apenas o objeto implicado |
On Delete Action | Yes (Hier. list and list box) | Never | Apenas o objeto implicado |
On URL Resource Loading | Yes (Web Area) | Never | Apenas o objeto implicado |
On Begin URL Loading | Yes (Web Area) | Never | Apenas o objeto implicado |
On URL Loading Error | Yes (Web Area) | Never | Apenas o objeto implicado |
On URL Filtering | Yes (Web Area) | Never | Apenas o objeto implicado |
On End URL Loading | Yes (Web Area) | Never | Apenas o objeto implicado |
On Open External Link | Yes (Web Area) | Never | Apenas o objeto implicado |
On Window Opening Denied | Yes (Web Area) | Never | Apenas o objeto implicado |
On VP Ready | Yes (4D View Pro Area) | Never | Apenas o objeto implicado |
On Row Resize | Yes (4D View Pro Area) | Never | Apenas o objeto implicado |
Um método de objeto é chamado se o evento pode realmente ocorrer para o objeto, dependendo de sua natureza e propriedades. A seguinte seção detalha os eventos que você fará uso geralmente para lidar com os diferentes tipos de objetos.
Lembre que a Lista de propriedades do editor de formulários somente mostra os eventos compatíveis com o objeto selecionado ou o formulário.
Os objetos clicáveis são gerenciáveis principalmente com o mouse. São os seguintes:
Para todos esses objetos, o evento On Clicked ocorre uma vez o botão do mouse seja liberado. No entanto, existem várias exceções:
No contexto do evento On Clicked, você pode testar o número de cliques feitos pelo usuário utilizando o comando Clickcount.
Nota: Alguns destes objetos pode ser ativados com o teclado. Por exemplo, uma vez que uma caixa de seleção receber o foco, pode ser selecionada usando a barra de espaço. Neste caso, é gerado um evento On Clicked.
Aviso: os combo boxes não são considerados objetos clicáveis. Um combo box deve ser tratado como uma área de texto editável cuja lista suspensa associada fornece valores padrão. Portanto, você pode lidar com a entrada de dados em um combo box com a ajuda de eventos On Before Keystroke, On After Keystroke e On Data Change.
Os objetos editáveis por teclado são objetos nos quais você introduz dados utilizando o teclado e para os quais pode filtrar os dados de entrada ao menor nível detectando os eventos On After Edit, On Before Keystroke, On After Keystroke e On Selection Change.
Os objetos e tipos de dados editáveis são os seguintes:
Nota: A partir de 4D v14, os campos e variáveis editáveis que contém texto (tipo texto, data, hora ou número) também geram os eventos On Clicked e On Double Clicked.
Nota: Mesmo sendo objetos “editáveis”, as listas hierárquicas não dirigem os eventos formulário On After Edit, On Before Keystroke e On After Keystroke (Veja também o parágrafo “Listas hierárquicas” a seguir).
Nota: o evento On After Keystroke pode geralmente ser substituído pelo evento On After Edit (veja a seguir).
Assim que os eventos On Before Keystroke e On After Keystroke tenham sido selecionados para um objeto, pode detectar e gerenciar as pulsações de teclas no objeto, fazendo uso do comando Form event code que retornará On Before Keystroke e depois On After Keystroke (para maior informação, consulte a descrição do comando Get edited text). Estes eventos também são ativados por comandos de linguagem que simulam a ação do usuário, tais como POST KEY.
Lembre que as modificações do usuário que não são realizadas fazendo uso do teclado (colar, arrastar-soltar, etc.) não são tidas em conta. A fim de processar estes eventos, deverá utilizar On After Edit.
Nota: Os eventos On Before Keystroke e On After Keystroke não são gerados durante a utilização de um método de entrada. Um método de entrada (ou IME, Input Method Editor) é um programa ou um componente sistema que pode ser utilizado para introduzir caracteres complexos ou símbolos (por exemplo, chineses ou japoneses) utilizando um teclado ocidental.
Os objetos modificáveis tem uma fonte de dados cujos valores podem ser modificados utilizando o mouse ou o teclado; não são considerados verdadeiramente como controles de interface de usuário controlados através do evento On Clicked. Estes objetos são os seguintes:
Estes objetos recebem eventos On Data Change. Quando o evento On Data Change estiver selecionado para um destes objetos, você pode detectar e gerenciar a mudança dos valores da fonte de dados, utilizando o comando Form event code que retornará On Data Change. O evento é gerado assim que a variável associada com o objeto seja atualizada internamente por 4D (geralmente, quando a área de entrada do objeto perde o foco).
Os objetos tabuláveis obtém o foco quando utiliza a tecla Tab para chegar a eles e/ou quando faz clique neles. O objeto que tem o foco recebe os caracteres (digitados no teclado) que não são modificadores de um comando de menu ou de um objeto como um botão.
Todos os objetos são tabuláveis, COM EXCEPÇÃO dos seguintes:
Quando os eventos On Getting Focus e/ou On losing Focus são selecionados para um objeto tabulável, você pode detectar e gerenciar a mudança de foco, fazendo uso do comando Form event code que retornará On Getting Focus ou On losing Focus, dependendo do caso.
Os botões 3D permitem estabelecer interfaces gráficas avançadas (para uma descrição dos botões 3D, consulte o Manual de Desenho). Além dos eventos genéricos, dois eventos específicos podem ser utilizados para gerenciar estes botões:
Este evento é utilizado geralmente para mostrar menus suspensos no caso de cliques longos nos botões. O evento On Clicked, se estiver selecionado, será gerado se o usuário liberar o botão do mouse antes do tempo limite do “clique longo”.
- Se o menu suspenso for do tipo “separado,” o evento somente é gerado quando um clique ocorre na parte do botão com a seta.
- Se o menu suspenso for do tipo “ligado,” o evento é gerado quando ocorre um clique em qualquer parte do botão. Por favor tenha em conta que o evento On Long Click não pode ser gerado com este tipo de botão.
Os estilos de botões 3D, botões de opção 3D e caixas de seleção 3D que aceitam a propriedade “Com menu suspenso” são: Nenhum, Botão de barra, Bevel, Bevel arredondado e Office XP.
Vários eventos de formulário podem ser utilizados para gerenciar as diferentes características específicas dos list box:
Além dos eventos genéricos, vários eventos específicos podem ser utilizados para administrar as ações que os usuários nas listas hierárquicas:
Estos eventos no son mutuamente exclusivos. Pueden generarse uno después del otro para una lista jerárquica:
- En respuesta a presionar una tecla (en orden):
Evento | Contexto | |
On Data Change | Un elemento estaba en edición | |
On Expand/On Collapse | Apertura/cierre de una sublista utilizando las teclas de flechas -> o <- | |
On Selection Change | Selección de un nuevo elemento | |
On Clicked | Activación de la lista utilizando el teclado |
Evento | Contexto | |
On Data Change | Un elemento estaba en edición | |
On Expand/On Collapse | Apertura/cierre de una sublista utilizando los iconos de despliegue/contracción o | |
Doble-clic en una sublista no editable | ||
On Selection Change | Selección de un nuevo elemento | |
On Clicked / On Double Clicked | Activación de la lista por un clic o un doble clic |
Um objeto de conteúdo do sub-formulário (objeto incluído no formulário pai contém uma instância do sub-formulário) suporta os seguintes eventos:
Nota: É possível definir todos os tipos de eventos personalizados que podem ocorrer em um sub-formulário através do comando CALL SUBFORM CONTAINER. Este comando lhe permite chamar o método do objeto de recipiente e passar um código de evento.
Os eventos abaixo também são recebidos no método formulário do subformulário:
Existem sete eventos para formulários especificamente disponíveis para as zonas de web:
Os eventos abaixo estão disponíveis para áreas 4D View Pro.
Para saber mais sobre estes eventos, veja a seção Evento formulário On VP Ready.
Este exemplo mostra o evento On Validate utilizado para atribuir automaticamente (a um campo) a fecha quando o registro é modificado:
//Método de formulário
Case of
// ...
:(Form event code=On Validate)
[aTable]Last Modified On:=Current date
End case
Neste exemplo, a gestão completa de um menú drop-down, (inicialização, clics do usuário, e liberação de objeto) está encapsulado no método de objeto:
//asBurgerSize Método objeto lista Drop-down
Case of
:(Form event code=On Load)
ARRAY TEXT(asBurgerSize;3)
asBurgerSize{1}:="Small"
asBurgerSize{1}:="Medium"
asBurgerSize{1}:="Large"
:(Form event code=On Clicked)
If(asBurgerSize#0)
ALERT("Você escolheu um"+asBurgerSize{asBurgerSize}+" hamburguer.")
End if
:(Form event code=On Unload)
CLEAR VARIABLE(asBurgerSize)
End case
Este exemplo mostra como aceitar e administrar uma operação de arrastar e soltar para um objeto de campo que aceita somente valores de imagens, em um método de objeto.
//[aTable]aPicture Método de objeto campo imagem editável
Case of
:(Form event code=On Drag Over)
//Uma operação arrastar e soltar foi inicada e o mouse está atualmente sobre o campo
//Obtém a informação sobre o objeto fonte
DRAG AND DROP PROPERTIES($vpSrcObject;$vlSrcElement;$lSrcProcess)
//Note que não é preciso testar o número ID do processo fonte
//para que o método objeto seja executado, já que é o mesmo processo
$vlDataType:=Type($vpSrcObject->)
//a fonte de dados é uma imagem? (campo, variável ou array)?
If(($vlDataType=Is picture)|($vlDataType=Picture array))
//se sim, aceitar o arrastar.
$0:=0
Else
//Se não, recusar arrastar
$0:=-1
End if
:(Form event code=On Drop)
//A fonte de dados foi solta no objeto, portanto é preciso copiá-la
//no objeto
//Obtém a informação sobre o objeto fonte
DRAG AND DROP PROPERTIES($vpSrcObject;$vlSrcElement;$lSrcProcess)
$vlDataType:=Type($vpSrcObject->)
Case of
//O objeto fonte é um campo ou variável Imagem
:($vlDataType=Is picture)
//O objeto fonte é do mesmo processo? (E assim da mesma janela ou formulário?)
If($lSrcProcess=Current process)
//Se sim, apenas copie o valor fonte
[aTable]aPicture:=$vpSrcObject->
Else
//Se não, o objeto fonte é uma variável?
If(Is a variable($vpSrcObject))
//Se sim, obtém o valor do processo fonte
GET PROCESS VARIABLE($lSrcProcess;$vpSrcObject->;$vgDraggedPict)
[aTable]aPicture:=$vgDraggedPict
Else
//Se não, use CALL PROCESS para obter o valor campo para processo fonte
End if
End if
//O objeto fonte é um array de imagens
:($vlDataType=Picture array)
//O objeto fonte é do mesmo processo? (Portanto da mesma janela e formulário)?
If($lSrcProcess=Current process)
//Se sim, apenas copie o valor fonte
[aTable]aPicture:=$vpSrcObject->{$vlSrcElement}
Else
//Se não, obtenha o valor do processo fonte
GET PROCESS VARIABLE($lSrcProcess;$vpSrcObject->{$vlSrcElement};$vgDraggedPict)
[aTable]aPicture:=$vgDraggedPict
End if
End case
End case
Nota: Para outros exemplos mostrando como gerenciar eventos On Drag Over e On Drop, veja os exemplos do comando _o_DRAG AND DROP PROPERTIES.
Este exemplo é um modelo para um método do formulário. Mostra cada um dos eventos possíveis que podem ocorrer quando um relatório usa um formulário como formulário de saída:
//Método de um formulário sendo usado como formulário output para um relatório resumo
$vpFormTable:=Current form table
Case of
//...
:(Form event code=On Header)
//Uma área cabeçalho vai ser impressa
Case of
:(Before selection($vpFormTable->))
//Código para a primeira quebra de cabeçalho vai aqui
:(Level=1)
//Código para uma quebra de cabeçalho nível 1 aqui
:(Level=2)
//Código para uma quebra de cabeçalho nível 2 aqui
//...
End case
:(Form event code=On Printing Detail)
//Um registro vai ser impresso
//Código para cada quebra vai aqui
:(Form event code=On Printing Break)
//Uma quebra de área vai ser impressa
Case of
:(Level=0)
//Código para uma quebra de nível 0 aqui
:(Level=1)
//Código para uma quebra de nível 1 aqui
//...
End case
:(Form event code=On Printing Footer)
If(End selection($vpFormTable->))
//Código para o último rodapé aqui
Else
//Código para um cabeçalho aqui
End if
End case
Este exemplo mostra o modelo de um método de formulário que administra os eventos que podem ocorrer em um formulário mostrado utilizando os comandos DISPLAY SELECTION ou MODIFY SELECTION. Por propósitos didáticos, mostra a natureza do evento na barra de título da janela do formulário.
//Um método de formulário
Case of
:(Form event code=On Load)
$vsTheEvent:="O formulário vai ser exibido"
:(Form event code=On Unload)
$vsTheEvent:="O formulário saida vai desaparecer da tela"
:(Form event code=On Display Detail)
$vsTheEvent:="Exibindo registro #"+String(Selected record number([TheTable]))
:(Form event code=On Menu Selected)
$vsTheEvent:="Um item de menu foi selecionado"
:(Form event code=On Header")
$vsTheEvent:="A área cabeçalho vai ser desenhada"
:(Form event code=On Clicked")
$vsTheEvent:="Um registro foi clicado"
:(Form event code=On Double Clicked")
$vsTheEvent:="Um registro recebeu duplo clique"
:(Form event code=On Open Detail)
$vsTheEvent:="O registro #"+String(Selected record number([TheTable]))+" recebeu duplo clique"
:(Form event code=On Close Detail)
$vsTheEvent:="Voltar ao formulário form"
:(Form event code=On Activate)
$vsTheEvent:="A janela de formulário virou a janela mais à frente"
:(Form event code=On Deactivate)
$vsTheEvent:="A janela de formulário não é mais a janela mais à frente"
:(Form event code=On Menu Selected)
$vsTheEvent:="Um item menu foi escolhido"
:(Form event code=On Outside Call)
$vsTheEvent:="Uma chamada externa foi recebida"
Else
$vsTheEvent:="O que aconteceu? Event #"+String(Form event)
End case
SET WINDOW TITLE($vsTheEvent)
Para os exemplos sobre gestão dos eventos On Before Keystroke e On After Keystroke, ver os exemplos dos comandos Get edited text, Keystroke y FILTER KEYSTROKE.
Este exemplo mostra como tratar da mesma forma os clics e doble clic em uma área de deslocamento:
//método de objeto área rolável asChoices
Case of
:(Form event code=On Load)
ARRAY TEXT(asChoices;...)
//...
asChoices:=0
:((Form event code=On Clicked)|(Form event code=On Double Clicked))
If(asChoices#0)
//Um item foi clicado, faça algo aqui
//...
End if
//...
End case
Este exemplo mostra como tratar os clics e doble clics utilizando uma resposta diferente. Note o uso do elemento zero para conservar o valor do elemento selecionado:
` Método de objeto para a área de deslocamento asOpçoes
Case of
:(FORM Event=On Load)
ARRAY STRING(...;asOpçoes;...)
` ...
asOpçoes:=0
asOpçoes{0}:="0"
:(FORM Event=On Clicked)
If(asOpçoes#0)
If(asOpçoes#Num(asOpçoes))
` Foi realizado clic em um novo elemento, fazer algo aqui
` ...
` Guardar o novo elemento selecionado para a próxima vez
asOpçoes{0}:=String(asOpçoes)
End if
Else
asOpçoes:=Num(asOpçoes{0})
End if
:(FORM Event=On Double Clicked)
If(asOpçoes#0)
` Foi realizado doble clic sobre um elemento, fazer algo diferente aqui
End if
` ...
End case
Este exemplo mostra como manter uma área de texto a partir de um método desde um método de formulário, utilizando os eventos On Getting Focus e On losing Focus:
//[Contacts];Método de formulário"Data Entry"
Case of
:(Form event code=On Load)
C_TEXT(vtStatusArea)
vtStatusArea:=""
:(Form event code=On Getting Focus)
RESOLVE POINTER(Focus object;$vsVarName;$vlTableNum;$vlFieldNum)
If(($vlTableNum#0)&($vlFieldNum#0))
Case of
:($vlFieldNum=1) //Campo Sobrenome
vtStatusArea:="Entre o sobrenome do Contato; a primeira letra será convertida para maiúscula"
//...
:($vlFieldNum=10) //Campo CEP (ZIP)
vtStatusArea:="Entre um código de CEP de 5-díditos; será validado automaticamente"
//...
End case
End if
:(Form event code=On Losing Focus)
vtStatusArea:=""
//...
End case
Este exemplo mostra como responder ao evento de fechamento de uma janela com um formulário utilizado para a entrada de dados:
//Método para um formulário de entrada
$vpFormTable:=Current form table
Case of
//...
:(Form event code=On Close Box)
If(Modified record($vpFormTable->))
CONFIRM("Este registro foi modificado. Salvar as mudanças?")
If(OK=1)
ACCEPT
Else
CANCEL
End if
Else
CANCEL
End if
//...
End case
Este exemplo mostra como passar a maiúsculas um campo de tipo texto ou alfanumérico cada vez que o valor seja modificado:
//[Contacts]First Name Object method
Case of
//...
:(Form event code=On Data Change)
[Contacts]First Name:=Uppercase(Substring([Contacts]First Name;1;1))+Lowercase(Substring([Contacts]First Name;2))
//...
End case
Este exemplo mostra como passar a maiúsculas um campo de tipo texto ou alfanumérico cada vez que o valor seja modificado:
//[Contacts]First Name Object method
Case of
//...
:(Form event code=On Data Change)
[Contacts]First Name:=Uppercase(Substring([Contacts]First Name;1;1))+Lowercase(Substring([Contacts]First Name;2))
//...
End case
O exemplo abaixo ilustra como manejar uma ação de eliminação nuna lista hierárquica:
... //método da lista hierárquica
:(([#current_title_incode=On Delete Action)
ARRAY LONGINT($itemsArray;0)
$Ref:=Selected list items(<>HL;$itemsArray;*)
$n:=Size of array($itemsArray)
Case of
:($n=0)
ALERT("Nenhum elemento selecionado")
OK:=0
:($n=1)
CONFIRM("Quer eliminar este elemento?")
:($n>1)
CONFIRM("Quier eliminar estos elementos?")
End case
If(OK=1)
For($i;1;$n)
DELETE FROM LIST(<>HL;$itemsArray{$i};*)
End for
End if
Neste exemplo, o evento formulário On Scroll permite sincronizar a visualização de duas imagens em um formulário. O seguinte código se agrega no método do objeto "satélite" (campo imagen ou variável imagem):
Case of
:(Form event code=On Scroll)
// tomamos a posição da imagem da esquerda
OBJECT GET SCROLL POSITION(*;"satellite";vPos;hPos)
// e a aplicamos a imagem da direita
OBJECT SET SCROLL POSITION(*;"plan";vPos;hPos;*)
End case
Resultado:
Se você deseja desenhar um retängulo vermelho ao redor de uma célula selecionada de um list box e deseja que o retângulo se mova junto com a list box se for movimentada verticalmente pelo usuário. No método objeto do list box, pode escrever:
Case of</p><p>:(Form event code=On Clicked)
LISTBOX GET CELL POSITION(*;"LB1";$col;$raw)
LISTBOX GET CELL COORDINATES(*;"LB1";$col;$raw;$x1;$y1;$x2;$y2)
OBJECT SET VISIBLE(*;"RedRect";True)&NBSP; //inicializa um retângulo vermelho
OBJECT SET COORDINATES(*;"RedRect";$x1;$y1;$x2;$y2)
:(Form event code=On Scroll)
LISTBOX GET CELL POSITION(*;"LB1";$col;$raw)
LISTBOX GET CELL COORDINATES(*;"LB1";$col;$raw;$x1;$y1;$x2;$y2)
OBJECT GET COORDINATES(*;"LB1";$xlb1;$ylb1;$xlb2;$ylb2)
$toAdd:=LISTBOX Get headers height(*;"LB1") //preste atençãp na altura do cabeçalho para que não o ultrapasse
f($ylb1+$toAdd<$y1)&($ylb2>$y2) //se estamos dentro da list box
//para simplificar, só manejamos cabeçalhos
//mas devemos manejar clipping horizontal
//assim como as barras de deslocamento
OBJECT SET VISIBLE(*;"RedRect";True)
OBJECT SET COORDINATES(*;"RedRect";$x1;$y1;$x2;$y2)
Else
OBJECT SET VISIBLE(*;"RedRect";False)
End if
End case
Como resultado, o retângulo vermelho segue o deslocamento da list box:
_o_DRAG AND DROP PROPERTIES
CALL SUBFORM CONTAINER
Current form table
FILTER KEYSTROKE
FORM Event
Get edited text
Keystroke
POST OUTSIDE CALL
SET TIMER
Produto: 4D
Tema: Eventos de formulário
Número
388
Modificado: 4D v11 SQL Release 2
Modificado: 4D v12
Modificado: 4D v13
Modificado: 4D v13.2
Modificado: 4D v14
Modificado: 4D v15
Modificado: 4D v16
Modificado: 4D v16 R4
Renomear: 4D v18 (Form event)
Manual de linguagem 4D ( 4D v20 R7)