Tirando o botão de fechar de uma Dialog em AdvPL

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
 

Exemplo de Dialog

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
 

Dialog sem o botão de fechar

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.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

4 Responses

  1. Armando Neto disse:

    Muito bom.
    Há tempos estava procurando uma saída para esta situação.
    Obrigado Atílio.

  2. Mauricio disse:

    Funcionou perfeitamente, muito obrigado pelas ótimas dicas!!!

Deixe uma resposta

Terminal de Informação