AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TList + Exception

Ein Thema von Preddy2005 · begonnen am 9. Sep 2006 · letzter Beitrag vom 9. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Preddy2005

Registriert seit: 27. Nov 2005
Ort: Mettmann
38 Beiträge
 
#1

TList + Exception

  Alt 9. Sep 2006, 22:06
Hallo erstmal! Ich hoffe mir kann jemand mit dem Problem helfen... Habe schon stundenlang gesucht und ich finde einfach keine Antwort auf meine Frage. Ebenso finde ich überhaupt kein sinnvolles Tutorial, welche einem zeigt, wie man Objekte mit einer TList oder TObjectList passend verwendet. Hoffe mir kann jemand sagen, was falsch ist... Der unten stehende Code zeigt die Klassendeklaration und die Erzeugung der Klasseninstanzen. Na ja einfach mal drüber gucken...


Delphi-Quellcode:


Kleine Testklasse :

type TBenutzer_Objekt = class(TObject)
private
 // FBenutzerStatus : Integer;
  FBenutzerNummer : Integer;
  FBenutzername : String;
  FBenutzervewaltungsliste : TList;


Methode :

public
  procedure Baue_Benutzerverwaltungs_Liste(Benutzer_Login_Namen : String);
  procedure Gebe_Speicher_Fuer_Benutzerverwaltungsliste_Frei;

end;

Methodenfunktionalität :

procedure
TBenutzer_Objekt.Baue_Benutzerverwaltungs_Liste(Benutzer_Login_Namen : String);

var Temp_Liste : TStringList; // Temporäre Stringliste
    i : Integer; // Zählvariable
    Trenner : Integer; // Die Kommatapositionen mit Pos ermitteln
    PBenutzer_Objekt : ^TBenutzer_Objekt; // Zeiger auf die Klasseninstanzvariable
    Zu_Extrahierende_String : String; // Stringlisteneintrag wird umkopiert, und dann wird aus dem String gelöscht
    Benutzername : String; // Temporäre Benutzervariable
    Benutzernummer : Integer; // Temporäre Benutzervariable

begin
 Temp_Liste := TStringList.Create; // Stringliste erzeugen
 Temp_Liste.Text := Benutzer_Login_Namen; // Inhalt in die temporäre Stringliste kopieren
 if FBenutzervewaltungsliste = nil then FBenutzervewaltungsliste := Tlist.Create;
 Zu_Extrahierende_String := Temp_Liste.Text; // Inhalt umkopieren

  for i := Temp_Liste.Count-1 downto 0 do // Stringliste durchgehen
   begin
    New(PBenutzer_Objekt); // Ein neues Listenobjekt erzeugen
    Trenner := pos(',',Zu_Extrahierende_String);
    Benutzername := Copy(Zu_Extrahierende_String,1,Trenner-1); // Benutzernamen kopieren
    delete(Zu_Extrahierende_String,1,Trenner);
    Benutzernummer := StrToInt(Copy(Zu_Extrahierende_String,1,4)); // Benutzernummer kopieren
    PBenutzer_Objekt.FBenutzername := Benutzername; // Benutzernamen zuweisen -> Hier kracht es immer... Wieso?
Werde auch nicht aus den Beiträgen hier schlau...

    PBenutzer_Objekt.FBenutzerNummer := Benutzernummer; // Benutzernummer zuweisen
    FBenutzervewaltungsliste.Add(PBenutzer_Objekt); // Listenobjekt zur Liste hinzufügen
  end;

  FreeAndNil(Temp_Liste); // Speicher freigeben
end;
Das sind die OnCreate und OnClose Aufrufe :
Delphi-Quellcode:


Im OnCreate Event steht das

   Benutzer_Objekt := TBenutzer_Objekt.Create;
   Hiermit habe ich doch die Klasseninstanz erzeugt, oder?


Im OnClose

   FreeAndNil(Benutzer_objekt);

Wollte zuerst auch ein dynamisches Array verwenden, aber die Tlist
eignet sich für den späteren Ausbau einfach mehr.

Hoffe jemand wäre bereit mir den Fehler zu erklären oder einen Forumlink oder einen Tutoriallink zu schicken.
Danke im voraus

Gruß

Matthias
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: TList + Exception

  Alt 9. Sep 2006, 22:10
Du könntest uns noch sagen, welche Exception wo auftritt.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

Re: TList + Exception

  Alt 9. Sep 2006, 22:15
1. durch den code blick ich gar nicht durch
2. was genau hast du in deiner liste?
3. was für eine exception? wo?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#4

Re: TList + Exception

  Alt 9. Sep 2006, 22:17
Delphi-Quellcode:
    PBenutzer_Objekt.FBenutzername := Benutzername; // Benutzernamen zuweisen -> Hier kracht es immer... Wieso?
Werde auch nicht aus den Beiträgen hier schlau...
Da sollte stehen

PBenutzer_Objekt^.FBenutzername := Benutzername; Zur Erklärung: PBenutzer_Objekt ist ein Zeiger, der hat keine Eigenschaft FBenutzername - die hat nur das Objekt auf den der Zeiger zeigt, also PBenutzer_Objekt^.

