Autor Beitrag
schlumsch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

alles Win :)
Delphi 2005 Prof, Delphi 2007
BeitragVerfasst: Di 26.10.04 09:06 
Hallo allerseits...

also ich bau mir nen Objekt meines Tpys und speichere dieses in `ner Listbox und in einer eigenen Liste vom Typ TList. Dann will ich beim anklicken auf die Listbox einfach nur das das programm meine liste durchsucht und wenn es das gewählte objekt findet (identifiziert nach der Eingenschaft "Name") soll es "Laut geben"
(sowohl die Liste wie auch das Objekt sind vorsichtshalber globale Variablen)
Beim Zugriff auf Tmp_objekt.name krieg ich aber ne Fehlermeldung, weis wer wieso und wie das zu beheben ist?
Tmp_Objekt is doch auch nur ein Zeiger aufs Objekt, genmauso wie der TListinhalt - also müsst ich das doch zuweisen können oder?



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:
Var ToDoObjekt : TToDo;
todo_objekte_liste : TList;
...

procedure TAlarmform.BitBtn_hinzufuegenClick(Sender: TObject);   
begin   
 if todo_objekte_liste = NIL then todo_objekte_liste := TList.create;   
 ToDo_Objekt := TToDo.create;   
 ToDo_Objekt.Kategorie := 'NIL';   
 ToDo_Objekt.Text := 'NIL';   
 ToDo_Objekt.AnzeigeText := 'NIL';   
 ToDo_Objekt.Name := 'NIL';   
 ToDo_Objekt.Kategorie := Edit_todo_kategorie.text; // werte --> Objekt   
 ToDo_Objekt.Anzeigetext :=  Edit_todo_anzeigetext.text;   
 ToDo_Objekt.text :=  Memo_todo_text.Text;   
 todo_objekte_liste.add(ToDo_Objekt);              // objekt --> objekteliste   
 ListBox_todo.items.addobject(ToDo_Objekt.Kategorie + '-->' + ToDo_Objekt.Anzeigetext, ToDo_Objekt);   
 todo_objekt.Name := 'TDO'+inttostr((Listbox_todo.items.IndexOfObject(ToDo_Objekt))); // Objektname abh. von position in Listbox   
 showmessage('Objektname :' + Todo_objekt.name)   
 end;

procedure TAlarmform.ListBox_todoClick(Sender: TObject);   
Var Tmp_Objekt : TToDo;   
             i : word;
begin   
 if Listbox_todo.ItemIndex <> -1 then   
 begin   
  Tmp_Objekt := TToDo.create;   
  for i := 0 to (todo_objekte_liste.count-1do   
  begin   
    Tmp_Objekt := TToDo(todo_objekte_liste.items[i]);   
    if Tmp_Objekt.Name = ('TDO'+inttostr(Listbox_todo.itemindex)) then  // <-- ERROR!!!   
    showmessage('bla');   
  end;   
  Tmp_objekt.free;   
 end;   
end;


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

_________________
icq 102779206
"God is real, unless declared integer..."
dmx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Gentoo Linux, Win XP Pro
D6 Prof, K3 Open, Freepascal
BeitragVerfasst: Do 04.11.04 00:29 
hallo,

nun, eine instanz deiner TToDo-klasse existiert doch schon. darum brauchst du beim zugriff darauf auch keine neue instanz mit "Tmp_Objekt := TToDo.create;" zu erzeugen.
vorausgesetzt alle zeiger der todo_objekte_liste zeigen auf existierende objekte, aber das sollte eigentlich der fall sein, soweit ich das erkennen kann.

gruß, dmx.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
rocedure TAlarmform.ListBox_todoClick(Sender: TObject);
Var Tmp_Objekt : TToDo;
             i : word;
begin
 if Listbox_todo.ItemIndex <> -1 then
 begin
  //Tmp_Objekt := TToDo.create;
  for i := 0 to (todo_objekte_liste.count-1do
    if TToDo(todo_objekte_liste[i]).Name = ('TDO'+inttostr(Listbox_todo.itemindex)) then
      showmessage('bla');
  //Tmp_objekt.free;
 end;
end;