⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frind_friends.~pas

📁 一个QQ的界面源码
💻 ~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.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -