Listar caixas: Gerir cliques em células editadas

Tradução automática de Deepl

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!

Roland Lannuzel
- Proprietário do produto & Especialista 4D - Depois de estudar electrónica, a Roland entrou nas TI industriais como desenvolvedor e consultor, construindo soluções para clientes com uma variedade de bases de dados e tecnologias. No final dos anos 80, apaixonou-se pela 4D e utilizou-a para escrever aplicações comerciais que incluem sistemas de contabilidade, facturação e correio electrónico. Juntando-se à empresa em 1997, as valiosas contribuições de Roland incluem a concepção de especificações, ferramentas de teste, demonstrações, bem como formação e palestras para a comunidade 4D em muitas conferências. Ele continua a moldar activamente o futuro da 4D, definindo novas características e ferramentas de desenvolvimento de bases de dados.