Ich habe das Programm mitlerweile erweitert (erweitern wollen).
Gedanke war, das Record um ein String-Array zu erweitern und dort die Items der ListBox zu speichern.
Leider lässt sich die Größe des Arrays nicht bestimmen. Das progamm schmiert immer an der Stelle ab.
Fehlermeldung:
Im Projekt P_Server.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 00403400 in Modul 'P_Server.exe'. Lesen von Adresse 00000000' aufgetreten.
Der Code sieht folgendermaßen aus:
Code:
type
TChatMessage = packed Record
Text : String[255];
User : String[255];
Clients : Array of String;
Command : Integer;
End;
...
var
i : Integer;
begin
listbox.Clear();
for i := 0 to clientList.Count -1 do
begin
listbox.Items.Add(IntToStr(clientList.Items[i].SocketID) + ' ' + clientList.Items[i].Username);
end;
chatMessage.Command := 4; //4 = ListBox Update
SetLength(chatMessage.Clients, listBox.Items.Count); //HIER KOMMT DER FEHLER!
for i := 0 to listBox.Items.Count -1 do
begin
chatMessage.Clients[i] := listBox.Items[i];
end;
for i := 0 to Server.Socket.ActiveConnections -1 do
begin
Server.Socket.Connections[i].SendBuf(chatMessage, SizeOf(chatMessage));
end;
Ich denke vom Ansatz wird das funktionieren. Allerdings kann ich mir nicht erklären wieso dieser Fehler auftritt.
Im übrigen wäre ich auch über andere Vorhergehensweisen für einen solchen Prozess dankbar, sofern man dadurch vielleicht "sauberer" programmiert.
Mfg