4D v12.4

Form event

Página Inicial

 
4D v12.4
Form event

 

Form event 


 

Form event -> Resultado 
Parâmetro Tipo   Descrição
Resultado  Inteiro longo in Número do evento do formulário

Form event devolve um valor numérico que identifica o tipo de evento de formulário que acaba de acontecer. Geralmente, Form event se utiliza em um método de formulário ou num método de objeto.

4D oferece constantes predefinidas (localizadas no tema Eventos de formulários) para comparar os valores devolvidos pelo comando Form event.

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 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 Outside Call Inteiro longo 10 O formulário recebe um chamado CALL PROCESS
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 Um registro é clicado duas vezes e você passa ao formulário de entrada
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 Get edited text passou
On After Keystroke Inteiro longo 28 Um caractere que vai ser inserido no objeto que tem o foco. SET TIMER retorna o texto do objeto, incluindo esse caractere
On Resize Inteiro longo 29 A janela do formulário é redimensionada
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
List box: é modificada a seleção atual de linhas ou colunas
Registros na lista: é modificado o registro atual ou a seleção atual de linhas num formulário listado ou num subformulário
Lista hierarquica: a seleção na lista é modificada após fazer clique ou pressionar uma tecla
Variável ou campo editável (somente v12.x): a seleção de texto ou a posição do ponteiro na área é modificada ao clicar ou pressionar uma tecla.
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) Se modificar a largura de uma coluna de list box
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) na área gráfica de um objeto
On Arrow Click Inteiro longo 38 (3D buttons only) A área “flecha” do botão 3D é clicado.
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 Mac toolbar button Inteiro longo 55 O usuário clica no botão de gestão da barra de ferramentas no Mac OS.

Observação: os eventos específicos de formulários de saída não podem ser utilizados em formulários 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 passa um evento de formulário, 4D efetua as seguintes ações:

  • Primeiro, examine os objetos do formulário e chame ao método de objeto para todos os objetos (envolvidos no evento) cuja propriedade do evento de objeto correspondente foi selecionada.
  • Segundo, chame ao método de formulário si a propriedade do evento do formulário correspondente foi selecionada.

Não assuma que os métodos de objeto, se houver algum, chama-se em uma ordem específica. A regra é que os métodos de objeto sempre se chamam antes que os métodos de formulário. Se um objeto é um sub-formulário, denomina-se, em primeiro lugar, para formar os métodos do objeto sub-formulário saída e, em seguida, o método de saída de forma de formulário. 4D, em seguida, continua chamando os métodos do formulário pai. Em outras palavras, quando um objeto está em um sub¬-formulário 4D utiliza a mesma regra para os métodos de objeto e a forma em sub-formulários.

Exceto para os eventos On Load e On Unload, se a propriedade de evento de formulário não está selecionada para um evento dado, isto não evita as chamadas aos métodos de objeto para os objetos cuja propriedade de evento está selecionada. Ou seja, a ativação ou desativação de um evento a nível do formulário não tem efeito nas propriedades do evento dos objetos.

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 selecionado as propriedades do evento On Load serão chamados. Logo, se a propriedade do evento do formulário On Load está 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 específico. Portanto, caso o evento do formulário On Activate está selecionado, somente será chamado ao método de 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 o formulário propriedade do evento On Timer está selecionado, somente o método de formulário receberá o evento, e não será chamado o método de formulário.
  • Evento On Drag Over, somente será chamado o método do objeto liberável envolvido no evento (caso a propriedade do evento "Liberável" esta selecionada para o  objeto). Não se chamará o método de formulário.
  • Pelo contrário, para o evento On Begin Drag over, será chamado o método do objeto ou o método do formulário do objeto arrastado (Caso a propriedade de evento "Arrastável" esteja selecionada para o objeto).

Advertência: a diferença dos 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 processo de arrastar e soltar o objeto de destino. Para maior informação, consulte a seção .

  • Caso os eventos On 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 foram selecionados para um objeto, são gerados somente para o objeto. No caso de sobreposição de objetos, o evento se forma pelo primeiro objeto capaz de administrá-lo que se encontre do nível superior ao inferior. Os objetos que se fizeram invisíveis utilizando o comando OBJECT SET VISIBLE não formam estes eventos. Durante a entrada de dados, outros objetos podem receber este tipo de eventos dependendo da posição do mouse.
  • Registros em lista: a sequência de chamadas a métodos e eventos de formulários em formulários listados exibidos através de MODIFY SELECTION / DISPLAY SELECTION e os sub formulários são as seguintes:
    Para cada objeto na área de cabeçalho:
    • Método de objeto com evento On Header
    Método de 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
