SUser.pas
Falk0ner, вс, 06/07/2008 - 15:34.
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Author: Alexander Vaga
EMail: primary: icq2000cc@hobi.ru
secondary: alexander_vaga@hotmail.com
Web: <a href="http://icq2000cc.hobi.ru
Creation:" title="http://icq2000cc.hobi.ru
Creation:">http://icq2000cc.hobi.ru
Creation:</a> May, 2002
Legal issues: Copyright (C) 2002 by Alexander Vaga
Kyiv, Ukraine
This software is provided 'as-is', without any express or
implied warranty. In no event will the author be held liable
for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any
purpose, including commercial applications, and to alter it
and redistribute it freely.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
unit SUser;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, Menus, Animate, ExtCtrls, Grids, AppEvnts,
Typess,Packet,Main,UInfo;
type
TSearchUser = class(TForm)
GroupBox1: TGroupBox;
SearchBtn: TButton;
StopSearchBtn: TButton;
SearchPage: TPageControl;
EMAIL: TTabSheet;
DETAILS: TTabSheet;
ICQn: TTabSheet;
Label1: TLabel;
GroupBox2: TGroupBox;
Label2: TLabel;
EMAILed: TEdit;
GroupBox3: TGroupBox;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
NICKed: TEdit;
FIRSTed: TEdit;
LASTed: TEdit;
GroupBox4: TGroupBox;
Label6: TLabel;
UINed: TEdit;
Label7: TLabel;
FoundUsers: TStringGrid;
FoundLabel: TLabel;
FoundPopupMenu: TPopupMenu;
AddToCList: TMenuItem;
Panel1: TPanel;
SUAnime: TAnimatedImage;
Info: TMenuItem;
ApplicationEvents1: TApplicationEvents;
procedure SearchBtnClick(Sender: TObject);
procedure StopSearchBtnClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure META_Search_User(NN,FN,LN : string);
procedure META_Search_UIN(sUIN : string);
procedure META_Search_Mail(Mail : string);
procedure FormCreate(Sender: TObject);
procedure AddToCListClick(Sender: TObject);
procedure InfoClick(Sender: TObject);
procedure ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
private
{ Private declarations }
public
Failure : boolean;
Cookie : word;
{ Public declarations }
end;
implementation
{$R *.DFM}
type TFoundList = array[0..50] of TListRecord;
var FoundList : TFoundList;
FoundNum : integer;
procedure TSearchUser.SearchBtnClick(Sender: TObject);
var i : integer;
begin
FoundLabel.Caption := 'OFF-line mode is now!';
if (not OL) or (not isLogged) then exit;
FoundLabel.Caption := 'Found: ?';
EndOfSearch := true;
Failure := false;
FoundNum := 0;
FoundLabel.Caption := 'Found: '+s(FoundNum)+' user(s)';
FoundUsers.RowCount := 2;
case SearchPage.ActivePageIndex of
0: META_Search_Mail(EMAILed.Text);
1: META_Search_User(NICKed.Text,FIRSTed.Text,LASTed.Text);
2: META_Search_UIN(UINed.Text);
end;
SearchBtn.Enabled := false;
SUAnime.Active := true;
while not EndOfSearch do Application.ProcessMessages;
SUAnime.Active := false;
SearchBtn.Enabled := true;
FoundLabel.Caption := 'Found: '+s(FoundNum)+' user(s)';
if FoundNum > 0 then begin
for i:=0 to FoundNum-1 do begin
with FoundUsers,FoundList[i] do begin
case STATUS of
0: Cells[0,i+1] := 'O';
1: Cells[0,i+1] := '+';
2: Cells[0,i+1] := '?';
else Cells[0,i+1] := '.';
end;
Cells[1,i+1] := s(UIN);
Cells[2,i+1] := NICK;
Cells[3,i+1] := FIRST;
Cells[4,i+1] := LAST;
Cells[5,i+1] := PRI_E_MAIL;
case AUTH of
0: Cells[6,i+1] := 'Author.';
1: Cells[6,i+1] := 'Always';
else Cells[6,i+1] := 'Mode: '+s(AUTH);
end;
if i=FoundNum-1 then break;
RowCount := RowCount + 1;
end;
end;
end else begin
Foundusers.RowCount := 2;
FoundUsers.Cells[0,1] := '';
FoundUsers.Cells[1,1] := '';
FoundUsers.Cells[2,1] := '';
FoundUsers.Cells[3,1] := '';
FoundUsers.Cells[4,1] := '';
FoundUsers.Cells[5,1] := '';
FoundUsers.Cells[6,1] := '';
EndOfSearch := true;
end;
if Failure then FoundLabel.Caption := '!!! Failure !!!';
end;
procedure TSearchUser.StopSearchBtnClick(Sender: TObject);
begin
EndOfSearch := true;
SearchBtn.Enabled := true;
end;
procedure TSearchUser.FormClose(Sender: TObject; var Action: TCloseAction);
begin
EndOfSearch := true;
Destroy;
end;
procedure TSearchUser.META_Search_User(NN,FN,LN : string);
var p,a : PPack;
begin
if (NN='')and(FN='')and(LN='') then exit;
EndOfSearch := false;
a := PacketNew;
PacketGoto(a,2); // a[0..1] = len
PacketAppend32(a,main.UIN);
PacketAppend16(a,swap($D007));
Cookie := random($FF) shl 8;
PacketAppend16(a,swap(Cookie));
PacketAppend16(a,swap($1505));
PacketAppendString(a,FN);
PacketAppendString(a,LN);
PacketAppendString(a,NN);
PacketBegin(a);
PacketAppend16(a,a.length-2);
P:=CreatePacket(2,SEQ);
SNACAppend(p,$15,$2);
TLVAppend(p,1,a.length,@a.data);
PacketDelete(a);
Form1.PacketSend(p);
M(Form1.Memo,'>Search Detail: Nick:'+NN+' First:'+FN+' Last:'+LN+' '+
'Cookie:$'+inttohex(Cookie,4));
end;
procedure TSearchUser.META_Search_UIN(sUIN : string);
var p,a : PPack;
i : integer;
begin
if (sUIN='')then exit;
for i:=1 to length(sUIN) do if (sUIN[i]<'0')or(sUIN[i]>'9') then exit;
EndOfSearch := false;
a := PacketNew;
PacketGoto(a,2); // a[0..1] = len
PacketAppend32(a,main.UIN);
PacketAppend16(a,swap($D007));
Cookie := random($FF) shl 8;
PacketAppend16(a,swap(Cookie));
PacketAppend16(a,swap($1F05));
try PacketAppend32(a,strtoint(sUIN));
except PacketAppend32(a,10000000); end;
PacketBegin(a);
PacketAppend16(a,a.length-2);
P:=CreatePacket(2,SEQ);
SNACAppend(p,$15,$2);
TLVAppend(p,1,a.length,@a.data);
PacketDelete(a);
Form1.PacketSend(p);
M(Form1.Memo,'>Search UIN: '+sUIN+' '+
'Cookie:$'+inttohex(Cookie,4));
end;
procedure TSearchUser.META_Search_Mail(Mail : string);
var p,a : PPack;
begin
if (Mail='')or(pos('@',Mail)=0) then exit;
EndOfSearch := false;
a := PacketNew;
PacketGoto(a,2);// a[0..1] = len
PacketAppend32(a,main.UIN);
PacketAppend16(a,swap($D007));
Cookie := random($FF) shl 8;
PacketAppend16(a,swap(Cookie));
PacketAppend16(a,swap($2905));
PacketAppendString(a,Mail);
PacketBegin(a);
PacketAppend16(a,a.length-2);
P:=CreatePacket(2,SEQ);
SNACAppend(p,$15,$2);
TLVAppend(p,1,a.length,@a.data);
PacketDelete(a);
Form1.PacketSend(p);
M(Form1.Memo,'>Search E-Mail: '+Mail+' '+
'Cookie:$'+inttohex(Cookie,4));
end;
procedure TSearchUser.FormCreate(Sender: TObject);
begin
with FoundUsers do begin
Cells[0,0] := 'St';
Cells[1,0] := 'UIN';
Cells[2,0] := 'Nick Name';
Cells[3,0] := 'First Name';
Cells[4,0] := 'Last Name';
Cells[5,0] := 'E-Mail';
Cells[6,0] := 'Authorization';
end;
end;
procedure TSearchUser.AddToCListClick(Sender: TObject);
var Y : integer;
node : TTreeNode;
tmp : PPack;
begin
Y := FoundUsers.Selection.;
if FoundNum = 0 then exit;
// copy to Contact List
ContactList[CLNum] := FoundList[Y-1];
if ContactList[CLNum].NICK = '' then
ContactList[CLNum].NICK := s(ContactList[CLNum].UIN) ;
ContactList[CLNum].EXTRA.ICON_INDEX := simply_icq;
ContactList[CLNum].EXTRA.MES_IS := false;
// add to TTreeView
node := Form1.CL.Items.AddObject(nil,ContactList[CLNum].NICK,@ContactList[CLNum]);
node.ImageIndex := ContactList[CLNum].EXTRA.ICON_INDEX;
node.SelectedIndex := ContactList[CLNum].EXTRA.ICON_INDEX;
inc(CLNum);
Form1.CL.AlphaSort;
Form1.WriteToContactList(ContactList[CLNum-1]);
// Add to Contact List
tmp := CreatePacket(2,SEQ);
SNACAppend(tmp,$3,$4);
PacketAppendB_String(tmp,s(ContactList[CLNum-1].UIN));
Form1.PacketSend(tmp);
M(Form1.Memo,'>Add To Contact List: '
+s(ContactList[CLNum-1].UIN));
// ... a useru ob etom ne obiazatelno znat :^)
end;
procedure TSearchUser.InfoClick(Sender: TObject);
var TUI : TUserInfo;
Y : integer;
begin
Y := FoundUsers.Selection.;
if FoundNum = 0 then exit;
Application.CreateForm(TUserInfo,TUI);
TUI.AutoRetrieve := true;
TUI.Caption := 'Info: '+s(FoundList[Y-1].UIN)+' ( '+FoundList[Y-1].NICK+' )';
TUI.UIRecord := FoundList[Y-1];
TUI.Show;
end;
procedure TSearchUser.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var PBuff : PSearchRec;
i : integer;
IsAlways : boolean;
begin
if Msg.message = msg_SInfo then begin
if (Msg.wParam = Cookie)then begin
Handled := false;
PBuff := PSearchRec(Msg.lParam);
if FoundNum = 50 then exit;
IsAlways := false;
for i:=0 to FoundNum-1 do
if FoundUsers.Cells[1,i+1] = s(PBuff^.uin) then begin
IsAlways := true;
break;
end;
if not IsAlways then
with PBuff^ do begin
if uin <> 999999999 then begin
FoundList[FoundNum].UIN := uin;
FoundList[FoundNum].NICK := nick;
FoundList[FoundNum].FIRST := first;
FoundList[FoundNum].LAST := last;
FoundList[FoundNum].PRI_E_MAIL := email;
FoundList[FoundNum].AUTH := auth;
FoundList[FoundNum].STATUS := status;
inc(FoundNum);
end else Failure := true;
end;
Dispose(PBuff);
end;
end;
end;
end.
Author: Alexander Vaga
EMail: primary: icq2000cc@hobi.ru
secondary: alexander_vaga@hotmail.com
Web: <a href="http://icq2000cc.hobi.ru
Creation:" title="http://icq2000cc.hobi.ru
Creation:">http://icq2000cc.hobi.ru
Creation:</a> May, 2002
Legal issues: Copyright (C) 2002 by Alexander Vaga
Kyiv, Ukraine
This software is provided 'as-is', without any express or
implied warranty. In no event will the author be held liable
for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any
purpose, including commercial applications, and to alter it
and redistribute it freely.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
unit SUser;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, Menus, Animate, ExtCtrls, Grids, AppEvnts,
Typess,Packet,Main,UInfo;
type
TSearchUser = class(TForm)
GroupBox1: TGroupBox;
SearchBtn: TButton;
StopSearchBtn: TButton;
SearchPage: TPageControl;
EMAIL: TTabSheet;
DETAILS: TTabSheet;
ICQn: TTabSheet;
Label1: TLabel;
GroupBox2: TGroupBox;
Label2: TLabel;
EMAILed: TEdit;
GroupBox3: TGroupBox;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
NICKed: TEdit;
FIRSTed: TEdit;
LASTed: TEdit;
GroupBox4: TGroupBox;
Label6: TLabel;
UINed: TEdit;
Label7: TLabel;
FoundUsers: TStringGrid;
FoundLabel: TLabel;
FoundPopupMenu: TPopupMenu;
AddToCList: TMenuItem;
Panel1: TPanel;
SUAnime: TAnimatedImage;
Info: TMenuItem;
ApplicationEvents1: TApplicationEvents;
procedure SearchBtnClick(Sender: TObject);
procedure StopSearchBtnClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure META_Search_User(NN,FN,LN : string);
procedure META_Search_UIN(sUIN : string);
procedure META_Search_Mail(Mail : string);
procedure FormCreate(Sender: TObject);
procedure AddToCListClick(Sender: TObject);
procedure InfoClick(Sender: TObject);
procedure ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
private
{ Private declarations }
public
Failure : boolean;
Cookie : word;
{ Public declarations }
end;
implementation
{$R *.DFM}
type TFoundList = array[0..50] of TListRecord;
var FoundList : TFoundList;
FoundNum : integer;
procedure TSearchUser.SearchBtnClick(Sender: TObject);
var i : integer;
begin
FoundLabel.Caption := 'OFF-line mode is now!';
if (not OL) or (not isLogged) then exit;
FoundLabel.Caption := 'Found: ?';
EndOfSearch := true;
Failure := false;
FoundNum := 0;
FoundLabel.Caption := 'Found: '+s(FoundNum)+' user(s)';
FoundUsers.RowCount := 2;
case SearchPage.ActivePageIndex of
0: META_Search_Mail(EMAILed.Text);
1: META_Search_User(NICKed.Text,FIRSTed.Text,LASTed.Text);
2: META_Search_UIN(UINed.Text);
end;
SearchBtn.Enabled := false;
SUAnime.Active := true;
while not EndOfSearch do Application.ProcessMessages;
SUAnime.Active := false;
SearchBtn.Enabled := true;
FoundLabel.Caption := 'Found: '+s(FoundNum)+' user(s)';
if FoundNum > 0 then begin
for i:=0 to FoundNum-1 do begin
with FoundUsers,FoundList[i] do begin
case STATUS of
0: Cells[0,i+1] := 'O';
1: Cells[0,i+1] := '+';
2: Cells[0,i+1] := '?';
else Cells[0,i+1] := '.';
end;
Cells[1,i+1] := s(UIN);
Cells[2,i+1] := NICK;
Cells[3,i+1] := FIRST;
Cells[4,i+1] := LAST;
Cells[5,i+1] := PRI_E_MAIL;
case AUTH of
0: Cells[6,i+1] := 'Author.';
1: Cells[6,i+1] := 'Always';
else Cells[6,i+1] := 'Mode: '+s(AUTH);
end;
if i=FoundNum-1 then break;
RowCount := RowCount + 1;
end;
end;
end else begin
Foundusers.RowCount := 2;
FoundUsers.Cells[0,1] := '';
FoundUsers.Cells[1,1] := '';
FoundUsers.Cells[2,1] := '';
FoundUsers.Cells[3,1] := '';
FoundUsers.Cells[4,1] := '';
FoundUsers.Cells[5,1] := '';
FoundUsers.Cells[6,1] := '';
EndOfSearch := true;
end;
if Failure then FoundLabel.Caption := '!!! Failure !!!';
end;
procedure TSearchUser.StopSearchBtnClick(Sender: TObject);
begin
EndOfSearch := true;
SearchBtn.Enabled := true;
end;
procedure TSearchUser.FormClose(Sender: TObject; var Action: TCloseAction);
begin
EndOfSearch := true;
Destroy;
end;
procedure TSearchUser.META_Search_User(NN,FN,LN : string);
var p,a : PPack;
begin
if (NN='')and(FN='')and(LN='') then exit;
EndOfSearch := false;
a := PacketNew;
PacketGoto(a,2); // a[0..1] = len
PacketAppend32(a,main.UIN);
PacketAppend16(a,swap($D007));
Cookie := random($FF) shl 8;
PacketAppend16(a,swap(Cookie));
PacketAppend16(a,swap($1505));
PacketAppendString(a,FN);
PacketAppendString(a,LN);
PacketAppendString(a,NN);
PacketBegin(a);
PacketAppend16(a,a.length-2);
P:=CreatePacket(2,SEQ);
SNACAppend(p,$15,$2);
TLVAppend(p,1,a.length,@a.data);
PacketDelete(a);
Form1.PacketSend(p);
M(Form1.Memo,'>Search Detail: Nick:'+NN+' First:'+FN+' Last:'+LN+' '+
'Cookie:$'+inttohex(Cookie,4));
end;
procedure TSearchUser.META_Search_UIN(sUIN : string);
var p,a : PPack;
i : integer;
begin
if (sUIN='')then exit;
for i:=1 to length(sUIN) do if (sUIN[i]<'0')or(sUIN[i]>'9') then exit;
EndOfSearch := false;
a := PacketNew;
PacketGoto(a,2); // a[0..1] = len
PacketAppend32(a,main.UIN);
PacketAppend16(a,swap($D007));
Cookie := random($FF) shl 8;
PacketAppend16(a,swap(Cookie));
PacketAppend16(a,swap($1F05));
try PacketAppend32(a,strtoint(sUIN));
except PacketAppend32(a,10000000); end;
PacketBegin(a);
PacketAppend16(a,a.length-2);
P:=CreatePacket(2,SEQ);
SNACAppend(p,$15,$2);
TLVAppend(p,1,a.length,@a.data);
PacketDelete(a);
Form1.PacketSend(p);
M(Form1.Memo,'>Search UIN: '+sUIN+' '+
'Cookie:$'+inttohex(Cookie,4));
end;
procedure TSearchUser.META_Search_Mail(Mail : string);
var p,a : PPack;
begin
if (Mail='')or(pos('@',Mail)=0) then exit;
EndOfSearch := false;
a := PacketNew;
PacketGoto(a,2);// a[0..1] = len
PacketAppend32(a,main.UIN);
PacketAppend16(a,swap($D007));
Cookie := random($FF) shl 8;
PacketAppend16(a,swap(Cookie));
PacketAppend16(a,swap($2905));
PacketAppendString(a,Mail);
PacketBegin(a);
PacketAppend16(a,a.length-2);
P:=CreatePacket(2,SEQ);
SNACAppend(p,$15,$2);
TLVAppend(p,1,a.length,@a.data);
PacketDelete(a);
Form1.PacketSend(p);
M(Form1.Memo,'>Search E-Mail: '+Mail+' '+
'Cookie:$'+inttohex(Cookie,4));
end;
procedure TSearchUser.FormCreate(Sender: TObject);
begin
with FoundUsers do begin
Cells[0,0] := 'St';
Cells[1,0] := 'UIN';
Cells[2,0] := 'Nick Name';
Cells[3,0] := 'First Name';
Cells[4,0] := 'Last Name';
Cells[5,0] := 'E-Mail';
Cells[6,0] := 'Authorization';
end;
end;
procedure TSearchUser.AddToCListClick(Sender: TObject);
var Y : integer;
node : TTreeNode;
tmp : PPack;
begin
Y := FoundUsers.Selection.;
if FoundNum = 0 then exit;
// copy to Contact List
ContactList[CLNum] := FoundList[Y-1];
if ContactList[CLNum].NICK = '' then
ContactList[CLNum].NICK := s(ContactList[CLNum].UIN) ;
ContactList[CLNum].EXTRA.ICON_INDEX := simply_icq;
ContactList[CLNum].EXTRA.MES_IS := false;
// add to TTreeView
node := Form1.CL.Items.AddObject(nil,ContactList[CLNum].NICK,@ContactList[CLNum]);
node.ImageIndex := ContactList[CLNum].EXTRA.ICON_INDEX;
node.SelectedIndex := ContactList[CLNum].EXTRA.ICON_INDEX;
inc(CLNum);
Form1.CL.AlphaSort;
Form1.WriteToContactList(ContactList[CLNum-1]);
// Add to Contact List
tmp := CreatePacket(2,SEQ);
SNACAppend(tmp,$3,$4);
PacketAppendB_String(tmp,s(ContactList[CLNum-1].UIN));
Form1.PacketSend(tmp);
M(Form1.Memo,'>Add To Contact List: '
+s(ContactList[CLNum-1].UIN));
// ... a useru ob etom ne obiazatelno znat :^)
end;
procedure TSearchUser.InfoClick(Sender: TObject);
var TUI : TUserInfo;
Y : integer;
begin
Y := FoundUsers.Selection.;
if FoundNum = 0 then exit;
Application.CreateForm(TUserInfo,TUI);
TUI.AutoRetrieve := true;
TUI.Caption := 'Info: '+s(FoundList[Y-1].UIN)+' ( '+FoundList[Y-1].NICK+' )';
TUI.UIRecord := FoundList[Y-1];
TUI.Show;
end;
procedure TSearchUser.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var PBuff : PSearchRec;
i : integer;
IsAlways : boolean;
begin
if Msg.message = msg_SInfo then begin
if (Msg.wParam = Cookie)then begin
Handled := false;
PBuff := PSearchRec(Msg.lParam);
if FoundNum = 50 then exit;
IsAlways := false;
for i:=0 to FoundNum-1 do
if FoundUsers.Cells[1,i+1] = s(PBuff^.uin) then begin
IsAlways := true;
break;
end;
if not IsAlways then
with PBuff^ do begin
if uin <> 999999999 then begin
FoundList[FoundNum].UIN := uin;
FoundList[FoundNum].NICK := nick;
FoundList[FoundNum].FIRST := first;
FoundList[FoundNum].LAST := last;
FoundList[FoundNum].PRI_E_MAIL := email;
FoundList[FoundNum].AUTH := auth;
FoundList[FoundNum].STATUS := status;
inc(FoundNum);
end else Failure := true;
end;
Dispose(PBuff);
end;
end;
end;
end.
Отправить комментарий