![]() |
Socket.data Werte an Listview übergeben
Hi Delphianer's
Ich übergebe Socket.data Werte an meine Listview wo die Verbundenen User meines Messager's eingetragen werden. Die Funktioniert auch ganz gut nur habe ich das Problem das ich wenn sich ein User abmeldet er nicht aus der Listview gelöscht wird. Unit SocketWerte
Delphi-Quellcode:
Meine Messager Form
unit SocketWerte;
interface uses windows, classes, Forms, ComCtrls, Controls, sysutils, strutils,dialogs, ScktComp; type TSocketData = class Data: ansistring; Socket: TCustomWinSocket; User: string; Color: string; Font: String; ListItem: TListItem; Form: pointer; Idle: string; end; end.
Delphi-Quellcode:
Grüsse Tom
procedure TClientForm.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin .... .... .... if Command = 'Connect' then begin SocketData.User := Split(Data,'|',1); Delete(Data,1,Length(Split(Data,'|',1)) +1); SocketData.Color := Split(Data,'|',1); Delete(Data,1,Length(Split(Data,'|',1)) +1); SocketData.Font := Split(Data,'|',1); Delete(Data,1,Length(Split(Data,'|',1)) +1); SocketData.Socket := Socket; LI := ListView1.Items.Add; Li.Data := socketdata; LI.ImageIndex := 0; LI.Caption := SocketData.User; li.SubItems.add(SocketData.Color); Li.SubItems.add(SocketData.Font); end; .... .... .... end; procedure TClientForm.ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); var Li : TListItem; P : Pointer; begin integer(P) := socketdata.Socket.Handle; Li:=listview1.finddata(0,P,true,false); if Li<>nil then begin Li.Delete; end; end; |
AW: Socket.data Werte an Listview übergeben
Probier mal:
Delphi-Quellcode:
Habs nicht getestet. Wenn Multiselektieren erlaubt muss natürlich alles vorher deselektiert werden.
procedure TClientForm.ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
var Li : TListItem; P : Pointer; begin integer(P) := socketdata.Socket.Handle; Li:=listview1.finddata(0,P,true,false); listview1.Selected := Li; listview1.DeleteSelected; end |
AW: Socket.data Werte an Listview übergeben
Hab das getestet und es funktioniert leider auch nicht.
|
AW: Socket.data Werte an Listview übergeben
Falsches Vorgehen, wie ich meine. Sammel die Daten in einer geeigneten Datenstruktur. Zum Beispiel in einer ObjektListe in der jeder Benutzer ein Objekt darstellt. Diese Datenstruktur zeigst du im Listview an. Meldet sich ein Benutzer ab, wird das Objekt aus der Liste gelöscht und die Routine zum Darstellen im Listview erneut aufgerufen.
|
AW: Socket.data Werte an Listview übergeben
ich hab es vorher so gemacht
Delphi-Quellcode:
und so hat es funktioniert es geht einfach nicht mehr wenn ich LI.data := (P) durch LI.Data := TSocketData ersetze.
procedure TClientForm.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
.... .... .... integer(p) := Socket.Handle; Li.Data := p; LI.ImageIndex := 0; LI.Caption := SocketData.User; li.SubItems.add(SocketData.Color); Li.SubItems.add(SocketData.Font); .... .... .... end; procedure TClientForm.DisconnectSocket(SocketData: TSocketData); var Li : TListItem; P : Pointer; begin integer(P) :=Socket.Handle; Li:=listview1.finddata(2,p ,true,false); if Li<>nil then begin Li.Delete; end; if SocketData = nil then exit; end; Kann man mit Finddata
Delphi-Quellcode:
überhaupt Werte einer übergebenen Klasse finden?
Li:=listview1.finddata(2,p ,true,false);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz