Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

UInfo.pas

01.01.2007
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Author:       Alexander Vaga
EMail:        primary:   icq2000cc@hobi.ru
              secondary: alexander_vaga@hotmail.com
Web:          http://icq2000cc.hobi.ru
Creation:     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 UInfo;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, ComCtrls, Buttons,
  ExtCtrls, Animate,inifiles,
  typess,main,util,packet,
  AppEvnts;
 
type
  TUserInfo = class(TForm)
    UserInfoDoneBtn: TButton;
    UserInfoRetrieveBtn: TButton;
    InfoPage: TPageControl;
    MainTab: TTabSheet;
    HomeTab: TTabSheet;
    MoreTab: TTabSheet;
    WorkTab: TTabSheet;
    InfoAboutTab: TTabSheet;
    Panel1: TPanel;
    UIAnime: TAnimatedImage;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label6: TLabel;
    Label9: TLabel;
    uinEd: TEdit;
    ipEd: TEdit;
    realipEd: TEdit;
    verEd: TEdit;
    GroupBox2: TGroupBox;
    Label3: TLabel;
    Label4: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    firstEd: TEdit;
    lastEd: TEdit;
    displayEd: TEdit;
    nickEd: TEdit;
    GroupBox3: TGroupBox;
    Label5: TLabel;
    priEd: TEdit;
    Label10: TLabel;
    Label11: TLabel;
    secEd: TEdit;
    oldEd: TEdit;
    GroupBox4: TGroupBox;
    cityEd: TEdit;
    zipEd: TEdit;
    stateEd: TEdit;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    streetMemo: TMemo;
    Label16: TLabel;
    GroupBox5: TGroupBox;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    phoneEd: TEdit;
    cellularEd: TEdit;
    faxEd: TEdit;
    GroupBox6: TGroupBox;
    Label20: TLabel;
    Label21: TLabel;
    Label22: TLabel;
    tzEd: TEdit;
    Edit20: TEdit;
    Edit21: TEdit;
    GroupBox7: TGroupBox;
    Label23: TLabel;
    Label24: TLabel;
    Label25: TLabel;
    homepageEd: TEdit;
    ageEd: TEdit;
    GroupBox8: TGroupBox;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    GroupBox9: TGroupBox;
    GroupBox10: TGroupBox;
    Label29: TLabel;
    Label30: TLabel;
    Label31: TLabel;
    Label32: TLabel;
    Label33: TLabel;
    wcityEd: TEdit;
    wzipEd: TEdit;
    wstateEd: TEdit;
    wstreetMemo: TMemo;
    GroupBox11: TGroupBox;
    Label34: TLabel;
    Label36: TLabel;
    wphoneEd: TEdit;
    wfaxEd: TEdit;
    GroupBox12: TGroupBox;
    Label38: TLabel;
    Label39: TLabel;
    companyEd: TEdit;
    jobEd: TEdit;
    departmentEd: TEdit;
    Label35: TLabel;
    Label37: TLabel;
    whomepageEd: TEdit;
    Label40: TLabel;
    GroupBox13: TGroupBox;
    aboutMemo: TMemo;
    AuthLabel: TLabel;
    Label43: TLabel;
    GroupBox15: TGroupBox;
    interMemo: TMemo;
    countryCombo: TComboBox;
    wcountryCombo: TComboBox;
    genderCombo: TComboBox;
    monthCombo: TComboBox;
    lang1Combo: TComboBox;
    lang2Combo: TComboBox;
    lang3Combo: TComboBox;
    occupationCombo: TComboBox;
    dayCombo: TComboBox;
    yearCombo: TComboBox;
    ApplicationEvents1: TApplicationEvents;
    procedure Request_Meta_Info(UIN : longint);
    procedure Set_Meta_Info;
    procedure UserInfoDoneBtnClick(Sender: TObject);
    procedure UserInfoRetrieveBtnClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure SetCountry(Combo:TComboBox; Country:word);
    function GetCountry(Combo:TComboBox):word;
    procedure SetGender(Combo:TComboBox; Gender:byte);
    function GetGender(Combo:TComboBox):byte;
    procedure SetMonth(Combo:TComboBox; Month:byte);
    function GetMonth(Combo:TComboBox):byte;
    procedure SetLanguage(Combo:TComboBox; Lang:byte);
    function GetLanguage(Combo:TComboBox):byte;
    procedure SetOccupation(Combo:TComboBox; Occupation:word);
    function GetOccupation(Combo:TComboBox):word;
    procedure SetCombo(Combo:TComboBox; min,max,Value:word);
    function GetCombo(Combo:TComboBox; min,max:byte):word;
    procedure ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
  private
    { Private declarations }
  public
    AutoRetrieve : boolean;
    UIRecord : TListRecord;
    Cookie : word;
  end;
 
 
implementation
{$R *.DFM}
 
procedure TUserInfo.UserInfoDoneBtnClick(Sender: TObject);
begin
     Close;
end;
 
procedure TUserInfo.Request_Meta_Info(UIN : longint);
var p,a : pPack;
begin
     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($B204));
     PacketAppend32(a,UIN);
     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,'>Request Full Info: '+s(UIN)+'   '+
                  'Cookie:$'+inttohex(Cookie,4));
     UIAnime.Active := true;
end;
 
procedure TUserInfo.UserInfoRetrieveBtnClick(Sender: TObject);
begin
     if (OL and isLogged)then
       Request_Meta_Info(UIRecord.UIN);
end;
 
 
procedure TUserInfo.FormShow(Sender: TObject);
begin
     InfoPage.ActivePageIndex :=0;
     with UIRecord do begin
       uinEd.Text := s(UIN);
       ipEd.Text := IPtoStr(IP);
       realipEd.Text := IPtoStr(REAL_IP);
       verEd.Text := s(VER);
       firstEd.Text := FIRST;
       lastEd.Text := LAST;
       nickEd.Text := NICK;
       displayEd.Text := NICK;
       priEd.Text := PRI_E_MAIL;
       secEd.Text := SEC_E_MAIL;
       oldEd.Text := OLD_E_MAIL;
       cityEd.Text := CITY;
       stateEd.Text := STATE;
       phoneEd.Text := PHONE;
       faxEd.Text := FAX;
       cellularEd.Text := CELLULAR;
       M(streetMemo,STREET);
       SetCountry(countryCombo,COUNTRY);
       SetGender(genderCombo,GENDER);
       ageEd.Text := s(AGE);
       homepageEd.Text := HOMEPAGE;
       SetCombo(yearCombo,1,99,BYEAR);
       SetMonth(monthCombo,BMONTH);
       SetCombo(dayCombo,1,31,BDAY);
       case AUTH of
         0: AuthLabel.Caption := 'Authorize';
         1: AuthLabel.Caption := 'Always';
         else AuthLabel.Caption := 'unknown';
       end;
       SetLanguage(lang1Combo,LANG1);
       SetLanguage(lang2Combo,LANG2);
       SetLanguage(lang3Combo,LANG3);
       M(aboutMemo,ABOUT);
       M(interMemo,INTERESTS);
 
       companyEd.Text :=COMPANY;
       departmentEd.Text := DEPARTMENT;
       jobEd.Text := JOB;
       SetOccupation(occupationCombo,Occupation);
       wcityEd.Text := WCITY;
       wstateEd.Text := WSTATE;
       wphoneEd.Text := WPHONE;
       wfaxEd.Text := WFAX;
       wstreetMemo.Clear;
       M(wstreetMemo,WSTREET);
       SetCountry(wcountryCombo,WCOUNTRY);
       whomepageEd.Text := WHOMEPAGE;
     end;
     if AutoRetrieve then begin
       if (OL and isLogged)then
         Request_Meta_Info(UIRecord.UIN);
     end;
end;
 
 
procedure TUserInfo.FormClose(Sender: TObject; var Action: TCloseAction);
var i : integer;
begin
     if not AutoRetrieve then begin
       for i:=0 to CLNum-1 do with ContactList[i] do begin
         if UIN = UIRecord.UIN then begin
           ContactList[i] := UIRecord;
           if NICK = '' then begin
             if FIRST <> '' then NICK := FIRST
             else if LAST <> '' then NICK := LAST
                  else NICK := s(UIN);
           end; // if
           Form1.WriteToContactList(ContactList[i]);
           break;
         end;
       end; //for
       for i:=0 to Form1.CL.Items.Count-1 do
         if Form1.CL.Items[i].Text <> PListRecord(Form1.CL.Items[i].Data)^.NICK then
           Form1.CL.Items[i].Text := PListRecord(Form1.CL.Items[i].Data)^.NICK;
     end;
     Destroy;
