ImageList, ListView i HGG = problem

0

W ListView trzymam numery + nazwy a ImageList trzymam statusy.

Mam taki kod:

procedure TForm1.HGG1UserChangeStatus(Sender: TObject; UserIndex,
  GGNumber: Integer; Status: TUserStatus; Description: String);
var
i: integer;

begin

for i:=0 to Listview1.Items.Count -1 do
begin

If StrToInt(ListView1.Items[i].SubItems.Strings[i])= Listview1.Itemindex then

case Status of
      usNotAvailable: Listview1.Items[0].ImageIndex := 0;
      usAvailable: Listview1.Items[2].ImageIndex := 2;
      usBusy: Listview1.Items[1].ImageIndex := 1;
    end;

end;
end;
procedure TForm1.Button10Click(Sender: TObject);
var
Li: TListItem;
begin
Li := ListView1.Items.Add;
Li.Caption := Edit6.Text; //nazwa wyswietlana kontaktu
Li.SubItems.Add(Edit5.Text); //numer gg kontaktu
Li.ImageIndex := 0; //ustawiamy ikone na niedostepny

Ok. Loguje się na swój inny numer. Gdy pojawię się dostępny to niestety w ListView nic się nie zmienia. Wszystko jest poprawnie zalogowany i numer do sprawdzenia także. Kompiluje się no ale nie odczytuje czy się zmienił czy nie.

ImageList posiada takie statusy: dostępny 2 zaraz wracam 1 niedostępny 0

Może coś źle robię nie wiem. Proszę o wskazówki.

P.S
Jak wartość SubItems odczytać do label ?
Chciałem sam zrobić ale mi nie wychodziło:

Label1.Caption:=ListView1.Items[ListView1.??????]; 

Proszę o pomoc

0

SubItems do Label :

Label.Caption := '';
for i:=0 to ListView.Items[który_item].SubItems.Count -1 do
 Label.Caption:=Label.Caption + ListView.Items[który_item].SubItems[i];
0

A reszta ? Dlaczego status się nie zmienia w ListView nie zmienia się na dostępny jeśli pojawie się ?

0

Wsadź to do zdarzenia HGG.OnUserChangeStatus + HGG.OnUsersGetFromServer + HGG.OnUsersListChange :

var
  i: Integer;
  Item: TListItem;
begin
  lbKontakty.Clear;
  lbKontakty.Items.BeginUpdate;

  for i := 0 to HGG.Users.Count - 1 do
  begin
    Item := lbKontakty.Items.Add;
    case HGG.Users[i].Status of
      usNotAvailable: Item.ImageIndex := 0;
      usAvailable: Item.ImageIndex := 1;
      usBusy: Item.ImageIndex := 2;
    end;
    Item.Caption := HGG.Users[i].Name;
    Item.SubItems.Add(IntToStr(HGG.Users[i].GGNumber));
    Item.SubItems.Add(HGG.Users[i].IP);
  end;
  lbKontakty.Items.EndUpdate;

lbKonakty to ListView
Wstaw na forme ImageList
Do ListView.SmallImages i ListView.StateImages przypisz ImageList.

W ImageList dodaj od indexu 0 3 ikonki symbolizujace status kontaktu (niedostepny, dostepny, zaraz wracam) i po sprawie

Odczytywanie opisów + IP:

Dodaj w ListView.OnClick

if lbKontakty.SelCount <> 0 then
 begin

  lblUserGG.Caption := IntToStr(HGG.Users.user[lbKontakty.itemindex].GGNumber);
  lblUserOpis.Caption := HGG.Users.User[lbKontakty.ItemIndex].Description;

  if HGG.Users.User[lbKontakty.ItemIndex].IP = '0.0.0.0' then
  begin

   lblUserIP.Caption := 'Adres prywatny';

  end else
  begin

   lblUserIP.Caption := HGG.Users.User[lbKontakty.itemindex].IP;

  end;
 end;

