Certificando-se de pelo menos 1 item em uma TPopup menu é sempre selecionado
-
12-12-2019 - |
Pergunta
Eu tenho TPopup menu com 3 itens de configuração com as seguintes propriedades.
AutoCheck = True
RadioItem = True
e para o primeiro item de menu que eu defini o Checked
propriedade True
bem assim, o menu tem pelo menos 1 item selecionado com que é apresentada inicialmente.Isso é tudo de bom e de bem, mas se eu clicar sobre o item que está selecionado no momento, a verificação (dot) vai embora e eu quero fazê-lo de modo que pelo menos 1 item no menu de contexto é selecionado em todos os momentos.Como posso fazer isso?
Solução
Os itens do grupo também devem ter a mesma não-zero GroupIndex
.Este, juntamente com RadioItem
deve fazer os itens se comportam como um grupo de botões de rádio.
No entanto, parece que AutoCheck
não respeita GroupIndex
e RadioItem
propriedades, uma vez que irá desmarcar a caixa de verificação quando você clica em uma dada item.(Sem dúvida, este poderia ser considerado um erro na VCL.)
Aqui está uma solução alternativa:
Conjunto AutoCheck
para False
, atribuir a todos os itens, a mesma não-zero GroupIndex
e comum OnClick
processador de verificar o item clicado como este:
procedure TForm1.ItemClick(Sender: TObject);
begin
(Sender as TMenuItem).Checked := True;
end;
Ou uso Ações, com isso parece funcionar conforme o esperado.
Outras dicas
Você pode definir as seguintes manipulador OnClick para todo o seu grupo de botões de rádio Itens de Menu:
procedure TForm1.MenuItemClickHandler(Sender: TObject);
begin
if Sender is TMenuItem then
begin
if not (Sender as TMenuItem).Checked then (Sender as TMenuItem).Checked:=True;
end;
end;