

Delphi Clientdisconnect Eventinde Listviewden İtem Silme[Yardım]
-
formda 1 serversocket 1 tanede listviewmevcut.
şimdi socket te onclientconnect eventine
ListView1.Items.Add;
index:=listview1.Items.Count-1;
ListView1.Items[index].Caption:=pcadi;
ListView1.Items[index].SubItems.Add(ip);şeklinde bir kodla listviewe düzgünce ekleme yapabiliyorum.
Sorum şu bu clientdiscconnect olduğu zaman nasıl bir kod kullanmalıyımki dc olan makineyi listviewden kaldırayım.
Timer vs kullanmadan yapmak mümkün mü ?
-
>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<up
-
kod tam aklımda değil ama şöyle izah edeyim
listeya sağ tık eklersin sağ tıka bir sil yazarsın silin altına da ListView1.Items.delete dersin olar biter ( kod parametresi yanlış olabilir )
-
selected olan itemi değil clientdisconnect olan itemi silmeyi istiyorum.
biraz daha açayım. Listview şu şekilde düşünün.
----ad --------- ip --------- tarih ----
genki 127.0.0.1 11.02.2010
genki2 192.168.1.1 11.02.2010
şimdi clientconnect olayına item ekleme olayını yaptım. Yani dışardan bi bağlantı geldiğinde ad ip tarih şekilde ekleme yapıyor. Bu bağlantılar aktif olduğu sürece listviewde gözüksün ancak bağlantı disconnect olduğu zaman kendini sildin. Yani genki2 clienti kapadı ve disconnect olduğu zaman benim listview
----ad --------- ip --------- tarih ----
genki 127.0.0.1 11.02.2010
bu şekilde olsun.
-
koy bi timer hiç uğraşma
serverin event'ında bağlı olup olmadığını kontrol edebilceğin bi kontrol yok çünkü
ama indy serverin tcp serverinda ondisconnect eventı var o işini görmüyomu
-
şimdi şöyle bişi var
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.SimpleText:=(socket.RemoteAddress + ' baglantisi koptu');
end;serversocket1clientdisconnect olduğu an ben hangi adresin koptuğunu statusbara rahatlıkla basabiliyorum. Düşündüm ki kopan clientin ip numarasını biliyorsam timera gerek kalmadanda listviewden bu ip numarasına ait olan satırı kaldırabilirim. Ama listviewde sadece listview1.items.delete(1) şeklinde silme oluyor sanırsam. Ordaki 1 de satır noyu temsil ediyor.
Şöle birşey düşündüm kopan ip numarasını listviewde aratıcak[ip adlı colunms mevcut] eğer ipyi bulursa count ile hangi satırda olduğunu integer olarak bir değişkene atayıp son olarakta listview1.items.delete(degisken) olarakta listviewden kaldırcak.
Böyle birşey mümkün mü ? ki bana mümkün gibi geliyor ama delphi bilgim çok az olduğu için koda dökemedim :D
-
up.
-
sorunu cözdüm. Belki faydası olur kodları paylaşayım
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var
ara: TListItem;
begin
statusbar1.SimpleText:=(socket.RemoteAddress + ' baglantisi koptu');
ara := ListView1.FindCaption(0, socket.RemoteAddress, True, True, False);
if ara <> nil then
begin
ListView1.Selected := ara;
ara.MakeVisible(True);
ListView1.SetFocus;
Listview1.DeleteSelected;
end;
end;