[delphi-br] RES: [lista-delphi] Variavel
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 querys 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 querys 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
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
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 querys 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 querys 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
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