lbKontakty to ListView
lblUserIP, lblUserGG, lblUserDescription to labele zawierajace kolejno IP, Numer GG, Opis kontaktu zaznaczonego na liscie.

Obawiam sie ze bedzie dzialal tylko gdy ListView nie bedzie sortowany alfabetycznie.

0

A testowałeś to ? Jeśli Ci działa to ja muszę coś inaczej mieć ustawione. Jakie miałeś IP przy tworzeniu kodu ? (mi nie działa status się nie zmienia).

Aha. Czy że status się nie zmienia to może być przez to że mam ukryte IP w tym numerze którym chcę odczytać status ?

0

Nie. Dziala bo mam na tym oparty swoj program.

Musisz najpierw wczytac liste kontaktow np. z pliku zeby dodalo Ci konatkty do HGG.Users.

NP.
HGG.Users.LoadFromFile('plik z wyeksportowanymi kontaktami z gg.txt');

To Ci wczytuje kontakty z pliku. Automatycznie jest uruchamiane zdarzenie OnUsersListChange i dodaje Ci wtedy kontakty do ListView'a.

Nastepnie logujesz sie na swoje konto GG (poprzez komponent HGG). Jak sie zalogujesz to zmieniaja sie statusy kontaktow na liscie, poniewaz uruchamiane jest zdarzenie OnUserChangeStatus, ktore powoduje przypisanie odpowiednich ikon do odpowiednich statusow przy kazdym kontakcie.

Pamietaj zeby dodac ta procedure ktora Ci wyslalem do trzech zdarzen, a nie tylko jednego.

0

No tak ale ja chciałbym żebym mógł dodawać kontakty samemu a nie wczytywać. Czyli:

var
Li: TListItem;
begin
Li := lbKontakty.Items.Add;
Li.Caption := Edit6.Text; 
Li.SubItems.Add(Edit5.Text);
Li.ImageIndex := 0;

I żeby po dodaniu sprawdzało :) Nie chcę wczytywać listy.

P.S
Co do wczytywania. Jak muszą być kontakty zapisane ? standardowo (454512,'test',true)

Takim sposobem czy coś ? Ja próbowałem wgrać kontakty z pliku pobranego z gg to biorę tak:

HGG1.Users.LoadFromFile('c:\kontakty.txt');

Jednak wolę nie ładować. Chcę dodawać i po naciśnięciu klawisza żeby dodać wtedy jest takie odświerzanie czy statusy się zmieniły :)

I tak Ci już dużo zawdzięczam :)

0

To w takim razie nie dodawaj do ListView tylko poprzez HGG.

HGG.Users.Add(4542156,'test',true);

Wtedy samo Ci odswiezy wszystko w ListView.

0

Chłopie jesteś WILEKI !

Napisz mi adres to Ci kurierem wyśle Ogrom piwaaaaaaa !

A mam jedno pytanie.
A jak bym chciał z pliku załadować ale po kliknięciu na button. Z podanej ścieżki. To jak zrobić żeby załadować z pliku do ListView i jak musi wyglądać plik *.txt ?

Możesz jeszcze mi w tym pomóc ? Jak wygląda Twoje ładowanie i jak wygląda plik w środku:)

Jesteś WILEKI !

0

Posadź na formę OpenDialog i w OnClick Buttona daj takie coś :

if OpenDialog.Execute then HGG.Users.LoadFromFile(OpenDialog.FileName);

Zapisujesz przez HGG.Users.SaveToFile('ścieżka');

0

Powiedzcie mi drodzy koledzy na jakim IP najlepiej chodzi hgg ? (mi na jednym lgouje się a nie wysyła wiadomości...)

0

Na tym pobranym przez HGG.GetServerAddress

0

No od razu lepiej !

Dzięki manfredek.

Już ostatnie dla mnie nie jasne zagadnienie. Jak zapisać i wczytać dane do ListView ? (tu także rozchodzi się o kontakty)

0

Pętla for i wio!

1 użytkowników online, w tym zalogowanych: 0, gości: 1