Não se permite chamar um comando 4D que mostre uma caixa de diálogo desde os eventos On Display Detail e On Header e provoca um erro de sintaxes.
Mas particularmente, os comandos relacionados são: ALERT, DIALOG, CONFIRM, Request, ADD RECORD, MODIFY RECORD, DISPLAY SELECTION e MODIFY SELECTION.

A seguinte tabela resume como se chamam os métodos de formulário e objetos para cada tipo de evento:

EventoMétodos de objetoMétodo de formulárioQue objetos
On LoadSimSimTodos
On UnloadSimSimTodos
On ValidateSimSimTodos
On ClickedSim (se selecionável ) (*)SimSomente o objeto implicado
On Double ClickedSim (se clicável) (*)SimSomente o objeto implicado
On Before KeystrokeSim (se editável) (*)SimSomente o objeto implicado
On After KeystrokeSim (se editável) (*)SimSomente o objeto implicado
On After EditSim (se editável) (*)SimSomente o objeto implicado
On Getting FocusSim (se tabelável) (*)SimSomente o objeto implicado
On Losing FocusSim (se tabelável) (*)SimSomente o objeto implicado
On ActivateNuncaSimNenhum
On DeactivateNuncaSimNenhum
On Outside CallNuncaSimNenhum
On Begin drag overSim (se arrastável) (**)SimSomente o objeto implicado
On DropSim (se soltável) (**)SimSomente o objeto implicado
On Drag OverSim (se soltável) (**)NuncaSomente o objeto implicado
On Mouse EnterSim SimTodos
On Mouse MoveSim SimTodos
On Mouse LeaveSim SimTodos
On Menu SelectedNuncaSimNenhum
On Mac toolbar buttonNuncaSimNenhum
On bound variable changeNuncaSimNenhum
On Data ChangeSim (se modificável) (*)SimSomente o objeto implicado
On Plug in AreaSim SimSomente o objeto implicado
On HeaderSim SimTodos
On Printing DetailSim SimTodos
On Printing BreakSim SimTodos
On Printing FooterSim SimTodos
On Close BoxNuncaSimNenhum
On Display DetailSim SimTodos
On Open DetailNuncaSimNenhum
On Close DetailNuncaSimNenhum
On ResizeNuncaSimNenhum
On Selection ChangeSim (***)SimSomente o objeto implicado
On Load RecordNuncaSimNenhum
On TimerNuncaSimNenhum
On Before Data EntrySim (List box)NuncaSomente o objeto implicado
On Column MovedSim (List box)NuncaSomente o objeto implicado
On Row MovedSim (List box)NuncaSomente o objeto implicado
On Column ResizeSim (List box)NuncaSomente o objeto implicado
On Header ClickSim (List box)NuncaSomente o objeto implicado
On After SortSim (List box)NuncaSomente o objeto implicado
On Long ClickSim (Botão 3D)Sim Somente o objeto implicado
On Arrow ClickSim (Botão 3D)Sim Somente o objeto implicado
On ExpandSim (Lista hierárq.)NuncaSomente o objeto implicado
On CollapseSim (Lista hierárq.)NuncaSomente o objeto implicado

(*) Para maior informação, ver a seção "Eventos, objetos e propriedades" a continuação.
(**) Consulte a seção "" para maior informação.
(***) Somente os objetos de tipo list box, lista hierárquica e sub formulário suportam este evento.

IMPORTANTE: sempre tenha em conta que, para qualquer evento, o método de um formulário o de um objeto se chama se o evento correspondente é selecionado para o formulário ou objeto. O benefício de desativar eventos no mesmo arredor Desenho (utilizando a Lista de propriedades do editor de formulários) e você pode reduzir de maneira importante o número de chamadas a métodos e portanto otimizar de maneira significativa a velocidade de execução de seus formulários.

