Delphi - Lista kontaktów wraz statusem

Gandziorz

Użytkownik
Dołączył
Luty 5, 2005
Posty
114
Witam,
Po wielu próbach udało mi się zrobić ładną listę kontaktów wraz z statusem oparty o GGlite.

Będziemy potrzebowali następujących komponentów:
Kod:
GGlite -zakładka TGGLite

5 Buttonów z zakładki Standart

4 Edit z zakładki Standart. Polecam zainstalować komponent NumEdit (można wpisać tylko numer) wtedy dajemy 2 edit i 2 numedit.

ListView -zakładka Win32

ImageList -zakładka Win32

3 ikonki wskazujące dostępny, niedostępny, zaraz wracam
Do Uses dopisujemy IniFiles.

1. Przygotowanie...
I. Edit
a) Edit1 będzie wskazywało nasz numer GG.
<
Edit2 będzie wskazywało hasło do naszego numeru GG.
c) Edit3 będzie wskazywało nazwę kontaktu którą chcemy dodać do listy.
d) Edit4 będzie wskazywało numer który chcemy dodać do listy.

II. Button
a) Button1 ustawiamy caption "Połącz"
<
Button2 ustawiamy caption "Rozłącz"
c) Button3 ustawiamy caption "Zapisz listę"
d) Button4 ustawiamy caption "Wczytaj listę"
e) Button5 ustawiamy caption "Dodaj kontakt"

III. ImageList
Dodajemy wg. kolejności nasze ikony Dostępny, Zaraz Wracam, Niedostępny (dostępny powinien mieć numer 0, zaraz wracam 1, a niedostępny 2).

Następnie w komponencie ListView1 ustawiamy LargeImages na ImageList1 (w properties z object inspector).

IV. Reszta
Pod implementation u uses wpisujemy następującą procedurę która powinna wyglądać tak:
Kod:
var

INIFile : TINIFile;

INI : TINIFile;
Teraz w button2,3,4 i 5 dajemy Enabled False (w properties z object inspector).

2. Zaczynamy
Przyjmijmy umownie że w dalszej części nasze kontakty będą znajdowały się w pliku "lista.ini".[/b]
I. Logowanie/Wylogowywanie na/z serwer/a GG
a) Logowanie
Klikamy dwukrotnie na Button1 i wpisujemy poniższy kod:
Kod:
GGLite1.Login := StrToInt(Edit1.Text); // pobieramy numer GG

GGLite1.Password := Edit2.Text; // pobieramy haslo

GGLite1.GGInitHost; // pobieramy host GG

{łączymy się z serwerem GG}

if GGLite1.GGLogon = 0 then

begin

Button2.Enabled := true;

Button3.Enabled := true;

Button4.Enabled := true;

Button5.Enabled := true;

Button1.Enabled := false;

end;

GGLite1.UserStatus:= usAvailable; //ustawiamy status na dostępny

GGLite1.GGChangeUserStatus;  //zmieniamy status
Warto rozbudować ten kod o możliwość sprawdzenia czy pola nie są puste. Jeżeli się połączymy buttony 2,3,4,5 powinny być dostępne a Button1 (połącz) wyłączony.
<
Rozłączanie
Klikamy dwukrotnie na Button2 o nazwie Rozłącz i wpisujemy kod:
Kod:
GGLite1.GGLogoutTrue;

ListView1.Clear;

Button1.Enabled := true;

Button2.Enabled := false;

Button3.Enabled := false;

Button4.Enabled := false;

Button5.Enabled := false;

II. Dodajemy kontakt
Klikamy na Button5 o nazwie Dodaj kontakt i wpisujemy następującą procedurę.
Pamiętaj!
Edit3- odpowiada za nazwę kontaktu, a Edit4- za numer kontaktu.

Kod:
var

 Li: TListItem;

begin

 Li := ListView1.Items.Add;

 Li.Caption := Edit3.Text; //nazwa wyswietlana kontaktu

 Li.SubItems.Add(Edit4.Text); //numer gg kontaktu

 Li.ImageIndex := 2; //ustawiamy ikone na niedostepny

 GGLite1.GGAddUserNotify(StrToInt(Edit4.Text)); //dodajemy do kontaktow na serwerze gg

III. Zapisujemy kontakty
Klikamy dwukrotnie na Button3 o nazwie Zapisz listę i wpisujemy poniższą procedurę:
Kod:
var

i: integer;

begin

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

begin

INI := TINIFile.Create(ExtractFilePath(Application.ExeName)+ 'lista.ini');

try



INI.WriteString(ListView1.Items[i].Caption, 'Number', ListView1.Items[i].SubItems.Strings[0]);

finally

INI.Free;

end;

end;

