Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Eigenen Typ definieren ?


mambo - Do 18.03.04 10:05
Titel: Eigenen Typ definieren ?
Hallo !

Ich bin dabei, ein kleines Chat-Programm zu schreiben und da möchte ich zur Anzeige der eingeloggten User folgenden Typ definieren

TUsers[Index]

mit den Eigenschaften
Nickname: String;
und
RemoteAddress: String;

Aber wie ist die Syntax dazu ?

Ich möchte im Programm dann wie folgt vorgehen:

im öffentlichen Deklarationsbereich

Delphi-Quelltext
1:
  var Users: TUsers;                    


OnFormCreate:

Delphi-Quelltext
1:
  Users := TUsers.Create;                    


Wenn sich ein Benutzer anmeldet:

Delphi-Quelltext
1:
2:
3:
4:
5:
  With Users.Add do
  begin
     Nickname := xyz;
     RemoteAddress := xyz;
  end;


und dann im Quelltext auf den jeweiligen User zugreifen mit z.B.:

Delphi-Quelltext
1:
  Edit1.Text :=  Users[10].Nickname;                    


Oder hat jemand dafür eine bessere Idee ?

Danke für Eure Hilfe !
Heinz

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


maximus - Do 18.03.04 11:12

Hi.

Ich würde dir eine Collection empfehlen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
type
  TUser = class(TCollectionItem)
  ...
  published
    property Nickname: String;     
    property RemoteAddress: String
  end;

  TUsers = class(TCollection);


Du müsstest dann allerdings ein bisschen casten :wink: ...aber das ist normal!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Users := TUsers.Create(TUser);
...
With TUser(Users.Add) do 
  begin 
     Nickname := xyz; 
     RemoteAddress := xyz; 
  end
...
Edit1.Text :=  TUser(Users[10]).Nickname;



so in etwa würde es gehen. Wenn du den spass auch noch auf platte speichern willst, dann könntest du meine erweiterte collection-klasse verwenden: http://www.delphi-forum.de/viewtopic.php?t=18605

mfg.


mambo - Do 18.03.04 12:04

Das funktioniert bei mir nicht !!!! Fehlermeldung: Anweisung INDEX, READ oder WRITE erwartet !


Delphi-Quelltext
1:
2:
3:
4:
5:
type 
  TUser = class(TCollectionItem)
  published
     property Nickname: String// hier ist der Fehler
  end;


Was mache ich falsch ? muß man da nicht so eine Art "read" und "write" Prozedur für Properties schreiben und Private-Variablen (z.B. fNickname) des Typs deklarieren ?
Tut mir leid, habe mit eigenen Typen noch nie gearbeitet.

Kann mir das jemand mal für "Dummies" erklären ?

Danke
Heinz

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


maximus - Do 18.03.04 22:43

mambo hat folgendes geschrieben:
Kann mir das jemand mal für "Dummies" erklären ?


Äh ja! Kann ich :wink:

Du hast recht bei den properties fehlen die getter und setter dinger. Musst du halt einfach hinschreiben, so wie man das macht beim programmieren *g* ...oder aber für leute mit professional versionen: Zur besagten deklaration gehen und ctrl+shift+c drücken! Die fehlenden elemente der klasse sollten dann automatisch erstellt werden.

mfg.


mambo - Fr 19.03.04 09:02

...ok, war auch ne blöde Frage... mit etwas probieren hab ich's jetzt hingekriegt...

...ohne Deine Hilfe hätt ich's aber glaub ich nicht geschafft... man brauch halt manchmal einen kleinen Denkanstoß...

Also mein nun FUNKTIONIERENDER Code:

Deklaration

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  TUsers = class(TCollection);   // Liste der User (Collection)

  TUser = class(TCollectionItem)   // Typ für die einzelne User der Liste (CollectionItem)
  private
    FNickname: String;
    FRemoteAddress: String;
  published
    property Nickname: String  read FNickname write FNickname;
    property RemoteAddress: String  read FRemoteAddress write FRemoteAddress;
  end;


Typ erstellen:

Delphi-Quelltext
1:
  Users := TUsers.Create(TUser);                    


User zur Liste hinzufügen:

Delphi-Quelltext
1:
2:
3:
4:
5:
    With TUser(Users.Add) do
    begin
      Nickname := strNickname;
      RemoteAddress := strRemoteAddress;
    end;


maximus - Fr 19.03.04 11:26

Genau...probieren geht über studieren 8)

Könntest auch Set-methoden verwenden, zB. für die IP, dann kannst du noch prüfen ob sie korrekt eingegeben wurde etc.

mfg.