Moe Opublikowano 27 Września 2010 Udostępnij Opublikowano 27 Września 2010 Witam, więc robię sobie proste GG w delphi (dla nauki), w oparciu o komponent HGG. Logowanie działa, wysyłanie wiadomości też. Lecz pobieranie listy kontaktów do ListViewa nie. Mam taki kod: var i: Integer; Item: TListItem; begin ListView1.Clear; ListView1.Items.BeginUpdate; for i := 0 to HGG1.Users.Count - 1 do begin Item := ListView1.Items.Add; case HGG1.Users[i].Status of usNotAvailable: Item.ImageIndex := 0; usAvailable: Item.ImageIndex := 1; usBusy: Item.ImageIndex := 2; end; Item.Caption := HGG1.Users[i].Name; Item.SubItems.Add(IntToStr(HGG1.Users[i].GGNumber)); Item.SubItems.Add(HGG1.Users[i].IP); end; ListView1.Items.EndUpdate; Robię z tego tematu: Tutaj! ( Post użytkownika "gandziorz" ) I niestety nie działa. Jak to zrobić? Pomocy, Moe Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 27 Września 2010 Udostępnij Opublikowano 27 Września 2010 HGG nie jest przypadkiem przestarzałe? Podrzuć jakiś większy fragment projektu i jakiś link do komponentu, może coś zdziałam. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Moe Opublikowano 27 Września 2010 Autor Udostępnij Opublikowano 27 Września 2010 HGG nie jest przypadkiem przestarzałe? Może trochę, ale "Nowszego" komponentu nie znalazłem. Ale działa!, tylko nie mogę rozwiązania tego problemu nigdzie znaleźć. Z tego robię: Tu ( przykład ) HGG + INDY 9.0 Całe źródło: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, HGG, ComCtrls, ImgList; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Edit1: TEdit; Edit2: TEdit; Memo1: TMemo; Label1: TLabel; Label2: TLabel; Memo2: TMemo; Edit3: TEdit; Button3: TButton; HGG1: THGG; ImageList1: TImageList; ListView1: TListView; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure HGG1Message(Sender: TObject; GGNumber: Integer; MessageContent: String; MessageTime: TDateTime); procedure Button3Click(Sender: TObject); procedure HGG1UserChangeStatus(Sender: TObject; UserIndex, GGNumber: Integer; Status: TUserStatus; Description: String); procedure HGG1UsersGetFromServer(Sender: TObject); procedure HGG1UsersListChange(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin try hgg1.Number := StrToInt(Edit1.Text); hgg1.Password := Edit2.Text; HGG1.Host := HGG1.GetServerAddress; hgg1.Status:=usAvailable; hgg1.connect; except ShowMessage('Wystąpił błąd'); hgg1.Disconnect; end; end; procedure TForm1.Button2Click(Sender: TObject); begin hgg1.disconnect; end; procedure TForm1.HGG1Message(Sender: TObject; GGNumber: Integer; MessageContent: String; MessageTime: TDateTime); begin Memo1.Lines.Add(IntToStr(GGNumber)+ ' '+MessageContent); end; procedure TForm1.Button3Click(Sender: TObject); begin HGG1.SendMessage(StrToInt(Edit3.text), Memo2.Text, []); end; procedure TForm1.HGG1UserChangeStatus(Sender: TObject; UserIndex, GGNumber: Integer; Status: TUserStatus; Description: String); var i: Integer; Item: TListItem; begin ListView1.Clear; ListView1.Items.BeginUpdate; for i := 0 to HGG1.Users.Count - 1 do begin Item := ListView1.Items.Add; case HGG1.Users[i].Status of usNotAvailable: Item.ImageIndex := 0; usAvailable: Item.ImageIndex := 1; usBusy: Item.ImageIndex := 2; end; Item.Caption := HGG1.Users[i].Name; Item.SubItems.Add(IntToStr(HGG1.Users[i].GGNumber)); Item.SubItems.Add(HGG1.Users[i].IP); end; ListView1.Items.EndUpdate; end; procedure TForm1.HGG1UsersGetFromServer(Sender: TObject); var i: Integer; Item: TListItem; begin ListView1.Clear; ListView1.Items.BeginUpdate; for i := 0 to HGG1.Users.Count - 1 do begin Item := ListView1.Items.Add; case HGG1.Users[i].Status of usNotAvailable: Item.ImageIndex := 0; usAvailable: Item.ImageIndex := 1; usBusy: Item.ImageIndex := 2; end; Item.Caption := HGG1.Users[i].Name; Item.SubItems.Add(IntToStr(HGG1.Users[i].GGNumber)); Item.SubItems.Add(HGG1.Users[i].IP); end; ListView1.Items.EndUpdate; end; procedure TForm1.HGG1UsersListChange(Sender: TObject); var i: Integer; Item: TListItem; begin ListView1.Clear; ListView1.Items.BeginUpdate; for i := 0 to HGG1.Users.Count - 1 do begin Item := ListView1.Items.Add; case HGG1.Users[i].Status of usNotAvailable: Item.ImageIndex := 0; usAvailable: Item.ImageIndex := 1; usBusy: Item.ImageIndex := 2; end; Item.Caption := HGG1.Users[i].Name; Item.SubItems.Add(IntToStr(HGG1.Users[i].GGNumber)); Item.SubItems.Add(HGG1.Users[i].IP); end; ListView1.Items.EndUpdate; end; procedure TForm1.FormCreate(Sender: TObject); begin end; end. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 27 Września 2010 Udostępnij Opublikowano 27 Września 2010 Dobra, następujący wniosek: w ogóle pobierasz listę kontaktów z serwera? Po połączeniu spróbuj wykonać HGG1.Users.GetFromServer. To raz, dwa, spróbuj uzupełnić listę za pomocą HGG1.Users.Add jakimiś numerami. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Moe Opublikowano 27 Września 2010 Autor Udostępnij Opublikowano 27 Września 2010 HGG1.Users.GetFromServer, też próbowałem, nie działa. A z HGG1.Users.Add zaraz spróbuję. Nie działa, znasz jakiś lepszy sposób wykorzystania tych procedurek? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 27 Września 2010 Udostępnij Opublikowano 27 Września 2010 Dziwne trochę... Generalnie to komponent używa własnej listy kontaktów i za jej pomocą odbywa się wszelka wymiana informacji o użytkownikach. Więc jeśli lista jest pusta - żadne zdarzenia aktualizacji stanu etc. nie zostaną wywołane. Zrób tak: dodaj przycisk i zdarzenie kliknięcia na niego, a w nim: HGG1.Users.GetFromServer; if HGG1.Users.Find( 5819750 ) = -1 then HGG1.Users.Add( 5819750, 'Ja', true ); ShowMessage( IntToStr( HGG1.Users.Count() ) ); I kliknij na ten przycisk po połączeniu. EDIT Ej, a weź jeszcze popraw update listy na coś takiego: var i: Integer; Item: TListItem; begin ListView1.Clear; ListView1.Items.BeginUpdate; for i := 0 to HGG1.Users.Count() - 1 do begin Item := ListView1.Items.Add; case HGG1.Users.User[i].Status of usNotAvailable: Item.ImageIndex := 0; usAvailable: Item.ImageIndex := 1; usBusy: Item.ImageIndex := 2; end; Item.Caption := HGG1.Users.User[i].Name; Item.SubItems.Add(IntToStr(HGG1.Users.User[i].GGNumber)); Item.SubItems.Add(HGG1.Users.User[i].IP); end; ListView1.Items.EndUpdate; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Moe Opublikowano 27 Września 2010 Autor Udostępnij Opublikowano 27 Września 2010 Wyświetlił się komunikat "1" i na listboxie dodała się pozycja "Ja" OK! Niby coś działa, tylko jak teraz dodać wszystkich użytkowników zapisanych na serwerze, min. tym sposobem? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 27 Września 2010 Udostępnij Opublikowano 27 Września 2010 HGG1.Users.GetFromServer pobiera wszystkie kontakty z serwera, jeśli nie ma nic na serwerze - lista będzie pusta. HGG1.Users.Add dodaje kontakt wskazany przez Ciebie, nie ładuje go na serwer. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Moe Opublikowano 27 Września 2010 Autor Udostępnij Opublikowano 27 Września 2010 Niezbyt rozumiem, ale przecież to dodaje mi tylko kontakt "Ja", a ja chcę żeby pobrało wszystkie kontakty, które znajdują się na serwerze, i dodało je do listviewa, niezbyt kapuję twojej wypowiedzi. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 27 Września 2010 Udostępnij Opublikowano 27 Września 2010 Lista kontaktów na serwerze jest pusta skoro HGG1.Users.GetFromServer nic nie daje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Moe Opublikowano 27 Września 2010 Autor Udostępnij Opublikowano 27 Września 2010 Jeszcze przed chwilą wszystkie kontakty wyeksportowałem na serwer. Nie wiem co jest. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 27 Września 2010 Udostępnij Opublikowano 27 Września 2010 To jest stary komponent, nie dziw się, że nie działa jak należy. :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Moe Opublikowano 27 Września 2010 Autor Udostępnij Opublikowano 27 Września 2010 A miałbyś może namiary na jakiś "Nowszy"? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 27 Września 2010 Udostępnij Opublikowano 27 Września 2010 Niestety, ale nie. Nie interesuję się takimi rzeczami. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Moe Opublikowano 27 Września 2010 Autor Udostępnij Opublikowano 27 Września 2010 No ok, nie ma sprawy... Kurcze, może kiedyś zadziała, męczę się z tymmm... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 27 Września 2010 Udostępnij Opublikowano 27 Września 2010 Najprościej dla Ciebie byłoby po prosty przepisać TTCPThread.UserListUpdate w komponencie pod nową wersję. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Moe Opublikowano 27 Września 2010 Autor Udostępnij Opublikowano 27 Września 2010 Czekaj, bo doszedłem do czegoś. Ty tylko przeszukujesz i sprawdzasz czy istnieje kontakt o numerze 5819750, czyli moim, a na pewno sprawdzasz, wszystkie kontakty z numeru podanego przy logowaniu, niezbyt kapuję. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 27 Września 2010 Udostępnij Opublikowano 27 Września 2010 Sprawdzam czy istnieje Twój numer przed jego dodaniem na listę na wypadek gdyby GetFromServer importowało kontakty z serwera i już wcześniej istniał on na liście. Przeczytaj lepiej dokumentację załączoną do komponentu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Moe Opublikowano 27 Września 2010 Autor Udostępnij Opublikowano 27 Września 2010 Dzięki, już sobie poradziłem, wszystko działa, na self-made komponencie :) tzn. HGG z edycjami :) Dziękuję za pomoc! Topic Closed, Moe PS. 200 POST! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi