Ajuda - Busca - Membros - Calendário
Versão Completa: Desabiltar botão fechar
Fórum Script Brasil > Programação & Desenvolvimento > Delphi, Kylix
--Vinícius --
Olá pessoal beleza?!

Alguém sabe como desabilitar o botão "X" (fechar) do ShowMessage ou do MessageDlg?

Eu acredito que isso é possível pois já vi alguns sistemas que esse botão fica desabilitado, mas até o momento ainda não consegui encontrar nada...

Se alguém souber e puder me ajudar ficarei muito grato!!
Jhonas
QUOTE
Alguém sabe como desabilitar o botão "X" (fechar) do ShowMessage ou do MessageDlg?


Voce pode alterar o arquivo dialogs.pas onde estão estas funções

C:\Arquivos de programas\Borland\Delphi5\Source\Vcl\dialogs.pas

ou pode criar a sua propria janela de mensagem sem o botão fechar

abraço
--Vinícius --
Agradeço pela atenção!

Mas o que exatamente eu devo alterar no dialogs.pas para desabilitar o botão?

Obrigado!!
Jhonas
Colega .. no momento estou com o tempo curto para poder te dar uma melhor ajuda... veja o codigo do arquivo e procure por algum comando de fechar a janela. quando puder te dou uma resposta melhor.

abraço
Micheus
QUOTE(Jhonas @ 16/04/2008 - 11:37) *
QUOTE
Alguém sabe como desabilitar o botão "X" (fechar) do ShowMessage ou do MessageDlg?

Voce pode alterar o arquivo dialogs.pas onde estão estas funções

C:\Arquivos de programas\Borland\Delphi5\Source\Vcl\dialogs.pas
Esta opção modificará definitivamente e para todas as aplicações que você a utilizar. Lembrando, ainda, que apenas realizando a alteração em BorderIcons para remover a opção biSystemMenu não evitará que a janela seja fechada. Deverá ser monitorado o fechamento ou feito o bloqueio da combinação ALT+F4.

O local a ser modificada a propriedade BorderIcons, possivelmente seja o mesmo do Delphi7: function CreateMessageDialog


QUOTE
ou pode criar a sua propria janela de mensagem sem o botão fechar
Esta opção seria mais interessante.

Em geral, apenas em diálogos de confirmação seria necessário que seu fechamento ocorresse pelo pressionamento de um botão. Mas, quando realmente necessário, ainda poderia ser contornado sem que se mexesse nos códigos fonte originais (o qual tenho aversão).

Fica uma sugestão para você testar. É uma função em que definimos um parâmetro a mais do que comumente se usa na função MessageDlg.
Faz-se necessário declara um novo tipo que será um conjunto que manterá os resultados possíveis e desejados.
CODE
type
  TMsgDlgResults = set of byte;
...
function ForcedMessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; DlgResults :TMsgDlgResults): Word;
begin
  repeat
    Result := MessageDlg(Msg, DlgType, Buttons, HelpCtx);
  until Result in DlgResults;
end;

para usar basta acrescentar o último parâmetro em relação à função tradicionalmente utilizada:
CODE
procedure TForm1.Button9Click(Sender: TObject);
begin
  if ForcedMessageDlg('Mensagem', mtConfirmation, [mbYes, mbNo], 0, [mrYes, mrNo]) = mrYes then
    ShowMessage('Pressionado YES')
  else
    ShowMessage('Pressionado NO');
end;



Abraços
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.