end;
 
 
procedure TUserInfo.Set_Meta_Info;
begin
     // это еще старый кусок из протокола icqv5 (UDP) 
     // CMD_META_USER  + META_CMD_SET_INFO
(*
     p:=main.UDPCreateStdPacket(CMD_META_USER);
     PacketAppend16(p,META_CMD_SET_INFO);
 
     Cookie := main.UDPSeqNum2-1;
     MetaUIN := main.UIN;
 
     PacketAppendString(p,nickEd.Text);
     PacketAppendString(p,firstEd.Text);
     PacketAppendString(p,lastEd.Text);
     PacketAppendString(p,priEd.Text);
     PacketAppendString(p,secEd.Text);
     PacketAppendString(p,oldEd.Text);
     PacketAppendString(p,cityEd.Text);
     PacketAppendString(p,stateEd.Text);
     PacketAppendString(p,phoneEd.Text);
     PacketAppendString(p,faxEd.Text);
     PacketAppendString(p,streetMemo.Lines[0]);
     PacketAppendString(p,cellularEd.Text);
     try PacketAppend32(p,longint(strtoint(zipEd.Text)));
     except PacketAppend32(p,-1); end;
     PacketAppend16(p,GetCountry(countryCombo));
     PacketAppend8(p,0);  // 250 = +03:00 TimeZone
     PacketAppend8(p,0);  // ????
     main.SendUDPCmd(p,'META_USER+SET_INFO: ['+s(main.UIN)+'] ===>');
 
     // CMD_META_USER  + META_CMD_SET_WORK
     p:=main.UDPCreateStdPacket(CMD_META_USER);
     PacketAppend16(p,META_CMD_SET_WORK);
     PacketAppendString(p,wcityEd.Text);
     PacketAppendString(p,wstateEd.Text);
     PacketAppendString(p,wphoneEd.Text);
     PacketAppendString(p,wfaxEd.Text);
     PacketAppendString(p,wstreetMemo.Lines[0]);
     try PacketAppend32(p,longint(strtoint(wzipEd.Text)));
     except PacketAppend32(p,-1); end;
     PacketAppend16(p,GetCountry(wcountryCombo));
     PacketAppendString(p,companyEd.Text);
     PacketAppendString(p,departmentEd.Text);
     PacketAppendString(p,jobEd.Text);
     PacketAppend16(p,GetOccupation(occupationCombo));
     PacketAppendString(p,whomepageEd.Text);
     main.SendUDPCmd(p,'META_USER+SET_WORK: ['+s(main.UIN)+'] ===>');
 
     // CMD_META_USER  + META_CMD_SET_MORE
     p:=main.UDPCreateStdPacket(CMD_META_USER);
     PacketAppend16(p,META_CMD_SET_MORE);
     try PacketAppend16(p,word(strtoint(ageEd.Text)));
     except PacketAppend16(p,0); end;
     PacketAppend8(p,GetGender(genderCombo));
     PacketAppendString(p,homepageEd.Text);
     PacketAppend8(p,GetCombo(yearCombo,0,99));
     PacketAppend8(p,GetMonth(monthCombo));
     PacketAppend8(p,GetCombo(dayCombo,1,31));
     PacketAppend8(p,GetLanguage(lang1Combo));
     PacketAppend8(p,GetLanguage(lang2Combo));
     PacketAppend8(p,GetLanguage(lang3Combo));
     main.SendUDPCmd(p,'META_USER+SET_MORE: ['+s(main.UIN)+'] ===>');
 
     // CMD_META_USER  + META_CMD_SET_ABOUT
     p:=main.UDPCreateStdPacket(CMD_META_USER);
     PacketAppend16(p,META_CMD_SET_ABOUT);
     PacketAppendString(p,aboutMemo.lines[0]);
     main.SendUDPCmd(p,'META_USER+SET_ABOUT: ['+s(main.UIN)+'] ===>');
 
     // CMD_META_USER  + META_CMD_SET_SECURE
     p:=main.UDPCreateStdPacket(CMD_META_USER);
     PacketAppend16(p,META_CMD_SET_SECURE);
     PacketAppend8(p,1);  //  0-autor required; 1-all users
     PacketAppend8(p,0);  //  0-not allow web;  1-allow web aware
     PacketAppend8(p,0);  //  0-hide IP;    1-show IP
     main.SendUDPCmd(p,'META_USER+SET_SECURE: ['+s(main.UIN)+'] ===>');
/////
*)
     UIAnime.Active := true;
end;
 
procedure TUserInfo.SetCountry(Combo:TComboBox; Country:word);
var i : integer;
begin
      Combo.Clear;
      for i:=0 to 121 do begin
        Combo.Items.Add(Countries[i].Text);
        if Countries[i].Code = Country then Combo.Text := Countries[i].Text;
      end;
      if Combo.Text = '' then Combo.Text := Countries[121].Text;
end;
 
function TUserInfo.GetCountry(Combo:TComboBox):word;
var i : integer;
begin
     Result := $FFFF;
      for i:=0 to 121 do begin
        if Countries[i].Text = Combo.Text then begin
           Result := Countries[i].Code;
           break;
        end;
      end;
end;
 
procedure TUserInfo.SetGender(Combo:TComboBox; Gender:byte);
begin
      Combo.Clear;
      Combo.Items.Add('Not specified');
      Combo.Items.Add('Female');
      Combo.Items.Add('Male');
      case Gender of
        0: Combo.Text := 'Not specified';
        1: Combo.Text := 'Female';
        2: Combo.Text := 'Male';
        else Combo.Text := 'Not specified';
      end;
end;
 
function TUserInfo.GetGender(Combo:TComboBox):byte;
begin
     Result := 0;
     if Combo.Text = 'Female' then Result := 1
     else if Combo.Text = 'Male' then Result := 2;
end;
 
procedure TUserInfo.SetMonth(Combo:TComboBox; Month:byte);
var i : integer;
begin
      Combo.Clear;
      for i:=0 to 12 do begin
        Combo.Items.Add(MetaMonth[i].Text);
        if MetaMonth[i].Code = Month then Combo.Text := MetaMonth[i].Text;
      end;
      if Combo.Text = '' then Combo.Text := MetaMonth[12].Text;
end;
 
function TUserInfo.GetMonth(Combo:TComboBox):byte;
var i : integer;
begin
     Result := 0;
      for i:=0 to 12 do begin
        if MetaMonth[i].Text = Combo.Text then begin
           Result := MetaMonth[i].Code;
           break;
        end;
      end;
end;
 
procedure TUserInfo.SetLanguage(Combo:TComboBox; Lang:byte);
var i : integer;
begin
      Combo.Clear;
      for i:=0 to 67 do begin
        Combo.Items.Add(MetaLanguages[i].Text);
        if MetaLanguages[i].Code = Lang then Combo.Text := MetaLanguages[i].Text;
      end;
      if Combo.Text = '' then Combo.Text := MetaLanguages[0].Text;
end;
 
function TUserInfo.GetLanguage(Combo:TComboBox):byte;
var i : integer;
begin
     Result := 0;
      for i:=0 to 67 do begin
        if MetaLanguages[i].Text = Combo.Text then begin
           Result := MetaLanguages[i].Code;
           break;
        end;
      end;
end;
 
procedure TUserInfo.SetOccupation(Combo:TComboBox; Occupation:word);
var i : integer;
begin
      Combo.Clear;
      for i:=0 to 28 do begin
        Combo.Items.Add(MetaOccupation[i].Text);
        if MetaOccupation[i].Code = Occupation then Combo.Text := MetaOccupation[i].Text;
      end;
      if Combo.Text = '' then Combo.Text := MetaOccupation[28].Text;
end;
 
function TUserInfo.GetOccupation(Combo:TComboBox):word;
var i : integer;
begin
     Result := 0; // not specified
      for i:=0 to 27 do begin
        if MetaOccupation[i].Text = Combo.Text then begin
           Result := MetaOccupation[i].Code;
           break;
        end;
      end;
end;
 
