[delphi-br] RES: [lista-delphi] Variavel

2009-10-16 Por tôpico André
Realmente não fui claro...agora com mais calma vou explicar.

Vejam se existe alguma solução pra isso

Tenho um form criado em tempo de execução.

Nesse form, destruo as query’s no onClose.

No form principal, quando recebo uma mensagem de alguém no sistema, abro um
form com a mensagem.

Só que acontece o seguinte:Quando já estou com a janela aberta, e recebo
outra mensagem, abro novamente a mesma tela. Fica as duas abertas. Porém ao
fechar a primeira, tento fechar a segunda e dá o erro “Invalid pointer
Operation”. Isso porque já destruiu as querys na primeira tela que fechei. E
quando vai destruir na segunda já não existe mais para poder destruir..

 

Crio assim...

FMensagem := TFMensagem.Create(Self);

FMensagem.ShowModal;

 

Eu queria saber se tem alguma forma de criar uma nova instancia,
independente, em que eu possa destruir as query’s dela, sem afetar as outras

Aí tinha pensado numa coisa absurda, de talvez existir a possibilidade de eu
atribuir a hora, ao nome FMensagem, para poder diferenciá-lo

 

De: lista-del...@yahoogrupos.com.br [mailto:lista-del...@yahoogrupos.com.br]
Em nome de Rubem Nascimento da Rocha
Enviada em: sexta-feira, 16 de outubro de 2009 Boa tarde Dé 12:58
Para: Lista Delphi
Assunto: RE: [lista-delphi] Variavel
Prioridade: Alta

 

  


Vc está fazendo confusão! Uma hora vc fala em variável, outra hora fala em
classe! Penso que vc deve pensar em classe e instância/objeto (e não
variável!) para resolver seu problema.

Exemplo:

unit uDataHoraClasse;

interface

type
TDataHoraSistema = class
private
fDataHora: TDateTime;
function GetDataHoraAsString;
public
constructor Create; reintroduce;
property DataHora: TDateTime read fDataHora;
property AsString: string read GetDataHoraAsString;
end;

implementation

uses SysUtils;

{ TDataHoraSistema }

constructor TDataHoraSistema.Create;
begin
inherited;
fDataHora := Now();
end;

function TDataHoraSistema.GetDataHoraAsString: string;
begin
Result := FormatDateTime('dd/mm/ hh:nn:ss', fDataHora)
end;

end.

Depois, é só instanciar um objeto dessa classe 'N' vezes quantas foram
necessárias para você. Mas, lembre-se de que, se vc quer manter controle das
instâncias, deve armazená-las em um repositório, tal como um objeto da
classe TList.

Boa sorte.
Sds.

P.S.: De repente, um simples TStringList para você ir adicionando a
data-hora à medida que vc necessitar não resolveria seu problema? Se não,
explique-se melhor com mais detalhes!



 



[As partes desta mensagem que não continham texto foram removidas]



Re: [delphi-br] RES: [lista-delphi] Variavel

2009-10-16 Por tôpico Silvio Clecio
André escreveu:
 Realmente não fui claro...agora com mais calma vou explicar.
 
 Vejam se existe alguma solução pra isso
 
 Tenho um form criado em tempo de execução.
 
 Nesse form, destruo as query’s no onClose.
 
 No form principal, quando recebo uma mensagem de alguém no sistema, abro um
 form com a mensagem.
 
 Só que acontece o seguinte:Quando já estou com a janela aberta, e recebo
 outra mensagem, abro novamente a mesma tela. Fica as duas abertas. Porém ao
 fechar a primeira, tento fechar a segunda e dá o erro “Invalid pointer
 Operation”. Isso porque já destruiu as querys na primeira tela que fechei. E
 quando vai destruir na segunda já não existe mais para poder destruir..

Antes de destruir o form, verifique se a query existe:
...
procedure TForm.FormDestroy(Sender: TObject);
begin
if Assigned(Query) then
Query.Free;
...