Advertência: os eventos On Load e On Unload são gerados por objetos se estão ativados para o objeto e o formulário ao qual pertence o objeto. Se os eventos estão ativados para o objeto unicamente, não passarão; estes dois eventos também devem ativar-se ao nível do formulário.

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:

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:

  • Todos os campos editáveis do tipo alfa, texto, data, hora, numérico ou (On After Edit somente) imagem
  • Todas las variáveis  editáveis do tipo alfa, texto,  data, hora, numérico ou (On After Edit  somente) imagem
  • Combo boxes (com exceção de On Selection Change)
  • Listboxes.

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).

  • On Before Keystroke e On After Keystroke

Nota: a partir da versão 2004.2 de 4D, 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 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.

  • On After Edit
    Quando utilizado, este evento é gerado depois de toda alteração feita ao conteúdo de um objeto editável, sem importar a ação que originou a alteração, Quer dizer:
    - As ações de edição padrão que modificam o conteúdo tais como colar, cortar, apagar ou cancelar;
    - Soltar um valor (ação similar a colar);
    - Toda entrada de teclado realizada pelo usuário; neste caso, o evento On After Edit é gerado depois dos eventos On Before Keystroke e On After Keystroke, se utilizados.
    - Toda modificação realizada utilizando um comando de linguagem que estimule una ação de usuário (por exemplo POST KEY).
    Atenção, as seguintes ações NÃO ativam este evento:
    - As ações de edição que não modificam o conteúdo da área, como copiar ou selecionar tudo, ou arrastar um valor (ação semelhante a copiar); contudo, estas ações modificam a localização do cursor e desencadeiam o evento On Selection Change.
    - Arrastar um valor (ação semelhante a copiar);
    - As modificações aos conteúdos por programação, com exceção para os comandos que simulam uma ação do usuário.
    Este evento pode ser utilizado para controlar ações de usuário a fim de prevenir que colem um texto muito longo, bloquear alguns caracteres ou evitar que um campo de senha seja cortado.
  • On Selection Change: quando aplicado a um campo ou variável de texto dinâmico (editável ou não), este evento é ativado toda vez que a posição do cursor muda. Isto acontece por exemplo, assim que o usuário seleciona o texto utilizando o mouse ou as teclas de seta do teclado, ou quando o usuário introduz texto. Isto permite chamar, por exemplo, comandos tais como GET HIGHLIGHT.

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:

  • Todos os campos editáveis (com exceção das sub-tabelas e BLOBs)
  • Todas as variáveis editáveis (com exceção dos BLOBs, ponteiros e arrays)
  • Combo boxes
  • Objetos externos (para os quais a entrada de dados é aceitada pelo plug-in)
  • Listas hierárquicas
  • Listboxes.

Estes objetos recebem eventos On Data Change. Quando o evento On Data Change está selecionado para um destes objetos, você pode detectar e gerenciar a mudança dos valores da fonte de dados, utilizando o comando Form event 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:

  • Variáveis ou campos não editáveis
  • Grades de botões
  • Botões 3D, botões opção 3D, caixas de seleção 3D
  • Menus drop-down, menus hierárquicos drop-down
  • Menus/listas drop-down
  • Menus imagem
  • Áreas de deslocamento
  • Botões invisíveis, botões inversos, botões opção imagem
  • Gráficos
  • Objetos externos (para os quais a entrada de dados é aceitada pelo plug-in 4D)
  • Tabs
  • Separadores.

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 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:

  • On Long Click: este evento é gerado quando um botão 3D recebe um clique e o botão do mouse é pressionado por um certo período de tempo. Na teoria, o período de tempo para o qual este evento é gerado é igual ao comprimento máximo de tempo que separa um duplo clique, conforme definido nas preferências do sistema.
    Este evento pode ser gerado por todos os estilos de botões 3D, botões de opção 3D y caixas de seleção 3D, com excepção dos botões 3D de “velha geração” (estilo offset de fundo) e as áreas de setas de botões 3D com menus suspensos (veja a seguir).

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”.

  • On Arrow Click: alguns estilos de botões 3D podem estar associados a um menu suspenso e mostrar uma seta. Clicar nesta seta faz com que seja exibida uma caixa de seleção que oferece um conjunto de ações adicionais em relação com a ação principal do botão.

