Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida sobre DLL


Gustavo H

Pergunta

Olá, pessoas do fórum...

Eu já coloquei essa mesma pergunta em outros foruns mas ainda não consegui nenhuma resposta espero que com vocês eu consiga algumas coisa ;)

Eu estou com uma duvida tremenda.

Eu criei uma Dll e nesta Dll eu coloquei uma Procedure onde envia uma mensagem do tipo "CreateMessageDialog", onde eu dou um SHOW para ser exibida no form do executável que o usuário estiver posicionado, para isso eu pego o handle do executável. O problema é que quando a Dll termina de executar todo o código, ela sai da memória, fazendo assim com que a mensagem que eu enviei para o usuário feche também...Minha pergunta é: Teria como eu criar essa mensagem em tempo de execução no form do executável , pela Dll ?

OBS.:Eu tenho que dar um SHOW no "CreateMessageDialog", porque, não quero que a Dll fique dependendo de uma resposta do usuário, que no caso seria ficar esperando ele apertar o botão "Ok" da mensagem que vai ser exibida.

Por favor, me ajudem!!!!!!!!!!!!!!! :(

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Então Jhonas,

Essa Dll funciona como um controle de estoque.

É que existe um tratamento antes de manda a mensagem(que eu não citei acima), nesse tratamento eu verifico

se atingiu determinada quantidade de certo produto no estoque, se essa quantidade for atingida ai eu envio a mensagem.

Essa mensagem deve ficar exibindo até a rotina que aciona essa mensagem for verdadeira. Só vai parar de mandar a mensagem quando o usuário arrumar a quantidade de estoque.

Obrigado pela atenção Jhonas. ;)

Link para o comentário
Compartilhar em outros sites

  • 0
Essa mensagem deve ficar exibindo até a rotina que aciona essa mensagem for verdadeira. Só vai parar de mandar a mensagem quando o usuário arrumar a quantidade de estoque.

Vou tentar dar uma ideia ... modifique o codigo para as suas necessidades

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, DBGrids, Db, DBTables, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    DataSource1: TDataSource;
    Query1: TQuery;
    DBGrid1: TDBGrid;
    Query1PAPEL: TStringField;
    Query1COD: TStringField;
    Query1NUM: TFloatField;
    Timer1: TTimer;
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    ver : integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
   If odd(query1.RecNo) then
      begin
         DBGrid1.Canvas.Font.Color:= clBlack;
         DBGrid1.Canvas.Brush.Color:= cl3DLight;
      end
   else
      begin
         DBGrid1.Canvas.Font.Color:= clBlack;
         DBGrid1.Canvas.Brush.Color:= clWhite;
      end;
   DBGrid1.Canvas.FillRect(Rect);
   DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);

   if (Column.Field.FieldName = 'NUM') and (Query1NUM.AsInteger = 3) then   // valores no estoque = a 3
      begin
         ver := 1;
         DBGrid1.Canvas.Font.Color:= clRed;
         DBGrid1.Canvas.FillRect(Rect);
         DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
      end
   else
      begin
         ver := 0;
         DBGrid1.Canvas.Font.Color:= clBlack;
         DBGrid1.Canvas.FillRect(Rect);
         DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
      end;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
var myDLG : TForm;
begin
   if ver = 1 then
      begin
         myDLG := CreateMessageDialog('Valor = ou menor que 3!', mtWarning, []);  // não mostra nenhum botão
         myDLG.Show;
         myDLG.Refresh;
         sleep(2000);  // mostra a mensagem por 2 segundos
         myDLG.Release;  // apaga a mensagem 
      end;

end;

end.

Explicação: declarei uma variavel publica chamada 'ver'

dentro do evento do dbgrid DrawColumnCell mudo a cor do numero que for = ou menor que 3 para veremelho (como se a quantidade no estoque chegasse a 3 ) e neste caso a minha variavel publica 'ver' recebe o numero 1, indicando que encontrei uma quantidade baixa no estoque.

o timer faz uma leitura da variavel 'ver' a cada 5 segundos, se o valor desta variavel for 1, indicando uma quantidade baixa no estoque, então usuario ficara recebendo a mensagem ate que o valor seja corrigido para uma quantidade acima de 3

a sua DLL pode ser excutada no timer de tempos em tempos para verificar a quantidade de estoque no arquivo

OBS: já fiz um sistema de controle de estoque, onde coloquei uma mensagem de estoque baixo somente quando o funcionario fosse lançar um item de venda, e acabei por gerar um relatorio de itens com estoque baixo.

O fato de ficar mostrando para o usuario uma mensagem repetitiva enquanto a quantidade não for mudada como voce quer não vai agradar o cliente.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu Jhonas.... :D

Boa idéia, eu emito a mensagem por alguns segundos e depois fecho (além de não ficar enchendo o saco do cliente)....

E é isso mesmo a minha Dll é executada de tempos em tempos, e esse tempo quem define é o usuário.

Muito obrigado pela resposta e pela dica :D

Até mais...

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas me surgiu uma outra duvida, se você poder me responder eu agradeço....mas qualquer coisa eu faço um novo tópico... ;)

Eu gostaria de saber se, tem como a minha Dll fazer varias verificações ao mesmo tempo ? Como eu já te disse ,"tenho uma Dll que tem varias funções , e essas funções são executadas de tempos em tempos"...Ai eu não queria que uma função ficasse esperando a outra terminar para ser executada.....Será que tem como eu executar mais de uma função ao mesmo tempo? :huh:

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...