Autor Beitrag
FloF
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 26.03.03 22:34 
Hi

hab da mal ne dringende Frage:

Wenn ich zur Laufzeit ne komponente erzeuge, dieser dann ein .OnClick() ereigniss zuweise und sie damit wieder freigebe ( .Free(); ), dann erhalte ich immer ne Fehlermeldung. Was mach ich falsch bzw. was muss ich anders machen damt es funktioniert?

Greetz FloF
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mi 26.03.03 22:42 
Du solltest vielleicht etwas Code posten, damit man sehen kann, was Du machst....

Gruß
FloF
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 26.03.03 23:56 
Naja genauer gesagt hab ichs mit ner ObjectList gemacht. Aber das ändert ja nichts an der Sache.

Also hier mein Code:

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    TextList: TObjectList;
    Text: TLabel;
    procedure OnTextClick(Sender: TObject);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   Text:=TLabel.Create(Form1);
   Text.Parent:=Form1;
   Text.Top:=10;
   Text.Left:=10;
   Text.Caption:='Text01';
   Text.OnClick:=OnTextClick;
   TextList.Add(Text);
end;

procedure TForm1.OnTextClick(Sender: TObject);
begin
   TextList.Remove((Sender as TLabel));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TextList:=TObjectList.Create();
  TextList.OwnsObjects:=True;
end;

end.


Fehlermeldung: EAccessViolation

Natürlich wird jetzt jeder sagn, dass ich es genau so gut ohne objectlist machen könnte. is aber nur beispielhaft für mein problem.

Schon mal danke für eure hilfe im voraus.

Greetz FloF
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Do 27.03.03 10:01 
Hallo,

die AccessViolation bekommst Du deshalb weil in der WMLButtonUp Methode (ausgelöst durch den Maus-Klick auf das Label) von TControl nach dem OnClick-Event auch noch das OnMouseUp-Event ausgelöst wird. Das geht natürlich nicht da das ganze Objekt ja schon freigegeben wurde.

Eventl. funktioniert es wenn Du statt dem OnClick- das OnMouseUp-Event benutzt.

Gruß
Tino
FloF
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 27.03.03 18:20 
Ja das funktioniert. Danke!

Nur noch ne kurze Frage:

Dann ist es wohl auch nicht möglich, nachdem ich die Komponente freigegeben habe, im OnMousUp()-Ereigniss noch ne if-Abfrage auszuführen. Oder?

FloF
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Do 27.03.03 18:29 
FloF hat folgendes geschrieben:
Ja das funktioniert. Danke!

Nur noch ne kurze Frage:

Dann ist es wohl auch nicht möglich, nachdem ich die Komponente freigegeben habe, im OnMousUp()-Ereigniss noch ne if-Abfrage auszuführen. Oder?

FloF
Im selben Ereignis nach der Freigabe?
Ja ich denke das geht, muss du aber testen!

Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.