Criar um quot;ShowMessagequot; sem botão

Delphi

15/07/2008

Quero exibir um ´ShowMessage´ durante um processo dentro do sistema. A cada fase do processo quero ir informando ao usuário o que já foi feito... Queria algo semelhante a um ´ShowMessage´ sem botão... Ou pode até tem botão, mas só que o mesmo teria que descartar o ´clique´ obrigado do botão de ´OK´. Será que alguem teria exemplo de como fazer isso? O mesmo será colocado dentro de um DLL.

Obrigado e aguardo qualquer orientação.


Aprendiz_ce

Aprendiz_ce

Curtidas 0

Respostas

Fabianosales

Fabianosales

15/07/2008

Então, cara... não é difícil fazer isso não.
Você pode criar um formulário comum com o layout que você quer e criar um método de classe pra exibí-lo.
Ponha um botão, um label e um timer no form e então declare, na sessão ´public´:
  public
    { Public declarations }
    class function ShowDialog(const Msg: string; TimeOut: cardinal; ShowButton:boolean) : TModalResult;

E na implementação do formulário...
procedure TfrmDialog.FormActivate(Sender: TObject);
begin
  tmrTimeOut.Enabled := (tmrTimeOut.Interval > 0)
end;

class function TfrmDialog.ShowDialog(const Msg: string; TimeOut: cardinal;
  ShowButton:boolean): TModalResult;
var
  dlg : TfrmDialog;
begin
  dlg := TfrmDialog.Create(Application);
  try
    dlg.tmrTimeOut.Interval := TimeOut;
    dlg.tmrTimeOut.Enabled := False;
    dlg.lblMsg.Caption := Msg;
    dlg.btnOk.Visible := ShowButton;
    Result:= dlg.ShowModal;
  finally
    FreeAndNil(dlg);
  end;
end;

procedure TfrmDialog.tmrTimeOutTimer(Sender: TObject);
begin
  ModalResult := mrOk;
end;

Pronto! Agora basta chamar o método TfrmDialog.ShowDialog, passando como parâmetros o texto, a quantidade de tempo que este será exibido e se deve ou não mostrar o botão ´OK´.
TfrmDialog.ShowDialog(´Mensagem ao usuário...´, 3000, False);



GOSTEI 0
Aprendiz_ce

Aprendiz_ce

15/07/2008

Então, cara... não é difícil fazer isso não. Você pode criar um formulário comum com o layout que você quer e criar um método de classe pra exibí-lo. Ponha um botão, um label e um timer no form e então declare, na sessão ´public´:
  public
    { Public declarations }
    class function ShowDialog(const Msg: string; TimeOut: cardinal; ShowButton:boolean) : TModalResult;
E na implementação do formulário...
procedure TfrmDialog.FormActivate(Sender: TObject);
begin
  tmrTimeOut.Enabled := (tmrTimeOut.Interval > 0)
end;

class function TfrmDialog.ShowDialog(const Msg: string; TimeOut: cardinal;
  ShowButton:boolean): TModalResult;
var
  dlg : TfrmDialog;
begin
  dlg := TfrmDialog.Create(Application);
  try
    dlg.tmrTimeOut.Interval := TimeOut;
    dlg.tmrTimeOut.Enabled := False;
    dlg.lblMsg.Caption := Msg;
    dlg.btnOk.Visible := ShowButton;
    Result:= dlg.ShowModal;
  finally
    FreeAndNil(dlg);
  end;
end;

procedure TfrmDialog.tmrTimeOutTimer(Sender: TObject);
begin
  ModalResult := mrOk;
end;
Pronto! Agora basta chamar o método TfrmDialog.ShowDialog, passando como parâmetros o texto, a quantidade de tempo que este será exibido e se deve ou não mostrar o botão ´OK´.
TfrmDialog.ShowDialog(´Mensagem ao usuário...´, 3000, False);


Olá fabianosales,

Beleza!!!

Esse seu exemplo será de grande ajuda para mim. Acho que implementa-lo sem o botão. Quero que mostre somente o que está sendo ´feito´ e com o botão acho que fica sem sentido, pois o usuário não necessita interagir com o processo, resta apenas ele acompanha-lo.

Muitíssimo obrigado pela sua atenção.

Um forte abraço.


GOSTEI 0
Fabianosales

Fabianosales

15/07/2008

Ôpa! Precisando é só falar... :wink:
Só um detalhe. Se você exibir o form através de um ´ShowModal´, seu processamento ficara suspenso até que o formulário seja fechado. Troca o ´ShowModal´ por um ´Show´ comum mesmo, blz?

Evoé...


GOSTEI 0
Aprendiz_ce

Aprendiz_ce

15/07/2008

Ôpa! Precisando é só falar... :wink: Só um detalhe. Se você exibir o form através de um ´ShowModal´, seu processamento ficara suspenso até que o formulário seja fechado. Troca o ´ShowModal´ por um ´Show´ comum mesmo, blz? Evoé...


Beleza!!!

Mas ele pode ser ´StayOnTop´?

Obrigado pela sua pronta atenção.

Abraço.


GOSTEI 0
Fabianosales

Fabianosales

15/07/2008

Pode sim mestre. No problem.


GOSTEI 0
Aprendiz_ce

Aprendiz_ce

15/07/2008

Pode sim mestre. No problem.


Beleza!!!

Obrigado e aquele abraço.


GOSTEI 0
Brunodsr

Brunodsr

15/07/2008

Brother.. Sem querer ser chato, mas vc nao acha melhor mostar essas informações através de um status bar não? Ele foi criado justamente pra isso.

Daí vc evita essa programação toda veio. A não ser que a idéia tenha partido do usuário e ele realmente necessite que seja feito dessa forma.

Espero ter ajudado.

Um abraço


GOSTEI 0
Aprendiz_ce

Aprendiz_ce

15/07/2008

Brother.. Sem querer ser chato, mas vc nao acha melhor mostar essas informações através de um status bar não? Ele foi criado justamente pra isso. Daí vc evita essa programação toda veio. A não ser que a idéia tenha partido do usuário e ele realmente necessite que seja feito dessa forma. Espero ter ajudado. Um abraço


Concordo com você!!!

O problema todo é o seguinte: Não tenho TFORM e muito menos como colocar uma TSTATUSBAR... O projeto em questão é uma DLL que faz um processo com varios arquivos diferentes... Quando a DLL forma carregada... Quero ficar mostrando o que está acontecendo. Entendeu?
Você teria uma outra idéia? Aceito opiniões!!!

Grato pelo seu interesse e atenção para comigo.

Abraço.


GOSTEI 0
Aprendiz_ce

Aprendiz_ce

15/07/2008

[quote:a778d7f9ee=´fabianosales´]Pode sim mestre. No problem.


Beleza!!!

Obrigado e aquele abraço.[/quote:a778d7f9ee]

Olá fabianosales,

fiz tudo conforme conversamos anteriormente e ficou super legal. Só que estou com dúvidas em um única coisa: Crio tudo em ´run time´, exibo o formulário com ´show´... Só que como faço para destrui-lo/libera-lo?, pois como o ´bixim´ é mostrado do ´show´ se coloco formx.show; formx.free... o mesmo é eleminado logo de cara... Como resolvo isso?

Grato e aguardo qualquer orientação.

Abraço.


GOSTEI 0
Wdrocha

Wdrocha

15/07/2008

Pra vc liberar o form coloca no OnClose dele o seguinte...

Action := CaFree;


E pronto....



Espero ter ajudado.


GOSTEI 0
POSTAR