Olá pessoal…
Hoje vou mostrar como retirar o botão de fechar de uma MsDialog no AdvPL.
Ao criar uma MsDialog via AdvPL, ela automaticamente cria um botão de fechar na barra de título da janela, só que e se precisarmos criar uma janela, onde não queremos que o usuário feche?
Tomamos como exemplo, a janela que criei do Mini Fórmulas, com o seguinte código:
//Criando a janela DEFINE MSDIALOG oDlgForm TITLE "zMiniForm - Execução de Fórmulas" FROM 000, 000 TO nJanAltu, nJanLarg COLORS 0, 16777215 PIXEL
Para Resolver isso, adicionamos o estilo Modal Frame, usando o comando e a constante STYLE DS_MODALFRAME, conforme exemplo abaixo:
//Criando a janela DEFINE MSDIALOG oDlgForm TITLE "zMiniForm - Execução de Fórmulas" FROM 000, 000 TO nJanAltu, nJanLarg COLORS 0, 16777215 PIXEL STYLE DS_MODALFRAME
Mas, a tecla ESC ainda funciona, sendo assim o usuário ainda pode fechar a janela, para desativar, altere o atributo lEscClose para falso logo após criar a janela, conforme exemplo abaixo:
oDlgForm:lEscClose := .F.
Update – Outubro de 2023:
Caso você precise fazer na classe TDialog, basta você informar a DS_MODALFRAME no parâmetro uParam9, conforme exemplo abaixo:
//Dessa forma tem o botão fechar oDlgAux := TDialog():New(0, 0, nJanAltu, nJanLarg, cJanTitulo, /*uParam6*/, /*uParam7*/, /*uParam8*/, /*uParam9*/, /*nClrText*/, /*nCorFundo*/, /*uParam12*/, /*oWnd*/, lDimPixels) // ... ou ... //Dessa forma, não tem o botão fechar oDlgAux := TDialog():New(0, 0, nJanAltu, nJanLarg, cJanTitulo, /*uParam6*/, /*uParam7*/, /*uParam8*/, DS_MODALFRAME, /*nClrText*/, /*nCorFundo*/, /*uParam12*/, /*oWnd*/, lDimPixels)
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Muito bom.
Há tempos estava procurando uma saída para esta situação.
Obrigado Atílio.
Opa, eu que agradeço Armando.
Grande abraço.
Funcionou perfeitamente, muito obrigado pelas ótimas dicas!!!
Opa, obrigado pelo comentário Mauricio.
Um grande abraço.