Ou use objetos com contagem de referência 
[http://blog.joaomorais.com.br/2008/09/06/objetos-contagem-ref.html];

 Crio assim...
 
 FMensagem := TFMensagem.Create(Self);
 
 FMensagem.ShowModal;
 
 Eu queria saber se tem alguma forma de criar uma nova instancia,
 independente, em que eu possa destruir as query’s dela, sem afetar as outras
 
 Aí tinha pensado numa coisa absurda, de talvez existir a possibilidade de eu
 atribuir a hora, ao nome FMensagem, para poder diferenciá-lo
-- 
Silvio Clecio
--
Prefira ouvir uma crítica honesta, a um galanteio vazio.




-- 
 FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM 

* Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages

* Para falar com o moderador, envie um e-mail para:
delphi-br-ow...@yahoogrupos.com.br
Links do Yahoo! Grupos

* Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/

* Para sair deste grupo, envie um e-mail para:
delphi-br-unsubscr...@yahoogrupos.com.br

* O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html




Re: [delphi-br] RES: [lista-delphi] Variavel

2009-10-16 Por tôpico Dirlei Dionísio
André,
Me parece que você está pedindo ajuda para fazer algo que não é necessário.
Vou comentar seu e-mail com o que sugiro que você faça.

*Tenho um form criado em tempo de execução.
 Nesse form, destruo as query’s no onClose.
 *





Você não precisa destruir as queries no OnClose, apenas destrua o form e as
queries que estão nele serão destruídas também.

* No form principal, quando recebo uma mensagem de alguém no sistema, abro
 um form com a mensagem.

 Só que acontece o seguinte:Quando já estou com a janela aberta, e recebo
 outra mensagem, abro novamente a mesma tela. Fica as duas abertas. Porém
 ao fechar a primeira, tento fechar a segunda e dá o erro “Invalid pointer
 Operation”. Isso porque já destruiu as querys na primeira tela que fechei.
 E
 quando vai destruir na segunda já não existe mais para poder destruir..

 Crio assim...

 FMensagem := TFMensagem.Create(Self);

 FMensagem.ShowModal;*

















Passe a criar assim:

with TFMensagem.Create(nil) do
*begin*
*try*
*showModal;*
*finally*
*release; // isto fará as queries do form instanciado serem
destruídas*
*end;*
*end;*



 *Eu queria saber se tem alguma forma de criar uma nova instancia,
 independente, em que eu possa destruir as query’s dela, sem afetar as
 outras
 *






Cada instância criada no código acima será independente, mas não vejo motivo
para você destruir as queries dela, ao invés de destruir o a própria
instância.

 *
 Aí tinha pensado numa coisa absurda, de talvez existir a possibilidade de
 eu
 atribuir a hora, ao nome FMensagem, para poder diferenciá-lo*









A possibilidade existe, apenas não é necessário fazer isso.

Um abraço,
Dirlei Dionísio.


[As partes desta mensagem que não continham texto foram removidas]





-- 
 FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM 

* Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages

* Para falar com o moderador, envie um e-mail para:
delphi-br-ow...@yahoogrupos.com.br
Links do Yahoo! Grupos

* Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/

* Para sair deste grupo, envie um e-mail para:
delphi-br-unsubscr...@yahoogrupos.com.br

* O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html




Re: [delphi-br] RES: [lista-delphi] Variavel

2009-10-16 Por tôpico Silvio Clecio
Dirlei Dionísio escreveu:
 André,
 Me parece que você está pedindo ajuda para fazer algo que não é necessário.
 Vou comentar seu e-mail com o que sugiro que você faça.
 
 *Tenho um form criado em tempo de execução.
 Nesse form, destruo as query’s no onClose.
 *
 Você não precisa destruir as queries no OnClose, apenas destrua o form e as
 queries que estão nele serão destruídas também.

De fato, se ele tiver arrastado da paleta e colado no form(ou informado 
o form como owner) não precisa de .free no onclose(o local ideal é no 
ondestroy, lembre-se de um application.terminate ou uma exceção); no 
entanto, se for com query := tsqlquery.create(nil), aí o .free será 
obrigatório(e de preferência com try..finally..end, para garantir a 
chamada ao .free), do contrário, como ele esta criando N objetos(isso se 
eu entendi a dúvida dele), dores de cabeça com memory leak poderão surgir.
-- 
Silvio Clecio
--
Prefira ouvir uma crítica honesta, a um galanteio vazio.




-- 
 FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM 

* Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages

* Para falar com o moderador, envie um e-mail para:
delphi-br-ow...@yahoogrupos.com.br
Links do Yahoo! Grupos

* Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/

* Para sair deste grupo, envie um e-mail para:
delphi-br-unsubscr...@yahoogrupos.com.br

* O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html