showMessage centralizado na tela

30/05/2017

0

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

Responder

Post mais votado

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

Mateus Ribeiro

Mateus Ribeiro
Responder

Mais Posts

30/05/2017

Daniel Araújo

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.
Responder

30/05/2017

Marco Antônio

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.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar