Criar um quot;ShowMessagequot; sem botão

15/07/2008

1

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.


Responder

Posts

15/07/2008

Fabianosales

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);



Responder

16/07/2008

Aprendiz_ce

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.


Responder

16/07/2008

Fabianosales

Ô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é...


Responder

16/07/2008

Aprendiz_ce

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


Responder

16/07/2008

Fabianosales

Pode sim mestre. No problem.


Responder

17/07/2008

Aprendiz_ce

Pode sim mestre. No problem.


Beleza!!!

Obrigado e aquele abraço.


Responder

17/07/2008

Brunodsr

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


Responder

17/07/2008

Aprendiz_ce

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.


Responder

20/07/2008

Aprendiz_ce

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


Responder

20/07/2008

Wdrocha

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

Action := CaFree;


E pronto....



Espero ter ajudado.


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira