Esse exemplo é legal, vejo isso todos os dias na televisao.. nao sabia q eles eram programadores... hehehehehe.. so se fala em carro bomba... heheheheh ----- Original Message ----- From: WILLER To: delphi-br@yahoogrupos.com.br Sent: Thursday, September 21, 2006 9:27 AM Subject: Re: [delphi-br] Erro de acesso à memória
Obrigado pela explicação, agora entendi o porquê do erro. []s ----- Original Message ----- From: Eduardo To: delphi-br@yahoogrupos.com.br Sent: Wednesday, September 20, 2006 6:28 PM Subject: Re: [delphi-br] Erro de acesso à memória Muito simples, você esta tendo dentro de um metodo ( função ou procedimento ) destruir o objeto que chamou este metodo. Por tanto quando ele sai do metodo o objeto não existe mais. Um exemplo bem tosco seria você é um objeto, você entra dentro de um carro e explode o carro, como você vai sair do carro depois da explosão ? Você não sai, você é destruido na explosão. Eduardo WILLER escreveu: > Legal, funcionou. Só não entendi porque dá erro quando não uso o > timer. Se eu coloco o código todo no click do botão dá erro por quê? > ----- Original Message ----- > From: Eduardo > To: delphi-br@yahoogrupos.com.br > Sent: Wednesday, September 20, 2006 10:11 AM > Subject: Re: [delphi-br] Erro de acesso à memória > > > Ve se é isso que vc quer. > > unit Unit1; > > interface > > uses > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, > Dialogs, > ExtCtrls, StdCtrls, Menus; > > type > TForm1 = class(TForm) > Timer1: TTimer; > procedure Timer1Timer(Sender: TObject); > procedure FormContextPopup(Sender: TObject; MousePos: TPoint; > var Handled: Boolean); > procedure FormCreate(Sender: TObject); > procedure Button1Click(Sender: TObject); > private > { Private declarations } > public > { Public declarations } > vNome : Integer; > vEndereco : Integer; > end; > > var > Form1: TForm1; > > implementation > > {$R *.DFM} > > procedure TForm1.Timer1Timer(Sender: TObject); > begin > > if TButton(vEndereco) <> Nil then > FreeAndNil(TButton(vEndereco)); > Timer1.Enabled := False; > > end; > > procedure TForm1.FormContextPopup(Sender: TObject; MousePos: TPoint; > var > Handled: Boolean); > var > MyBtn : TButton; > begin > MyBtn := TButton.Create(Self); > with MyBtn do > begin > Inc(vNome); > name:='b'+inttostr(vNome); > Parent:=Form1; > left:=mousepos.x; > top:=mousepos.y; > caption:='s'; > OnClick := Button1Click; > Tag := Integer(MyBtn); //Guardo na tag o endereço de memória > do obj > end; > end; > > procedure TForm1.FormCreate(Sender: TObject); > begin > > vNome := 0; > > end; > > procedure TForm1.Button1Click(Sender: TObject); > begin > > if Sender is TButton then > begin > vEndereco := TButton(Sender).Tag; > Timer1.Enabled := True; > end; > > end; > > end. > > > Testei aqui com o intervalo do Timer de 500. Voce tb pode criar uma > lista e assim procurando os objetos da lista para destruir. > Eu só tinha esquecido ontem quando fiz o exemplo do detalhe fundamental > de quem estava chamando este obj. Me desculpe não prestei a atenção > devida. > > Eduardo > > WILLER escreveu: > > Essa linha não funcionou: > > FreeAndNil(TButton(TButton(Sender).Tag)); > > O Compilador dá uma mensagem dizendo: Constat objetc cannot be passed > > as var parameter. > > > > > > ----- Original Message ----- > > From: Eduardo > > To: delphi-br@yahoogrupos.com.br > > Sent: Tuesday, September 19, 2006 2:17 PM > > Subject: Re: [delphi-br] Erro de acesso à memória > > > > > > Exatamente onde está o erro eu não sei, mas vai uma dica. > > > > procedure TForm1.FormContextPopup(Sender: TObject; MousePos: TPoint; > > var Handled: Boolean); > > var > > MyBtn : TButton; > > xx:string; > > begin > > MyBtn := TButton.Create(Self); > > with MyBtn do > > begin > > name:='b'+inttostr(i); > > Parent:=Form1; > > left:=mousepos.x; > > top:=mousepos.y; > > caption:='s'; > > OnClick:=Button1OnClick; > > Tag := Integer(MyBtn); //Guardo na tag o endereço de memória > do obj > > i:=i+1; > > end; > > end; > > > > procedure TForm1.Button1Click(Sender: TObject); > > begin > > > > if Sender is TButton then > > begin > > //Não preciso testar se o obj existe por q se ele não > existe eu > > não chegava aqui !!! > > FreeAndNil(TButton(TButton(Sender).Tag)); > > end; > > > > end; > > > > > > Eduardo > > > > > > WILLER escreveu: > > > Foi exatamente o que fiz, o erro ocorre ao destruir o objeto. > > > ----- Original Message ----- > > > From: Rubem Nascimento da Rocha > > > To: delphi-br@yahoogrupos.com.br > > > Sent: Tuesday, September 19, 2006 1:11 PM > > > Subject: RE: [delphi-br] Erro de acesso à memória > > > > > > > > > { o código correto para FormContextPopup } > > > procedure TForm1.FormContextPopup(Sender: TObject; MousePos: > TPoint; > > > var Handled: Boolean); > > > var xx:string; > > > begin > > > with TButton.Create(Self) do begin > > > name:='b'+inttostr(i); > > > Parent:=Form1; > > > left:=mousepos.x; > > > top:=mousepos.y; > > > caption:='s'; > > > OnClick:=Button1OnClick; > > > i:=i+1; > > > end; > > > end; > > > > > > > > > > > > >From: "WILLER" <[EMAIL PROTECTED]> > > > >Reply-To: delphi-br@yahoogrupos.com.br > > > >To: <delphi-br@yahoogrupos.com.br> > > > >Subject: [delphi-br] Erro de acesso à memória > > > >Date: Tue, 19 Sep 2006 10:04:49 -0300 > > > > > > > >Esse programa deveria, a cada clique com o botão direito do > mouse, > > > criar um > > > >botão. E cada botão, ao receber um clique deveria ser > destruído. > > > >Quando crio um botão e o destruo em seguida, não dá erro. O > erro > > > ocorre > > > >quando crio mais de um botão e depois tento destruí-lo. > > > >Alguém poderia me ajudar, me dar uma dica ou indicar onde > errei? > > > > > > > > > > > > > > > >unit Unit1; > > > > > > > >interface > > > > > > > >uses > > > > Windows, Messages, SysUtils, Variants, Classes, Graphics, > > Controls, > > > >Forms, > > > > Dialogs, StdCtrls; > > > > > > > > > > > >type > > > > TForm1 = class(TForm) > > > > Button1: TButton; > > > > procedure FormContextPopup(Sender: TObject; MousePos: > TPoint; > > > > var Handled: Boolean); > > > > procedure Button1Click(Sender: TObject); > > > > private > > > > { Private declarations } > > > > public > > > > j:TButton; > > > > i:integer; > > > > { Public declarations } > > > > end; > > > > > > > > > > > > > > > >var > > > > Form1: TForm1; > > > > > > > >implementation > > > > > > > >uses Types; > > > > > > > >{$R *.dfm} > > > > > > > >procedure TForm1.FormContextPopup(Sender: TObject; MousePos: > > TPoint; > > > > var Handled: Boolean); > > > > var xx:string; > > > >begin > > > > with TButton.Create(Self) do begin > > > > name:='b'+inttostr(i); > > > > Parent:=Form1; > > > > left:=mousepos.x; > > > > top:=mousepos.y; > > > > caption:='s'; > > > > OnClick:=Button1.OnClick; > > > > i:=i+1; > > > > end; > > > >end; > > > > > > > >procedure TForm1.Button1Click(Sender: TObject); > > > >begin > > > > if sender is TButton then begin > > > > if assigned( TButton(sender)) then begin > > > > FreeAndNil(TButton(Sender)); > > > > end; > > > > end; > > > > > > > >end; > > > > > > > >end. > > > > > > > >[As partes desta mensagem que não continham texto foram > removidas] > > > > > > > > > > > _________________________________________________________________ > > > MSN Busca: fácil, rápido, direto ao ponto. > http://search.msn.com.br > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > _______________________________________________________ > > Novidade no Yahoo! Mail: receba alertas de novas mensagens no seu > > celular. Registre seu aparelho agora! > > http://br.mobile.yahoo.com/mailalertas/ > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > _______________________________________________________ > Você quer respostas para suas perguntas? Ou você sabe muito e quer > compartilhar seu conhecimento? Experimente o Yahoo! Respostas ! > http://br.answers.yahoo.com/ > > > __________ Informação do NOD32 1.1758 (20060915) __________ > > Esta mensagem foi verificada pelo NOD32 Sistema Antivírus > http://www.nod32.com.br > > > [As partes desta mensagem que não continham texto foram removidas] > > _______________________________________________________ Yahoo! Acesso Grátis - Internet rápida e grátis. Instale o discador agora! http://br.acesso.yahoo.com __________ Informação do NOD32 1.1764 (20060920) __________ Esta mensagem foi verificada pelo NOD32 Sistema Antivírus http://www.nod32.com.br [As partes desta mensagem que não continham texto foram removidas] ------------------------------------------------------------------------------ No virus found in this incoming message. Checked by AVG Free Edition. Version: 7.1.405 / Virus Database: 268.12.4/449 - Release Date: 15/9/2006 [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: [EMAIL PROTECTED] 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: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html