Insgesamt ist Deine Methode aber nicht sehr zeitgemäß - so hat man 1990 programmiert. Evtl. schreib ich mal den Code um und schick ihn dir gleich.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: TList + Exception

  Alt 9. Sep 2006, 22:21
Pointer werden implizit dereferenziert.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#6

Re: TList + Exception

  Alt 9. Sep 2006, 22:25
Zitat von Preddy2005:
Das sind die OnCreate und OnClose Aufrufe :
Delphi-Quellcode:


Im OnCreate Event steht das

   Benutzer_Objekt := TBenutzer_Objekt.Create;
   Hiermit habe ich doch die Klasseninstanz erzeugt, oder?
Nein!!

Eine Klasse erzeugst Du, indem du ihre Create-Methode aufrufst - das aber von außen und nicht im Create!!

Das jetzt genauer zu erklären ist zu aufwendig - schau Dir mal ein gutes Buch oder ein gutes Tutorial über objektorientiertes Programmieren an.
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#7

Re: TList + Exception

  Alt 9. Sep 2006, 22:27
Zitat von 3_of_8:
Pointer werden implizit dereferenziert. ;)
Seit wann das? Das gilt nur wenn Du Klassen hast - die sind implizit Pointer und werden implizit dereferenziert. Hier ist die Variable aber ein Zeiger und den muss man explizit dereferenzieren.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#8

Re: TList + Exception

  Alt 9. Sep 2006, 22:31
tatsächlich, astrein ist das nicht...

@bttb930: Doch, typisierte Pointer, insbesondere auf records, werden beim Zugriff auf Eigenschaften implizit dereferenziert.

Aber so wies hier ist machts natürlcih null Sinn....
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Preddy2005

Registriert seit: 27. Nov 2005
Ort: Mettmann
38 Beiträge
 
#9

Re: TList + Exception

  Alt 9. Sep 2006, 22:35
Ich versteh jetzt gar nicht mehr. Sorry, aber ich habe hier ein Buch zuhause ... Ungefähr 1000 Seiten. Delphi 4 Kochbuch, dort steht nix drinne...

Wenn mir jemand ein gutes Buch empfehlen kann, dann wäre das sehr hilfreich. In meinem Buch finde ich auch keine Hilfe zu dem Problem.

Und die Tutorials sind auch alle sehr schlecht, um das Programmieren mit Klassen und Co zu erlernen...

Na ja dann muss ich mich halt gedulden... Danke für die Antwort...

Gruß MAtthias
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#10

Re: TList + Exception

  Alt 9. Sep 2006, 22:40
So würde ich das machen:

Delphi-Quellcode:
type
  TBenutzer = class
  private
    FName: string;
    FNummer: Integer;
  public
    constructor: Create(const aString: string);
    property Name: string read FName;
    property Nummer: Integer read FNummer;
  end;

  TBenutzerListe = class
  private
    List: TList;
  public
    constructor Create;
    destructor Destroy;
    procedure Initialize(const ABenutzerListe: string);
    function GetBenutzer(I: Integer): TBenutzer;
    function GetCount: Integer;

    property Benutzer[i: Integer]: TBenutzer read GetBenutzer; default;
    property Count: Integer read GetCount;
  end;

  constructor TBenutzer.Create(const aString: string);
  begin
    FName := Copy(aString, 1, Pos(',', aString)-1);
    FNummer := StrToInt(Copy(aString, Pos(',', aString)+1, Length(aString)));
  end;

  constructor TBenutzerListe.Create;
  begin
    inherited;
    List := TList.Create;
  end;

  destrucotr TBenutzerListe.Destroy;
  begin
    inherited;
    List.Free;
  end;
 
  function TBenutzerListe.GetBenutzer(I: Integer): TBenutzer;
  begin
    Result := List[i] as TBenutzer;
  end;

  function TBenutzerListe.GetCount: Integer;
  begin
    Result := List.Count;
  end;

  procedure TBenutzerListe.Initialize(const ABenutzerliste: string);
  var
    temp: TStringList;
    i: Integer;
  begin
    temp := TStringList.Create;
    try
      temp.Text := ABenutzerListe;
      for i := 0 to temp.Count-1 do
        List.Add(TBenutzer.Create(temp[i]));
    finally
      temp.Free;
    end;
  end;
  

procedure FormButton1Click(Sender: TObject);
var
  BenutzerListe: TBenutzerListe;
  i: Integer;
begin
  BenutzerListe := TBenutzerListe.Create;
  BenutzerListe.Initialize(MeineBenutzerListe);
  for i := 0 to BenutzerListe.Count-1 do
    Memo.Lines.Add(Format('%s -> %d', (BenutzerListe[i].Name, BenutzerListe[i].Nummer]));
end;
Irgendwie so. Memo ist natürlich ein Memo-Feld auf dem Form. Woher MeineBenutzerListe kommt weiß ich nicht genau - die hast Du ja.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz