Autor Beitrag
bms
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 735

Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
BeitragVerfasst: Do 17.04.03 01:17 
ich lerne gerade delphi und bin bei objekten gelandet. in addobject kann ich doch ein objekt einbinden. wieso funktioniert das hier nicht.

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 133


D3 Prof, D7 PE
BeitragVerfasst: Do 17.04.03 02:40 
Hallo!

Einmal mußt Du mit AddObject ein Object angeben, in deinem Beispiel
ausblenden Delphi-Quelltext
1:
ListBox1.Items.AddObject('Abc', TObject(Text));					

muß Heißen
ausblenden Delphi-Quelltext
1:
ListBox1.Items.AddObject('Abc', TObject(Abc));					

Dann darfst du die Objekte nicht freigeben, weil nur Zeiger(Referenzen) auf Ihnen gespeichert werden.
ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 735

Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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