showMessage centralizado na tela

Delphi

30/05/2017

Bom dia a todos,
estou com um problema que é o seguinte....
Tenho uma aplicação onde todas as telas não são expandidas e com isso não ocupam toda a área de trabalho do usuário.
Com isso, o usuário pode arrastar a tela na sua área de trabalho. Até ae tudo beim.
O problema é que qdo preciso mostrar alguma mensagem de alerta com o 'showMessage', este não aparece dentro da
tela da minha aplicação. Ou seja, o usuário arrastou a minha tela para o canto superior esquerdo de forma que ficasse visível
para trabalhar, num dado momento quando é mostrado um 'showMessage' este aparece no centro da área de trabalho,
fazendo com que o usuário não preste atenção na mensagem uma vez que o foco da sua atenção esta na tela que se encontra
no canto superior esquerdo.

Já pesquisei na net e não achei solução.

Alguém conhece uma forma no qual eu consigo fazer com que o 'showMessage' aparece no centro da tela da minha
aplicação onde quer que ela esteja?

Desde já agradeço a atenção.
Obg.
Marco Antônio

Marco Antônio

Curtidas 0

Melhor post

Mateus Ribeiro

Mateus Ribeiro

30/05/2017

Bom dia! Como o amigo acima disse, o ShowMessage usa API do windows, e por padrão é centralizada no desktop.
Segue uma alternativa funcional e simples.

function MessageDlg(const AOwner: TForm; const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; HelpCtx: Integer = 0): Integer;
begin
  with CreateMessageDialog(Msg, DlgType, Buttons) do
    try
      Left := AOwner.Left + (AOwner.Width - Width) div 2;
      Top := AOwner.Top + (AOwner.Height - Height) div 2;
      Result := ShowModal;
    finally
      Free;
    end
end;


Você chama assim:
MessageDlg(Self, 'Teste de mensagem centralizado no owner :D', mtInformation, [mbOK]);


Espero ter ajudado :D
GOSTEI 2

Mais Respostas

Daniel Araújo

Daniel Araújo

30/05/2017

Bom dia Marcos!

O ShowMessage utiliza a api do Windows, por isso eu acredito que não temos tanto controle sobre o comportamento da janela. Sugiro que você crie um form personalizado para exibir mensagens. Ai você coloca o position como "poOwnerFormCenter" para que ele seja centralizado sobre o Form que fez a chamada, ou "poMainFormCenter" para que seja centralizado sobre o Form principal da aplicação.

Se a resposta foi útil não esqueça de dar um like.
GOSTEI 1
Marco Antônio

Marco Antônio

30/05/2017

Vlw Matheus,
Depois de pesquisar na Unit ''Dialogs'', eu havia encontrado o ''ShowMessagePos'' e passei a utilizá-lo, mas devido a questões estéticas
passei a adotar a sua solução que é mto mais bunita de se programar.

Vlw pela ajuda.
Grd abc.

Opa, vlw tb Daniel, pois, devido a sua dica comecei a pesquisar melhor na Unit ''Dialogs''.
Grd abc.
GOSTEI 0
POSTAR