Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Problem mit tListbox.AddObjekt


bms - Do 17.04.03 01:17
Titel: Problem mit tListbox.AddObjekt
ich lerne gerade delphi und bin bei objekten gelandet. in addobject kann ich doch ein objekt einbinden. wieso funktioniert das hier nicht.


Delphi-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:
45:
46:
47:
48:
49:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure ListBox1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  TAbc = class
    Text: String;
  end;

var
  Form1: TForm1;
  Abc: TAbc;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Abc := TAbc.Create;
  Abc.Text := '123456';
  ListBox1.Items.AddObject('Abc', TObject(Text));
  Abc.Free;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
  Abc := TAbc.Create;
  Abc := TAbc(ListBox1.Items.Objects[ListBox1.ItemIndex]);
  ShowMessage( Abc.Text );
  Abc.Free;
end;

end.


wenn ich auf listbox klicke sollte der text ausgegeben werden. es kommt aber nur ein fehler.

Moderiert von user profile iconKlabautermann: Titel geändert.
Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.


Michael Stenzel - Do 17.04.03 02:40

Hallo!

Einmal mußt Du mit AddObject ein Object angeben, in deinem Beispiel

Delphi-Quelltext
1:
ListBox1.Items.AddObject('Abc', TObject(Text));                    

muß Heißen

Delphi-Quelltext
1:
ListBox1.Items.AddObject('Abc', TObject(Abc));                    

Dann darfst du die Objekte nicht freigeben, weil nur Zeiger(Referenzen) auf Ihnen gespeichert werden.

Delphi-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:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure ListBox1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  TAbc = class
    Text: String;
  end;

var
  Form1: TForm1;
  Abc: TAbc;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Abc := TAbc.Create;
  Abc.Text := '123456';
  ListBox1.Items.AddObject('Abc', TObject(Abc)); //<-Syntax
  // Abc.Free; <- Nicht freigeben
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
  // Abc := TAbc.Create; <- Objekt existiert noch
  Abc := TAbc(ListBox1.Items.Objects[ListBox1.ItemIndex]);
  ShowMessage( Abc.Text );
  // Abc.Free; <- Nicht freigeben
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Abc.Free; //<- Hier Freigeben
end;

end.


Ich hoffe das Du damit zurecht kommst.
Michael.

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.


Klabautermann - Do 17.04.03 10:58

Hallo und wilkommen im Delphi-Forum.

Vergebe bitte einen "vernünftigen" Titel für dieses Posting (und natürlich für zukünftige ;)). Damit ist einer gemeint, der darauf schließen lässt worum es hier geht.
Beachte hierzu bitte auch unsere Richtlinien:
Delphi-Forum Richtlinien hat folgendes geschrieben:
1.1 Beiträge

Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.


Um dieses Topic umzubenennen, musst du einfach beim ersten Beitrag auf Edit klicken. Dann kannst du den Titel ändern und drückst auf absenden.

Gruß
Klabautermann


bms - Do 17.04.03 20:09

@michael

danke. jetzt wo ich es sehe erscheint es logisch.

@ klabautermann

mir ist leider kein besserer titel eingefallen.


Klabautermann - Fr 18.04.03 11:17

Hallo,
bms hat folgendes geschrieben:
@ klabautermann
mir ist leider kein besserer titel eingefallen.

das fand ich nicht so schwer. Es geht ja nur darum, das die besucher des Forums schon beim lesen des Titels eine vorstellung bekommen worum es geht. Bei "wieso funktioniert das nicht" ist das nicht gegeben.

Gruß
Klabautermann