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 CreateMessageDialogQUOTE
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