4D permite gerenciar este tipo de botão utilizando o evento On Arrow Click. Este evento é gerado quando o usuário clica na “seta” (assim que o botão do mouse seja pressionado):

- Se o menu suspenso é do tipo “separado,” o evento somente é gerado quando um clique ocorre na parte do botão com a seta.

- Se o menu suspenso é 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.

Sete eventos de formulário podem ser utilizados para administrar as diferentes características específicas dos list boxes:

  • On Before Data Entry: este evento é gerado antes de uma célula da list box ser editada (antes do cursor de entrada ser exibido). Esse evento permite que o desenvolvedor, por exemplo, possa exibir um texto diferente dependendo se o usuário está no modo de edição ou no modo de exibição.
  • On Selection Change: este evento é gerado sempre que a seleção atual de linhas ou colunas do list box são alterados. Esse evento também é gerado para listas de registros e listas hierárquicas.
  • On Column Moved: este evento é gerado quando uma coluna da list box é movida pelo usuário usando arrastar e soltar. Não é gerado, se a coluna se arrasta e solta na sua localização inicial. O comando MOVED LISTBOX COLUMN NUMBER retorna a nova posição da coluna. 
  • On Row Moved: este evento é gerado quando uma fila do list box é movido pelo usuário utilizando arrastar e soltar. Não é gerado se a fila é arrastada e soltada em sua ubicação inicial.
  • On Column Resize: este evento é gerado quando o largo de uma coluna do list box é modificado (utilizando o mouse ou por programação utilizando o comando SET LISTBOX COLUMN WIDTH).
  • On Header Click: este evento é gerado quando ocorre um clique no cabeçalho de uma coluna na list box. Neste caso, o auto comando permite que você saiba qual o cabeçalho da coluna que é clicado. Em On Clicked o evento é gerado quando um botão direito (Windows) ou Ctrl + clic (Mac OS) ocorre em uma coluna ou um cabeçalho de coluna.
    Se a propriedade Ordenável foi selecionada para o list box, você pode decidir se permite ou não uma ordem padrão da coluna passando o valor 0 ó -1 na variável $0:
    - Si $0 é igual a 0, se efetua a ordem padrão.
    - Si $0 é igual a -1, não se efetua a ordem padrão e o cabeçalho não mostra a flecha de ordem. O desenvolvedor pode ainda gerar uma ordem das colunas baseado nos critérios de ordem personalizados utilizando os comandos de gestão de arrays de 4D.
    Se a propriedade Ordenável não está selecionada para o list box, a variável $0 não se utiliza.
  • On After Sort: esse evento ocorre  apenas depois que é feito um padrão de gerenciamento (no entanto, não gerado se $0 retorna - 1 no cabeçalho clique no evento On Header Click). Este mecanismo é útil para preservar os sentidos de ordenações recentes realizadas pelo usuário. Neste caso, o auto-comando retorna um ponteiro para a variável da coluna que foi ordenada.

Além de eventos genéricos, três eventos específicos podem ser usados para gerenciar as ações que os usuários realizam em listas hierárquicas:

  • On Selection Change: este evento ocorre cada vez que a seleção na lista hierárquica se modifica depois de um clic ou de que se pressione uma tecla.
    Este evento também ocorre nos objetos list box e listas de registros.
  • On Expand: este evento ocorre cada vez que um elemento da lista hierárquica distribui com um clic ou ao pressionar uma tecla.
  • On Collapse: este evento ocorre cada vez que um elemento da lista hierárquica encolhe com um clic ou ao pressionar uma tecla.

Esses eventos não são mutuamente exclusivos. Eles podem gerar um após o outro para uma lista hierárquica:

- Em resposta a pressionar uma tecla (em ordem):

EventoContexto
On Data ChangeUm elemento estava em edição
On Expand/On CollapseAbertura/fechamento de uma sublista utilizando as teclas de flechas -> o <-
On Selection ChangeSeleção de um novo elemento
On ClickedAtivação da lista utilizando o teclado


- Em resposta a um clic (em ordem):

