Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Socket.data Werte an Listview übergeben (https://www.delphipraxis.net/187967-socket-data-werte-listview-uebergeben.html)

codenoob 19. Jan 2016 22:28


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:
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.
Meine Messager Form
Delphi-Quellcode:
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;
Grüsse Tom

Photoner 20. Jan 2016 09:44

AW: Socket.data Werte an Listview übergeben
 
Probier mal:
Delphi-Quellcode:
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
Habs nicht getestet. Wenn Multiselektieren erlaubt muss natürlich alles vorher deselektiert werden.

codenoob 20. Jan 2016 16:58

AW: Socket.data Werte an Listview übergeben
 
Hab das getestet und es funktioniert leider auch nicht.

Luckie 20. Jan 2016 22:58

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.

codenoob 20. Jan 2016 23:15

AW: Socket.data Werte an Listview übergeben
 
ich hab es vorher so gemacht
Delphi-Quellcode:
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;
und so hat es funktioniert es geht einfach nicht mehr wenn ich LI.data := (P) durch LI.Data := TSocketData ersetze.
Kann man mit Finddata
Delphi-Quellcode:
Li:=listview1.finddata(2,p ,true,false);
überhaupt Werte einer übergebenen Klasse finden?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 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