Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - listenklasse erstellen?


Cayenne - Mi 24.01.07 14:11
Titel: listenklasse erstellen?
servus, ich muss eine listenklasse in eine unit einfügen, wodurch man listenglieder finden, löschen, und deren nachfolger auslesen lassen können soll.
ich habe die funktionen geschrieben, habe aber fehler über fehler...

bitte um hilfe... ty


nivosta - Mi 24.01.07 14:17

Hi,

was meinst du denn mit Listenklassten? Meinst du eine Collection?
Am besten mal den Source Posten.

Gruß
Hubert


Cayenne - Mi 24.01.07 14:20

aufgepasst->


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:
unit Listenklasse;

interface
type
  Tliste = class(tobject);

private

 function findeObject(ykey:string):TObject;
 function  liefereNachfolger(yObjekt:TObject):TObject;
 Procedure loescheNachfolger (yKey:string);
 constructor create (ykey:string, yObjekt:Tobject);

public

Objekt, nachfolger:TObejct;
key: String;
interface

implementation

constructor create (ykey:string, yObjekt:Tobject);
begin
 key := yKey;
 objekt := yobjekt;
end;

function TListe.findeObjekt(ykey:string, yObjekt:Tobject):TObject;
begin
 if Key:yKey then
  result:=Objekt;
 else if not (Nachfolger:=nil then)
  result:=Nachfolger.findeObjekt(yKey)
   else result:=nil;
end;

function TListe.lieferNachfolger(ykey:string, yObjekt:Tobject):TObject;

begin
 if Objekt=yObjekt then
  if not (Nachfolger = nilthen
   result := Nachfolger.Objekt
  else
   if not (Nachfolger = nilthen
    result :=Nachfolger.liefereNachfolger(yObjekt:Tobjekt):tobjekt
   else
    result:= nil;
end;



end.


Moderiert von user profile iconjasocul: Delphi-Tags hinzugefügt


elundril - Mi 24.01.07 14:25

man kann auch delphicode verwenden. mit [delphi ] und [/delphi ]. nur halt ohne den leerzeichen nach "delphi". dann hast du nen highlighter und es ist in einer schönen weißen box.

lg el


Cayenne - Mi 24.01.07 14:37

me = noob^^


nivosta - Mi 24.01.07 14:38

Bitte, bitte, bitte mal Programierstile angewöhnen, also grundsätzlich sollte man if .. then immer in begin .. end setzen auch wenn es nur eine zeile ist also
if ... then
begin
.
end
else
begin
.
end;

So Org.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
function TListe.findeObjekt(ykey:string, yObjekt:Tobject):TObject;
begin
if Key:yKey then
result:=Objekt;
else if not (Nachfolger:=nil then)
result:=Nachfolger.findeObjekt(yKey)
else result:=nil;
end;


Änderung:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function TListe.findeObjekt(ykey:string, yObjekt:Tobject):TObject;
begin
  if Key = yKey then
  begin
     result:=Objekt;
  end
  else 
  begin
    if Nachfolger <> nil then
    begin      
        result:=Nachfolger.findeObjekt(yKey);
   end
   else 
   begin
       result:=nil;
   end;
 end;
end;


gesachtelte if then if then sind dann auch besser lessbar und man sieht die Fehler schneller.

Es ist bei diesem Problem wahrscheinlich besser eine TCollection und TCollectionItem zu benutzen damit hat man die komplette Kontrolle über die Liste und sogar der public Property's der Item objecte


Kroko - Mi 24.01.07 14:42

zum zweiten Mal: hier gib es Code-Tags zur besseren Lesbarkeit:


Delphi-Quelltext
1:
2:
3:
4:
procedure Bla;
begin
  TueEtwas;
end;

sieht doch gleich viel besser aus :lol:

per Edit kann man dies sogar korrigieren :twisted: