Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Button zur Laufzeit löschen... (https://www.delphipraxis.net/71838-button-zur-laufzeit-loeschen.html)

ford 21. Jun 2006 17:59


Button zur Laufzeit löschen...
 
Hi!

Wenn mir jemand sagen könnte, wieso folgender Code beim Klick auf den zur Laufzeit erstellten Button einen Absturz produziert,
wäre ich sehr dankbar:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ScrollBox1: TScrollBox;
    procedure Button1Click(Sender: TObject);
  private
    button:TButton;
    i:integer;
    procedure test(Sender:TObject);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  button:=TButton.Create(scrollbox1);
  button.Left:=0;
  button.Top:=0;
  button.Width:=20;
  button.height:=20;
  button.Parent:=scrollbox1;
  button.Onclick:=test;
end;

procedure TForm1.test(Sender:TObject);
begin
  FreeAndNil(button);
end;

end.
Gruß,
Ford

EDatabaseError 21. Jun 2006 18:02

Re: Button zur Laufzeit löschen...
 
Was für ein fehler kommt denn?

faux 21. Jun 2006 18:02

Re: Button zur Laufzeit löschen...
 
Hallo!

Probiere mal Button.Free. ;)

Zitat:

Zitat von EDatabaseError
musst du nich ne variable erstellen´??? :?:

Hat er auch. In der Klasse, als private.

Zitat:

Zitat von EDatabaseError
Was für ein fehler kommt denn?

Ich schätze mal ne Zugriffsverletzung.

Grüße
Faux

Hawkeye219 21. Jun 2006 18:10

Re: Button zur Laufzeit löschen...
 
Hallo,

xaromz zeigt hier, wie man es richtig macht.

Gruß Hawkeye

EDatabaseError 21. Jun 2006 18:12

Re: Button zur Laufzeit löschen...
 
Zitat:

Zitat von faux
Hallo!

Probiere mal Button.Free. ;)

Zitat:

Zitat von EDatabaseError
musst du nich ne variable erstellen´??? :?:

Hat er auch. In der Klasse, als private.

Zitat:

Zitat von EDatabaseError
Was für ein fehler kommt denn?

Ich schätze mal ne Zugriffsverletzung.

Grüße
Faux

:mrgreen: da erstell ich nie meine vars deshalb... :oups:

ford 21. Jun 2006 18:13

Re: Button zur Laufzeit löschen...
 
Ja, ist ne Zugriffsverletzung.

Button.Free funktioniert auch nicht.

Das Programm ist nur ein kleiner Test um den Fehler zu zeigen.
Bei meinem "richtigen" Programm kommt manchmal anstelle der EAccessViolation auch eine EAbstractError.

Die Zugriffsverletzung ist in der GetDynaMethod-Prozedur aus der System.pas.

_frank_ 21. Jun 2006 18:27

Re: Button zur Laufzeit löschen...
 
Zitat:

Zitat von ford
Delphi-Quellcode:
  button.Onclick:=test;

procedure TForm1.test(Sender:TObject);
begin
  FreeAndNil(button);
end;

imho kannst du ein Object nicht innerhalb seiner eigenen Methoden freigeben.

Gruß Frank

faux 21. Jun 2006 18:34

Re: Button zur Laufzeit löschen...
 
Zitat:

Zitat von EDatabaseError
:mrgreen: da erstell ich nie meine vars deshalb... :oups:

Wo erstellst du denn deine globalen Variablen? Da gehören die nämlich auch hin. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz