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:
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:
Teraz w button2,3,4 i 5 dajemy Enabled False (w properties z object inspector).
2. Zaczynamy
a) Logowanie
Klikamy dwukrotnie na Button1 i wpisujemy poniższy kod:
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:
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.
III. Zapisujemy kontakty
Klikamy dwukrotnie na Button3 o nazwie Zapisz listę i wpisujemy poniższą procedurę:
IV. Wczytujemy listę
Klikamy na button4 i wpisujemy poniższą procedurę:
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ę:
Następnie w zakładce Events komponentu GGlite szukamy zdarzenia OnDisconnecting klikamy w pole obok i wpisujemy następującą procedurę:
VI. Wybieramy kontakt
Klikamy na komponent ListView1 w zakładce Events szukamy OnClick a następnie wpisujemy poniższą procedurę:
Ż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:
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
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
1. Przygotowanie...
I. Edit
a) Edit1 będzie wskazywało nasz numer 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"
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;
2. Zaczynamy
I. Logowanie/Wylogowywanie na/z serwer/a GGPrzyjmijmy umownie że w dalszej części nasze kontakty będą znajdowały się w pliku "lista.ini".[/b]
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
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;
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
Dodatkowa informacja
Warto dodać w OnClose w zakładce Events naszej głównej formy (np. Form1) poniższy kod:
Kod:
GGLite1.GGLogoutTrue;
Mam nadzieję że komuś przyda się ten art.
Można rozbudować go żeby pokazywał również opis itp.
Pozdrawiam