AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Socket.data Werte an Listview übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

Socket.data Werte an Listview übergeben

Ein Thema von codenoob · begonnen am 19. Jan 2016 · letzter Beitrag vom 20. Jan 2016
Antwort Antwort
codenoob
(Gast)

n/a Beiträge
 
#1

Socket.data Werte an Listview übergeben

  Alt 19. Jan 2016, 22:28
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 = 'Connectthen 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
  Mit Zitat antworten Zitat
Photoner

Registriert seit: 6. Dez 2012
Ort: Nürnberg
103 Beiträge
 
Delphi 10.1 Berlin Starter
 
#2

AW: Socket.data Werte an Listview übergeben

  Alt 20. Jan 2016, 09:44
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.
Chris
  Mit Zitat antworten Zitat
codenoob
(Gast)

n/a Beiträge
 
#3

AW: Socket.data Werte an Listview übergeben

  Alt 20. Jan 2016, 16:58
Hab das getestet und es funktioniert leider auch nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Socket.data Werte an Listview übergeben

  Alt 20. Jan 2016, 22:58
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
codenoob
(Gast)

n/a Beiträge
 
#5

AW: Socket.data Werte an Listview übergeben

  Alt 20. Jan 2016, 23:15
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
Li:=listview1.finddata(2,p ,true,false); überhaupt Werte einer übergebenen Klasse finden?

Geändert von codenoob (20. Jan 2016 um 23:20 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 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