Autor Beitrag
mambo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76

Win XP
D6 Prof
BeitragVerfasst: Do 18.03.04 10:05 
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
ausblenden Delphi-Quelltext
1:
  var Users: TUsers;					


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


Wenn sich ein Benutzer anmeldet:
ausblenden 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.:
ausblenden 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.

_________________
Es ist besser, Genossenes zu bereuen, als dass man nichts genossen hat.
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Do 18.03.04 11:12 
Hi.

Ich würde dir eine Collection empfehlen:

ausblenden 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!

ausblenden 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: www.delphi-forum.de/viewtopic.php?t=18605

mfg.

_________________
mfg.
mâximôv
mambo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76

Win XP
D6 Prof
BeitragVerfasst: Do 18.03.04 12:04 
Das funktioniert bei mir nicht !!!! Fehlermeldung: Anweisung INDEX, READ oder WRITE erwartet !

ausblenden 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.

_________________
Es ist besser, Genossenes zu bereuen, als dass man nichts genossen hat.
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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.

_________________
mfg.
mâximôv
mambo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76

Win XP
D6 Prof
BeitragVerfasst: 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
ausblenden 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:
ausblenden Delphi-Quelltext
1:
  Users := TUsers.Create(TUser);					


User zur Liste hinzufügen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
    With TUser(Users.Add) do
    begin
      Nickname := strNickname;
      RemoteAddress := strRemoteAddress;
    end;

_________________
Es ist besser, Genossenes zu bereuen, als dass man nichts genossen hat.
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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.

_________________
mfg.
mâximôv