EventoContexto
On Data ChangeUm elemento estava em edição
On Expand/On CollapseAbertura/fechamento de uma sob lista utilizando os ícones de distribuição/contração
o
Doble-clic em uma sob lista não editável
On Selection ChangeSeleção de um novo elemento
On Clicked / On Double ClickedAtivação da lista por um clic ou um 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:

  • On Load y On Unload: abertura e fechamento do sub-formulário respectivamente (esses eventos também devem ser ativados no pai do formulário para que eles sejam tidos em conta). Observe que esses eventos são gerados antes do formulário pai. Além disso, observe que de acordo com os princípios de funcionamento dos eventos de formulário, se o sub-formulário está localizado em uma página diferente de 0 ou 1, esses eventos só irão gerar quando a página é exibida/fechada (e não quando o formulário é exibido/fechado).
  • On Validate: validação da entrada com o sub-formulário.
  • On Data Change: O valor da variável do objeto de conteúdo do sub-formulário foi modificado.
  • On Activate y On Deactivate: o conteúdo do sub-formulário acaba de receber ou perder o foco. Esses eventos são gerados no método do objeto sub-formulário quando eles são selecionados. Enviam para o formulário do método sub-formulário, que significa que você pode gerenciar a visualização dos botões de navegação no sub-formulário em função do foco. Observe que os próprios objetos do sub-formulário podem ter o foco.
  • On bound variable change: este evento específico é gerado no contexto do método de formulário do sub-formulário assim que um valor é atribuído à variável associado com o sub-formulário no formulário pai (mesmo se o mesmo valor é retribuído) e se o sub-formulário pertence à página do formulário atual ou a página 0. Para obter maior informação sobre a gestão de sub-formulários, consulte o manual de Desenho.

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.


Existem sete eventos para formulários especificamente disponíveis para as zonas de web:

  • On Begin URL Loading: este evento ocorre ao início da carga de um nuevo URL na área Web. A variável "URL" associada com a área web permite conhecer o URL que  está carregando.
    Nota:
    O URL que está carregando é diferente do URL atual (consulte a descrição do comando WA Get current URL).
  • On URL Resource Loading: este evento ocorre cada vez que carga um novo recurso (imagem, moldura, etc.) na página web atual. A variável "Progressão" associada a área lhe permite buscar o estado atual da carga.
  • On End URL Loading: este evento ocorre quando todos os recursos da URL atual são carregados. Você pode chamar o comando WA Get current URL para conhecer a URL carregada.
  • On URL Loading Error: este evento ocorre quando um erro é detectado ao carregar uma URL. Você pode chamar o comando WA GET LAST URL ERROR para obter informações sobre o erro.
  • On URL Filtering: este evento ocorre quando a carga de um URL é bloqueada pela área web devido a um filtro definido utilizando o comando WA SET URL FILTERS. Pode conhecer o URL bloqueado utilizando o comando WA Get last filtered URL.
  • On Open External Link: este evento ocorre quando a carga de um URL é bloqueada pela área Web e o URL é aberto com o navegador do sistema atual, devido a um filtro definido utilizando o comando WA SET EXTERNAL LINKS FILTERS. Pode conhecer o URL bloqueado utilizando o comando WA Get last filtered URL.
  • On Window Opening Denied: este evento ocorre quando ao abrir uma janela pop-up ela se bloqueia para a área Web. As áreas web 4D não permitem a abertura de janelas pop-up. Pode conhecer o URL bloqueado utilizando o comando WA Get last filtered URL.

 Este exemplo ordena uma seleção de subnotificações para a subtabela [Pais]Filhos antes que um formulário da tabela [Pais] seja visualizado no monitor:

  ` Método de um formulário para a tabela [Pais]
 Case of:(Form event=On Load)
       ORDER SUBRECORDS BY([Pais]Filhos;[Pais]Nome'Filhos;>)
  ` ...
 End case

Este exemplo mostra o evento On Validate utilizado para atribuir automaticamente (a um campo) a fecha quando o registro é modificado:
 

  ` Método de um formulário
 Case of
  ` ...
    :(Form event=On Validate)
       [unaTabla]Data que foi modificado:=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:

  ` Método de objeto do menú drop-down tama
 Case of
    :(Form event=On Load)
       ARRAY STRING(31;asTalla;3)
       tama{1}:="pequena"
       tama{1}:="media"
       tama{1}:="grande"
    :(Form event=On Clicked)
       If(tama#0)
          ALERT("Escolheu um hamburguer "+tama{tama})
       End if
    :(Form event=On Unload)
       CLEAR VARIABLE(tama)
 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.

  ` Método de objeto de campo Imagem [umatabela]umaImagem
 Case of
    :(Form event=On Drag Over)
  ` Ha iniciado uma operação arrastar e soltar e o mouse está sobre o campo
  ` Obter a informação sobre o objeto fonte
       DRAG AND DROP PROPERTIES($vpObjetoOrigem;$vlElementoOrigem;$lProcessoOrigem)
  ` Note que não necessitamos provar o número de processo fonte
  ` para o método de objeto executado ja que é o mesmo processo
       $vlTipoDados:=Type($vpObjetoOrigem->)
  ` ¿Os dados fonte são uma imagem (campo, variável ou array)?
       If(($vlTipoDados=Is Picture)|($vlTipoDados=Picture array))
  ` Sim é assim, aceite o arrastar.
  ` Note que o botão do mouse ainda está pressionado, o único efeito ainda
  ` aceita o arrastar permitindo a 4D ressaltar o objeto de maneira que o usuario
  ` saiba que os datos fonte possam ser soltados neste objeto.
          $0:=0
       Else
  ` Caso contrario, rejeite o arrastar
          $0:=-1
  ` Neste caso, o objeto não ressalta
       End if
    :(Form event=On Drop)
  ` Os dados fonte foram soltos sobre o objeto, portanto necessitamos copiar-los no objeto
  ` Obter a informação sobre o objeto fonte
       DRAG AND DROP PROPERTIES($vpObjetoOrigem;$vlElementoOrigem;$lProcessoOrigem)
       $vlTipoDatos:=Type($vpObjetoOrigem->)
       Case of
  ` O objeto fonte é um campo ou uma variável tipo imagem
          :($vlTipoDados=Is Picture)
  ` O objeto fonte é do mesmo processo (da mesma janela e formulário)?
             If($lProcessoOrigem=Current process)
  ` Se é assím, copiar o valor fonte
                [aTabela]aImagem:=$vpObjetoOrigem->
             Else
  ` Se não, o objeto fonte é uma variável?
                If(Is a variable($vpObjetoOrigem))
  ` Se é assim, obter o valor do processo fonte
                   GET PROCESS VARIABLE($lProcessoOrigem;$vpObjetoOrigem->;$vgImagemArrastada)
                   [aTabela]aImagem:=$vgImagemArrastada
                Else
  ` Se não, utilize CALL PROCESS para obter o valor do campo do processo fonte
                End if
             End if
  ` O objeto fonte é um array de imagens
          :($vlTipoDados=Picture array)
  ` ¿O objeto fonte esta no mesmo processo (na mesma janela e formulario)?
             If($lProcessoOrigem=Current process)
  ` Se é assím, copiar o valor fonte
                [aTabela]aImagem:=$vpObjetoOrigem->{$vlElementoOrigem}
             Else
  ` Se não, obter o valor do processo fonte
                GET PROCESS VARIABLE($lProcessoOrigem;$vpObjetoOrigem;
                ->{$vlElementoOrigen};$vgImagemArrastada)
                [aTabela]aImagem:=$vgImagemArrastada
             End if
       End case
 End case

Observação: para mais exemplos sobre a gestão dos eventos On Drag Over y On Drop, consulte os exemplos do comando 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 utilizado como formulário de saída de um relatório
 $vpFormTabla:=Current form table
 Case of
  ` ...
    :(Form event=On Header)
  ` Uma área de cabeçalho esta pronta para ser impressa
       Case of
          :(Before selection($vpFormTabla->))
  ` O código para a primeira ruptura de cabeçalho deve estar aqui
          :(Level=1)
  ` O código para a ruptura de cabeçalho de nível 1 deve estar aqui
          :(Level=2)
  ` O código para a ruptura de cabeçalho de nível 2 deve estar aqui
  ` ...
       End case
    :(Form event=On Printing Detail)
  ` Vai ser impresso um registro
  ` O código para cada registro deve ir aqui
    :(Form event=On Printing Break)
  ` Uma área de ruptura esta a pronta para ser impressa
       Case of
          :(Level=0)
  ` O código para a ruptura 0 deve estar aqui
          :(Level=1)
  ` O código para a ruptura 1 deve estar aqui
  ` ...
       End case
    :(Form event=On Printing Footer)
       If(End selection($vpFormTabla->))
  ` O código para o último rodapé da página vai aqui
       Else
  ` O código para o rodapé da página deve ir 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=On Load)
       $vsEvento:="O formulário vai ser visualizado"
    :(Form event=On Unload)
       $vsEvento:="O formulário de saída foi fechado e vai desaparecer da tela"
    :(Form event=On Display Detail)
       $vsEvento:="Mostrando o registro #"+String(Selected record number([LaTabla]))
    :(Form event=On Menu Selected)
       $vsEvento:="Um comando do menú foi seleccionado"
    :(Form event=On Header")
       $vsEvento:="A área de cabeçalho esta pronta para ser desenhada"
    :(Form event=On Clicked")
       $vsEvento:="Foi realizado um clic em um registro"
    :(Form event=On Double Clicked")
       $vsEvento:="Foi realizado um doble clic em um registro"
    :(Form event=On Open Detail)
       $vsEvento:="Foi realizado um doble clic no registro #"+String(Selected record number([ATabela]))
    :(Form event=On Close Detail)
       $vsEvento:="Retorno ao formulário de saída"
    :(Form event=On Activate)
       $vsEvento:="A janela de formulário passa ao primero plano"
    :(Form event=On Deactivate)
       $vsEvento:="A janela do formulário não é mais a janela do primero plano"
    :(Form event=On Menu Selected)
       $vsEvento:="Foi selecionado um elemento do menú"
    :(Form event=On Outside Call)
       $vsEvento:="Foi recebido uma chamada do exterior"
    Else
       $vsEvento:="¿O que acontece? O evento #"+String(Form event)
 End case
 SET WINDOW TITLE($vsEvento)

 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 para a área de deslocamento asOpçoes
 Case of
    :(Form event=On Load)
       ARRAY STRING(...;asOpçoes;...)
  ` ...
       asOpçoes:=0
    :((Form event=On Clicked)|(Form event=On Double Clicked))
       If(asOpçoes#0)
  ` Foi feito clic em um elemento, fazer 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 y On losing Focus:

  `Método de formulário [Contatos];"Entrada"
 Case of
    :(Form event=On Load)
       C_TEXT(vtAreaEstado)
       vtAreaEstado:=""
    :(Form event=On Getting Focus)
       RESOLVE POINTER(Focus object;$vsNomeVar;$vlNumTabela;$vlNumCampo)
       If(($vlNumTabela#0) & ($vlNumCampo#0))
          Case of
             :($vlNumCampo=1) ` Campo nome
                vtAreaEstado:="Introduza o nome do contato; será passado automaticamente a maiúsculas"
  ` ...
             :($vlNumCampo=10) ` Campo código postal
                vtAreaEstado:="Introduza um código postal; será verificado e validado automaticamente"
  ` ...
          End case
       End if
    :(Form event=On Losing Focus)
       vtAreaEstado:=""
  ` ...
 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
 $vpFormTabela:=Current form table
 Case of
  ` ...
    :(Form event=On Close Box)
       If(Modified record($vpFormTabela->))
          CONFIRM("Este registro foi modificado. Desejas guardar 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:

  `Método de objeto para [Contatos]Nome
 Case of
  ` ...
    :(Form event=On Data Change)
       [Contatos]Nome:=Uppercase(Substring([Contatos]Nome;1;1))+
       Lowercase(Substring([Contatos]Nome;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:

  `Método de objeto para [Contatos]Nome
 Case of
  ` ...
    :(Form event=On Data Change)
       [Contatos]Nome:=Uppercase(Substring([Contatos]Nome;1;1))+
       Lowercase(Substring([Contatos]Nome;2))
  ` ...
 End case

 
PROPRIEDADES 

Produto: 4D
Tema: Eventos de formulário
Número 388

 
HISTÓRIA 

New
Modificado: 4D v11 SQL Release 2
Modificado: 4D v12

 
VER TAMBÉM 

CALL PROCESS
CALL SUBFORM CONTAINER
Current form table
DRAG AND DROP PROPERTIES
FILTER KEYSTROKE
Get edited text
Keystroke
SET TIMER