www.pudn.com > QQ_FACE.rar > Frind_friends.pas


unit Frind_friends; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, StdCtrls, ExtCtrls, RXCtrls, dximctrl, Buttons, jpeg; 
 
type 
  TFrmFindFriends = class(TForm) 
    Panel1: TPanel; 
    Image1: TImage; 
    GroupBox1: TGroupBox; 
    RxLabel1: TRxLabel; 
    FriendsLstBox: TdxImageListBox; 
    BtnClose: TBitBtn; 
    BtnAdd: TBitBtn; 
    BtnReflash: TBitBtn; 
//    procedure CreateParams(var Params:TCreateParams);override; 
    procedure BtnCloseClick(Sender: TObject); 
    procedure FormCreate(Sender: TObject); 
    procedure BtnReflashClick(Sender: TObject); 
    procedure BtnAddClick(Sender: TObject); 
    procedure FormShow(Sender: TObject); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end; 
 
var 
  FrmFindFriends: TFrmFindFriends; 
  aFndLst:array[0..255] of String;//查找用户时,在线用户返回的信息数组,最大值为256,我想同时在人数应该不会超过这个数吧:-) 
implementation 
 
uses dm_share, Var_Share, by_user; 
 
{$R *.dfm} 
 
{procedure TFrmFindFriends.CreateParams(var Params:TCreateParams); 
begin 
  inherited CreateParams(Params); 
  Params.WndParent:=GetDesktopWindow; 
end;} 
 
procedure TFrmFindFriends.BtnCloseClick(Sender: TObject); 
begin 
   self.Close; 
end; 
 
procedure TFrmFindFriends.FormCreate(Sender: TObject); 
begin 
   Caption:='查找用户'; 
   FriendsLstBox.ImageList:=DMShare.ImgLarge; 
//   BtnReflash.Click; 
end; 
 
procedure TFrmFindFriends.BtnReflashClick(Sender: TObject); 
var 
  MyStream:TMemoryStream; 
  sMsg:string; 
  i:integer; 
begin 
  FriendsLstBox.Clear;//清空在线用户列表 
  for i := 0 to 255 do //清空存放在线用户信息的数组 aFndLst 
  begin 
    aFndLst[i]:='' 
  end; 
 
  sMsg:='FIN*'; 
  Mystream := TMemoryStream.Create; 
  try 
    DMShare.Udp.LocalPort:=8089; 
    DMShare.Udp.RemotePort:=8088; 
    DMShare.Udp.RemoteHost:=GetGBIP(g_sIP); 
    Mystream.Write(sMsg[1],Length(sMsg)); 
    DMShare.Udp.SendStream(Mystream); 
  finally 
    Mystream.Free; 
  end; 
end; 
 
procedure TFrmFindFriends.BtnAddClick(Sender: TObject); 
var 
   s:string; 
   i,iPos:integer; 
   aMsg:array[1..4] of string; 
begin 
//判断是否找到在线用户 
   if FriendsLstBox.Items.Count=0 then 
   begin 
      MessageBox(GetActiveWindow(),'未查找到在线用户,无法添加!','提示',MB_OK+MB_ICONINFORMATION); 
      Abort; 
   end; 
   if FriendsLstBox.ItemIndex=-1 then 
   begin 
      MessageBox(GetActiveWindow(),'请先选择要添加的好友!','提示',MB_OK+MB_ICONINFORMATION); 
      Exit; 
   end; 
 
//分解信息 
   s:=aFndLst[FriendsLstBox.ItemIndex]; 
   for i := 1 to 4 do 
   begin 
      iPos:=Pos('*',s); 
      aMsg[i]:=Copy(s,1,iPos-1); 
      Delete(s,1,iPos); 
//      showmessage(aMsg[i]); 
   end; 
//写入好友数据库 
   with DMShare.TblFriends do 
   begin 
      Append; 
      FieldValues['QQNumber']:=aMsg[1]; 
      FieldValues['UserName']:=aMsg[2]; 
      FieldValues['FaceID']:=StrToInt(aMsg[3]); 
      FieldValues['IP']:=aMsg[4]; 
      FieldValues['IsBaddy']:=False; 
      Post; 
   end; 
{以下代码含义: 
      单击“加为好友”后,在在线用户列表中被选中的用户加为好友,并从在线用户列表 
      中被删除,并且,要将数组aFndLst中,将上被加好友删除,否则会出现选中的好友 
      与数组aFndLst中的用户信息对不上号 
以下代码还未经过证实,不知是否正确,尚待证} 
   for i := FriendsLstBox.ItemIndex to FriendsLstBox.Items.Count-FriendsLstBox.ItemIndex-1 do 
   begin 
      aFndLst[i]:=aFndLst[i+1]; 
   end; 
   FriendsLstBox.Items.Delete(FriendsLstBox.ItemIndex); 
 
//将所添加的好友信息写入数组aAddFndLst,以便在“查找好友”窗体关闭后添加进SideBar 
(*{   for i := 0 to 255 do 
   begin 
      if aAddFndLst[i,0]='' then 
      begin 
} i:=0;        aAddFndLst[i,0]:=aMsg[1]; 
         aAddFndLst[i,1]:=aMsg[2]; 
         aAddFndLst[i,2]:=aMsg[3]; 
//      end; 
//   end;*) 
{下面的代码还需验证!!!!!!!!!在多台机器同时在线时验证} 
(*   for i := 0 to 255 do 
   begin 
      if aAddFndLst[i,0]='' then 
      begin 
         aAddFndLst[i,0]:=aMsg[1]; 
         aAddFndLst[i,1]:=aMsg[2]; 
         aAddFndLst[i,2]:=aMsg[3]; 
         Break; 
      end; 
   end; 
*) 
 
end; 
 
procedure TFrmFindFriends.FormShow(Sender: TObject); 
begin 
  BtnReflash.Click; 
end; 
 
end.