procedure TUserInfo.SetCombo(Combo:TComboBox; min,max,Value:word);
var i : integer;
begin
      Combo.Clear;
      for i:=min to max do begin
        Combo.Items.Add(s(i));
        if i=Value then Combo.Text := s(i);
      end;
      Combo.Items.Add('Not specified');
      if Combo.Text = '' then Combo.Text := 'Not specified';
end;
 
function TUserInfo.GetCombo(Combo:TComboBox; min,max:byte):word;
begin
     Result := 0;
     if Combo.Text = 'Not specified' then exit
     else
     try Result := strtoint(Combo.Text) except Result := 0; end;
     if (Result >= min) and (Result<=max) then exit else Result := 0;
end;
 
 
procedure TUserInfo.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var  PBuff : PInfoRec;
begin
     if Msg.message = msg_UInfo then begin
       if (Msg.wParam = Cookie)then begin
         Handled := false;
         PBuff := PInfoRec(Msg.lParam);
         case PBuff^.f of
          dEND: begin
                   M(Form1.Memo,'The END.');
                   UIAnime.Active := false;
                 end;
          dNick: begin
                   UIRecord.NICK := PBuff^.s;
                   NickEd.Text := PBuff^.s;
                 end;
          dFirst: begin
                   UIRecord.FIRST := PBuff^.s;
                   FirstEd.Text := PBuff^.s;
                 end;
          dLast: begin
                   UIRecord.LAST := PBuff^.s;
                   LastEd.Text := PBuff^.s;
                 end;
          dE_Mail: begin
                   UIRecord.PRI_E_MAIL := PBuff^.s;
                   priEd.Text := PBuff^.s;
                 end;
          dSec_E_Mail: begin
                   UIRecord.SEC_E_MAIL := PBuff^.s;
                   secEd.Text := PBuff^.s;
                 end;
          dOld_E_Mail: begin
                   UIRecord.OLD_E_MAIL := PBuff^.s;
                   oldEd.Text := PBuff^.s;
                 end;
          dIP: begin
                   strtoip(PBuff^.s,UIRecord.IP);
                   ipEd.Text := PBuff^.s;
                 end;
          dReal_IP: begin
                   strtoip(PBuff^.s,UIRecord.REAL_IP);
                   realipEd.Text := PBuff^.s;
                 end;
          dVer: begin
                   UIRecord.VER := strtoint(PBuff^.s);
                   verEd.Text := PBuff^.s;
                 end;
          dAuth: begin
                   UIRecord.AUTH := strtoint(PBuff^.s);
                   case UIRecord.AUTH of
                     0: AuthLabel.Caption := 'Authorize';
                     1: AuthLabel.Caption := 'Always';
                     else AuthLabel.Caption := 'unknown';
                   end;
                 end;
          dCity: begin
                   UIRecord.CITY := PBuff^.s;
                   cityEd.Text := PBuff^.s;
                 end;
          dState: begin
                   UIRecord.STATE := PBuff^.s;
                   stateEd.Text := PBuff^.s;
                 end;
          dPhone: begin
                   UIRecord.Phone := PBuff^.s;
                   PhoneEd.Text := PBuff^.s;
                 end;
          dFax: begin
                   UIRecord.Fax := PBuff^.s;
                   FaxEd.Text := PBuff^.s;
                 end;
          dCellular: begin
                   UIRecord.Cellular := PBuff^.s;
                   CellularEd.Text := PBuff^.s;
                 end;
          dZip: begin
                   UIRecord.Zip := PBuff^.s;
                   ZipEd.Text := PBuff^.s;
                 end;
          dStreet: begin
                   UIRecord.Street := PBuff^.s;
                   streetMemo.Clear;
                   M(streetMemo,PBuff^.s);
                 end;
          dCountry: begin
                   UIRecord.Country := strtoint(PBuff^.s);
                   SetCountry(countryCombo,UIRecord.COUNTRY);
                 end;
          dTimeZone: begin
                   UIRecord.TimeZone := strtoint(PBuff^.s);
                   tzEd.Text := PBuff^.s;
                 end;
          dWebAware: begin
    //               UIRecord.WebAware := strtoint(PBuff^.s);
    //               webawareEd.Text := PBuff^.s;
                 end;
          dHideIP: begin
    //               UIRecord.HideIP := PBuff^.s;
    //               HideIPEd.Text := PBuff^.s;
                 end;
          dAge: begin
                   UIRecord.Age := strtoint(PBuff^.s);
                   AgeEd.Text := PBuff^.s;
                 end;
          dGender: begin
                   UIRecord.Gender := strtoint(PBuff^.s);
                   SetGender(genderCombo,UIRecord.GENDER);
                 end;
          dHomepage: begin
                   UIRecord.Homepage := PBuff^.s;
                   HomepageEd.Text := PBuff^.s;
                 end;
          dByear: begin
                   UIRecord.Byear := strtoint(PBuff^.s);
                   if UIRecord.Byear<>0 then dec(UIRecord.Byear,1900);
                   SetCombo(yearCombo,1,99,UIRecord.Byear);
                 end;
          dBmonth: begin
                   UIRecord.BMonth := strtoint(PBuff^.s);
                   SetMonth(monthCombo,UIRecord.BMonth);
                 end;
          dBday: begin
                   UIRecord.Bday := strtoint(PBuff^.s);
                   SetCombo(dayCombo,1,31,UIRecord.Bday);
                 end;
          dAbout: begin
                   UIRecord.ABOUT := PBuff^.s;
                   AboutMemo.Clear;
                   M(AboutMemo,PBuff^.s);
                 end;
          dLang1: begin
                   UIRecord.LANG1 := strtoint(PBuff^.s);
                   SetLanguage(lang1Combo,UIRecord.LANG1);
                 end;
          dLang2: begin
                   UIRecord.LANG2 := strtoint(PBuff^.s);
                   SetLanguage(lang2Combo,UIRecord.LANG2);
                 end;
          dLang3: begin
                   UIRecord.LANG3 := strtoint(PBuff^.s);
                   SetLanguage(lang3Combo,UIRecord.LANG3);
                 end;
          dInterests: begin
                   UIRecord.INTERESTS := PBuff^.s;
                   interMemo.Clear;
                   M(interMemo,PBuff^.s);
                 end;
          dFailure: begin
    ///////////////////////////// ?????
                 end;
          dMeta_Srv_Res: begin
                   UIAnime.Active := false;
                 end;
          dwCity: begin
                   UIRecord.WCITY := PBuff^.s;
                   wcityEd.Text := PBuff^.s;
                  end;
          dwState:begin
                   UIRecord.WSTATE := PBuff^.s;
                   wstateEd.Text := PBuff^.s;
                  end;
          dwPhone:begin
                   UIRecord.WPHONE := PBuff^.s;
                   wphoneEd.Text := PBuff^.s;
                  end;
          dwFax:begin
                   UIRecord.WFAX := PBuff^.s;
                   wfaxEd.Text := PBuff^.s;
                  end;
          dwStreet:begin
                   UIRecord.WSTREET := PBuff^.s;
                   wstreetMemo.Clear;
                   M(wstreetMemo,PBuff^.s);
                  end;
          dwZip:begin
                   UIRecord.WZIP := PBuff^.s;
                   wzipEd.Text := PBuff^.s;
                  end;
          dwCountry:begin
                   UIRecord.WCOUNTRY := strtoint(PBuff^.s);
                   SetCountry(wcountryCombo,UIRecord.WCOUNTRY);
                  end;
          dCompany:begin
                   UIRecord.COMPANY := PBuff^.s;
                   companyEd.Text := PBuff^.s;
                  end;
          dDepartment:begin
                   UIRecord.DEPARTMENT := PBuff^.s;
                   departmentEd.Text := PBuff^.s;
                  end;
          dJob:begin
                   UIRecord.JOB := PBuff^.s;
                   jobEd.Text := PBuff^.s;
                  end;
          dOccupation:begin
                   UIRecord.OCCUPATION := strtoint(PBuff^.s);
                   SetOccupation(occupationCombo,UIRecord.Occupation);
                  end;
          dWhomepage:begin
                   UIRecord.WHOMEPAGE := PBuff^.s;
                   whomepageEd.Text := PBuff^.s;
                  end;
          end; // case
          Dispose(PBuff);
       end;
     end;
end;
 
end.