IV. Wczytujemy listę
Klikamy na button4 i wpisujemy poniższą procedurę:
Kod:
var

IniSections:TStrings;

i: integer;

Lo: TListItem;

begin

//sprawdzamy czy istnieja jakiekolwiek kontakty

  if FileExists(ExtractFilePath(application.ExeName)+'lista.ini') then

  begin

  ListView1.Clear;

//istnieja wiec mozemy je spokojnie wczytac

    IniFile := TIniFile.Create(ExtractFilePath(application.ExeName)+'lista.ini');

    try

      IniSections := TStringList.Create;

      try

        IniFile.ReadSections(IniSections);

        for i:=0 to IniSections.Count-1 do

         begin

         Lo := ListView1.Items.Add;

         Lo.Caption := IniSections.strings[i];

         Lo.ImageIndex := 2;

         Lo.SubItems.Add(IntToStr(IniFile.ReadInteger(IniSections.strings[i],'Number',0)));

         GGLite1.GGAddUserNotify(StrToInt(ListView1.Items[i].SubItems.Strings[0]));

        end;



      finally

        IniSections.Free;

      end;





    finally

      IniFile.Free

    end;



 end;

Lista powinna się wczytać bezproblemowo.

V. Otrzymujemy pakiet informacji na temat danego numeru.
Przechodzimy do GGlite1 a następnie na Events.
Szukamy zdarzenia OnRecvUserNotify i klikamy w pole obok (powinno być puste) i wpisujemy następującą procedurę:
Kod:
var

i: integer;

begin

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

begin

If StrToInt(ListView1.Items[i].SubItems.Strings[0])= UserId then

case UserStatus of

      usNotAvailable: Listview1.Items[i].ImageIndex := 2;

      usNotAvailableDesc: Listview1.Items[i].ImageIndex := 2;

      usAvailable: Listview1.Items[i].ImageIndex := 0;

      usAvailableDesc: Listview1.Items[i].ImageIndex := 0;

      usBusy: Listview1.Items[i].ImageIndex := 1;

      usBusyDesc: Listview1.Items[i].ImageIndex := 1;

    end;

end;
Następnie w zakładce Events komponentu GGlite szukamy zdarzenia OnDisconnecting klikamy w pole obok i wpisujemy następującą procedurę:
Kod:
Button1.Enabled := true;

Button2.Enabled := false;

Button3.Enabled := false;

Button4.Enabled := false;

Button5.Enabled := false;

VI. Wybieramy kontakt
Klikamy na komponent ListView1 w zakładce Events szukamy OnClick a następnie wpisujemy poniższą procedurę:
Kod:
var

Sel: TListItem;

begin

if ListView1.Selected = nil then Exit;

Sel := ListView1.Selected;

//dalsze działania
Żeby dowiedzieć się jak nazywa się kontakt musimy wybrać Sel.Caption, a żeby dowiedzieć się jaki ma numer przydzielony wybieramy poprzez Sel.SubItems.Strings[0]

Dodatkowa informacja
Warto dodać w OnClose w zakładce Events naszej głównej formy (np. Form1) poniższy kod:
Kod:
GGLite1.GGLogoutTrue;
Przez to przy zamykaniu program nie powinien się zawiesić
<


Mam nadzieję że komuś przyda się ten art.
Można rozbudować go żeby pokazywał również opis itp.

Pozdrawiam
 

Gandziorz

Użytkownik
Dołączył
Luty 5, 2005
Posty
114
Originally posted by Kanciastoporty
bardzo fajne, moze sie przydac niektorym osobom ;] Moznaby przeniesc do tutoriali
Nie wiem czy gdzieś nie popełniłem gapy więc spytam.
Sprawdzałeś u siebie?
No można by przenieść ale nie mnie decydować...
 

Kanciastoporty

Były Moderator
Dołączył
Grudzień 19, 2006
Posty
1137
Nie, nie sprawdzalem. W ogole narazie nie programuje. A napisalem ze moznaby bylo przeniesc bo czesto sie pojawialy pytania (podczas projektow roznych komunikatorow) jak zrobic liste kontaktow, na ksztalt w gg.
 

Gandziorz

Użytkownik
Dołączył
Luty 5, 2005
Posty
114
Originally posted by Kanciastoporty
Nie, nie sprawdzalem. W ogole narazie nie programuje. A napisalem ze moznaby bylo przeniesc bo czesto sie pojawialy pytania (podczas projektow roznych komunikatorow) jak zrobic liste kontaktow, na ksztalt w gg.
Ja szukałem, brak konkretów więc samemu napisałem wg. siebie.

Dobra sprawdziłem jak to napisałem. Wstawiłem drobną poprawkę i wsio... działa
<
 
Do góry Bottom