Skocz do zawartości

Zablokowane [Delphi] Problem z HGG


Moe

Rekomendowane odpowiedzi

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

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

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

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

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

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...