Como revelador, está habituado a lidar com eventos dentro de objectos de forma. O mais comum é o evento de formulário on clicked que pode ser utilizado na maioria dos objectos, incluindo caixas de listagem. Neste objecto em particular, os cliques podem ser geridos quer ao nível da própria caixa de listagem, quer dentro dos métodos de coluna.
E começando com 4D v18 R6, o evento de formulário on clicked é accionado quer uma célula esteja a ser editada ou não, dando-lhe um maior controlo e melhorando a interface.
Aqui fica um exemplo muito simples:
Pretende exibir possíveis valores utilizando um menu contextual para uma célula quando esta está a ser editada. Contudo, quando a linha é simplesmente seleccionada, pretende oferecer uma escolha de cor para essa linha ou célula em particular.
É muito simples de o fazer!
Durante o evento on clicked, basta verificar se a célula está a ser editada ou não. Depois, dependendo do resultado, exibir um menu ou outro!
If$choice
// use the .row info present in the Form event object
FORM Event(Contextual click) // you don't want to do anything if the click is not a contextual click
If (Is editing text) // if the text is being edited, suggest input values
$dynMenu $dynMenu :=Create menu
APPEND MENU ITEM ($dynMenu; "Alfa")
SET MENU ITEM PARAMETER ($dynMenu; -1; "Alfa")
APPEND MENU ITEM ($dynMenu; "Bravo")
SET MENU ITEM PARAMETER ($dynMenu; -1; "Bravo")
APPEND MENU ITEM ($dynMenu; "Charlie")
SET MENU ITEM PARAMETER ( ; -1; "Charlie")
$choice :=Dynamic pop up menu($dynMenu)
If ( xml-ph-0033@row}:=$choice
End if
Else // if the text is NOT being edited, suggest color for the text
$dynMenu LISTBOX SET ROW COLOR :=Create menu
APPEND MENU ITEM ($dynMenu; "Azul")
SET MENU ITEM PARAMETER ($dynMenu; -1; "Azul")
APPEND MENU ITEM ($dynMenu; "Verde")
SET MENU ITEM PARAMETER ($dynMenu; -1; "Verde")
$choice :=Dynamic pop up menu($dynMenu)$choice If ( #"")
// use columnName and row attributes of the Form event object
(
(*; FORM Event.columnName; FORM Event.row; $choice)
End if
End if
RELEASE MENU$dynMenu)
End if
Encontre mais detalhes sobre eventos de formulários no centro doc!
Nota de compatibilidade
Se já tem um código que corre durante o evento on clicked, pode querer parar a execução desse código quando ocorre um clique dentro de uma célula editada. Neste caso, basta testar previamente o estado desta célula com a função is editing text.
Consulte a documentação para mais detalhes técnicos e junte-se a nós no fórum 4D para quaisquer perguntas!