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

📄 ueditcontact.pas

📁 FMA is a free1 powerful phone editing tool allowing users to easily manage all of the personal data
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit uEditContact;

{
*******************************************************************************
* Descriptions: Edit phone contact
* $Source: /cvsroot/fma/fma/uEditContact.pas,v $
* $Locker:  $
*
* Todo:
*
* Change Log:
* $Log: uEditContact.pas,v $
*
*******************************************************************************
}

interface

uses
  Windows, TntWindows, Messages, SysUtils, TntSysUtils, Variants, Classes, TntClasses, Graphics, TntGraphics,
  Controls, TntControls, Forms, TntForms, Dialogs, TntDialogs, ExtCtrls, TntExtCtrls, StdCtrls, TntStdCtrls,
  ComCtrls, TntComCtrls, UniTntCtrls, Buttons, TntButtons, uSyncPhonebook, Menus, TntMenus, MPlayer, GR32_Image,
  uContactSync, VirtualTrees, uVCard, ImgList, Mask, DateUtils;

type
  TfrmEditContact = class(TTntForm)
    PageControl1: TTntPageControl;
    tsGeneral: TTntTabSheet;
    TntImage: TTntImage;
    Bevel1: TTntBevel;
    Label1: TTntLabel;
    txtTitle: TTntEdit;
    txtName: TTntEdit;
    Label2: TTntLabel;
    Label4: TTntLabel;
    txtOrganization: TTntEdit;
    Label5: TTntLabel;
    Bevel2: TTntBevel;
    Label6: TTntLabel;
    txtHome: TTntEdit;
    Label7: TTntLabel;
    txtWork: TTntEdit;
    Label8: TTntLabel;
    txtCell: TTntEdit;
    Label9: TTntLabel;
    txtFax: TTntEdit;
    Label10: TTntLabel;
    txtOther: TTntEdit;
    TabSheet2: TTntTabSheet;
    OkButton: TTntButton;
    CancelButton: TTntButton;
    ApplyButton: TTntButton;
    GroupBox1: TTntGroupBox;
    Panel1: TTntPanel;
    btnPicSel: TTntButton;
    Label12: TTntLabel;
    Label13: TTntLabel;
    lblPicDim: TTntLabel;
    Label15: TTntLabel;
    imgDim: TTntImage;
    lblPicName: TTntLabel;
    lblPicSize: TTntLabel;
    btnPicNew: TTntButton;
    GroupBox2: TTntGroupBox;
    btnPicDel: TTntButton;
    Label14: TTntLabel;
    Label16: TTntLabel;
    Label17: TTntLabel;
    btnSndNew: TTntButton;
    btnSndDel: TTntButton;
    btnSndSel: TTntButton;
    imgSnd: TTntImage;
    lblSndType: TTntLabel;
    lblSndName: TTntLabel;
    lblSndSize: TTntLabel;
    Label11: TTntLabel;
    lblPicPal: TTntLabel;
    TabSheet3: TTntTabSheet;
    Label18: TTntLabel;
    ResetButton: TTntButton;
    Label19: TTntLabel;
    tsCallPrefs: TTntTabSheet;
    GroupBox3: TTntGroupBox;
    cbDefaultNum: TTntComboBox;
    Label20: TTntLabel;
    Label21: TTntLabel;
    Label22: TTntLabel;
    Label23: TTntLabel;
    PopupMenu1: TTntPopupMenu;
    MediaPlayer1: TMediaPlayer;
    SelImage: TImage32;
    txtDisplayAs: TTntComboBox;
    TabSheet5: TTntTabSheet;
    Label34: TTntLabel;
    tsCallNotes: TTntTabSheet;
    GroupBox6: TTntGroupBox;
    CheckBox1: TTntCheckBox;
    SaveDialog1: TTntSaveDialog;
    GroupBox8: TTntGroupBox;
    RadioButton1: TTntRadioButton;
    RadioButton2: TTntRadioButton;
    RadioButton3: TTntRadioButton;
    Button2: TTntButton;
    TabSheet7: TTntTabSheet;
    Label28: TTntLabel;
    txtStreet: TTntEdit;
    Label30: TTntLabel;
    txtCity: TTntEdit;
    Label31: TTntLabel;
    txtRegion: TTntEdit;
    txtPostalCode: TTntEdit;
    Label32: TTntLabel;
    txtCountry: TTntEdit;
    Label33: TTntLabel;
    TntImage1: TTntImage;
    TntBevel1: TTntBevel;
    TntLabel1: TTntLabel;
    TntImage2: TTntImage;
    TntLabel2: TTntLabel;
    TntBevel2: TTntBevel;
    TntImage3: TTntImage;
    TntLabel3: TTntLabel;
    TntBevel3: TTntBevel;
    Label3: TTntLabel;
    txtContactDataID: TTntEdit;
    Label26: TTntLabel;
    UnlinkOutlookButton: TTntButton;
    Label25: TTntLabel;
    txtFileAs: TTntEdit;
    Label27: TTntLabel;
    MemoDetails: TTntMemo;
    TntBevel4: TTntBevel;
    btNotesClear: TTntButton;
    btNotesSave: TTntButton;
    MemoNotes: TTntMemo;
    Label29: TTntLabel;
    TntImage4: TTntImage;
    TntLabel4: TTntLabel;
    TntBevel6: TTntBevel;
    TntLabel5: TTntLabel;
    TntBevel7: TTntBevel;
    TntLabel6: TTntLabel;
    txtAddressType: TTntComboBox;
    TntTabSheet1: TTntTabSheet;
    TntImage5: TTntImage;
    TntLabel7: TTntLabel;
    TntBevel5: TTntBevel;
    TntLabel8: TTntLabel;
    txtURL: TTntEdit;
    TntLabel9: TTntLabel;
    lvEmails: TTntListView;
    MailAddButton: TTntButton;
    MailEditButton: TTntButton;
    MailDelButton: TTntButton;
    MailPrefButton: TTntButton;
    ImageList1: TImageList;
    txtBirthday: TTntDateTimePicker;
    TntBevel8: TTntBevel;
    TntLabel10: TTntLabel;
    TntBevel9: TTntBevel;
    TntLabel11: TTntLabel;
    BirthdayDeleteButton: TTntButton;
    lblDisabledPostal: TTntLabel;
    PostalDeleteButton: TTntButton;
    NumbersHistoryButton: TTntButton;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure txtCustomChange(Sender: TObject);
    procedure ApplyButtonClick(Sender: TObject);
    procedure OkButtonClick(Sender: TObject);
    procedure txtTelKeyPress(Sender: TObject; var Key: Char);
    procedure ResetButtonClick(Sender: TObject);
    procedure TabSheet4Show(Sender: TObject);
    procedure txtPhoneChange(Sender: TObject);
    procedure txtPhoneEnter(Sender: TObject);
    procedure btnPicSelClick(Sender: TObject);
    procedure btnSndSelClick(Sender: TObject);
    procedure OnPicSelClick(Sender: TObject);
    procedure OnSndSelClick(Sender: TObject);
    procedure btnPicDelClick(Sender: TObject);
    procedure btnSndDelClick(Sender: TObject);
    procedure MediaPlayer1Click(Sender: TObject; Button: TMPBtnType;
      var DoDefault: Boolean);
    procedure PageControl1Change(Sender: TObject);
    procedure btnUploadClick(Sender: TObject);
    procedure txtChangeEditAs(Sender: TObject);
    procedure OnChangeAsEnter(Sender: TObject);
    procedure UnlinkOutlookButtonClick(Sender: TObject);
    procedure btNotesClearClick(Sender: TObject);
    procedure MemoNotesChange(Sender: TObject);
    procedure btNotesSaveClick(Sender: TObject);
    procedure txtChange(Sender: TObject);
    procedure txtDisplayAsChange(Sender: TObject);
    procedure CancelButtonClick(Sender: TObject);
    procedure txtAddressTypeChange(Sender: TObject);
    procedure MailAddButtonClick(Sender: TObject);
    procedure MailPrefButtonClick(Sender: TObject);
    procedure MailEditButtonClick(Sender: TObject);
    procedure MailDelButtonClick(Sender: TObject);
    procedure lvEmailsSelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    procedure lvEmailsDblClick(Sender: TObject);
    procedure BirthdayDeleteButtonClick(Sender: TObject);
    procedure txtBirthdayChange(Sender: TObject);
    procedure PostalDeleteButtonClick(Sender: TObject);
    procedure NumbersHistoryButtonClick(Sender: TObject);
  private
    { Private declarations }
    FAddress: integer; // the index of last shown address
    FAddresses: array[0..1] of TPostalAddress;
    FPhonePrev: string;
    FPrevChangeAs,FMoreNumbers: WideString;
    FUseSIMMode,FLoadingData,FUseOwnMode: boolean;
    FCustomImage,FSwappingAdr: Boolean;
    function PhonesCount: integer;
    function PrefEmailIndex: integer;
    procedure DoSetModified;
    procedure DoSanityCheck;
    procedure DoEmailCheck(AMail: WideString);
    procedure LoadContactData;
    procedure SaveContactData;
    procedure ShowFullName(Modified: WideString = '');
    procedure FillInternetAdrs;
    procedure FillPostalAdrs;
    procedure FillDisplayNameList;
    procedure UpdateDefNum(SetTo: integer = 0);
    procedure UpdatePersonalize;
    procedure SelectFile(Pos: TPoint; FileType: byte; Selected: WideString = '');
    procedure SyncContactsError(Sender: TObject; const Message: String);
    procedure SyncContactsConfirm(Sender: TObject; Contact: TContact;
      Action: TContactAction; const Description: WideString;
      var Confirmed: Boolean);
    procedure SetCustomModified;
    procedure Set_UseSIMMode(const Value: boolean);
    procedure Set_UseOwnMode(const Value: boolean);
    procedure Set_CustomImage(const Value: Boolean);
    function Get_Notes: TTntStrings;
  public
    MaxFullNameLen: integer;
    IsNew,Modified,customModified: boolean;
    contact: TContactData;
  published
    procedure LoadAndMergeWith(AContact: TContactData);
    property UseSIMMode: boolean read FUseSIMMode write Set_UseSIMMode default False;
    property UseOwnMode: boolean read FUseOwnMode write Set_UseOwnMode default False;
    property IsCustomImage: Boolean read FCustomImage write Set_CustomImage;
    property ContactNotes: TTntStrings read Get_Notes;
  end;

var
  frmEditContact: TfrmEditContact;

implementation

uses
  gnugettext, gnugettexthelpers,
  uGlobal, uLogger, Unit1, uFiles, uDialogs, uImg32Helper, uInputQuery, uPhoneHistory;

{$R *.dfm}

procedure TfrmEditContact.FormCreate(Sender: TObject);
begin
  gghTranslateComponent(self);
  { Populate images }
  TntImage1.Picture.Assign(TntImage.Picture);
  TntImage2.Picture.Assign(TntImage.Picture);
  TntImage3.Picture.Assign(TntImage.Picture);
  TntImage4.Picture.Assign(TntImage.Picture);
  TntImage5.Picture.Assign(TntImage.Picture);
  { Align personalization widgets }
  lblPicDim.Left := imgDim.Left + imgDim.Width + 4;
  lblPicName.Left := Label13.Left + Label13.Width + 4;
  lblPicSize.Left := Label15.Left + Label15.Width + 4;
  lblPicPal.Left := Label11.Left + Label11.Width + 4;
  lblSndType.Left := imgSnd.Left + imgSnd.Width + 4;
  lblSndName.Left := Label14.Left + Label14.Width + 4;
  lblSndSize.Left := Label16.Left + Label16.Width + 4;
  //lblDisabledPostal.Font.Color := clRed;
{$IFNDEF VER150}
  Form1.ThemeManager1.CollectForms(Self);
{$ENDIF}
end;

procedure TfrmEditContact.txtDisplayAsChange(Sender: TObject);
begin
  { Populate Display Name }
  TntLabel1.Caption := txtDisplayAs.Text;
  TntLabel2.Caption := txtDisplayAs.Text;
  TntLabel3.Caption := txtDisplayAs.Text;
  TntLabel4.Caption := txtDisplayAs.Text;
  TntLabel7.Caption := txtDisplayAs.Text;
  DoSetModified;
end;

procedure TfrmEditContact.FormShow(Sender: TObject);
begin
  MaxFullNameLen := txtName.MaxLength;
  LoadContactData;
  PageControl1.ActivePageIndex := 0;
  if Form1.IsT610Clone then begin
    { Hide postal adress tab if not supported by phone (T610 clones) }
    TabSheet7.Enabled := False;
    lblDisabledPostal.Visible := True;
  end;
  if not Form1.IsK610orBetter then begin
    txtURL.Enabled := False;
    txtAddressType.Enabled := False;
  end;
  txtBirthday.Enabled := Form1.IsK750orBetter and not FUseSIMMode;
  ResetButton.Enabled := not IsNew;
  UnlinkOutlookButton.Enabled := not IsNew;
  txtName.SetFocus;
end;

procedure TfrmEditContact.LoadContactData;
var
  c: TColor;
  b: boolean;
  w: WideString;
  procedure UpdateTelView(var Item: TTntEdit);
  begin
    { Always enable, and disable only empty Edits }
    if b or (Item.Text = '') then begin
      Item.Enabled := b;
      Item.Color := c;
    end;
  end;
begin
  FLoadingData := True;
  try
    FPrevChangeAs := '';
    FPhonePrev := '';
    if FUseSIMMode then c := clBtnFace else c := clWindow;
    b := not FUseSIMMode;
    // contact
    txtTitle.Text := contact.title;
    w := contact.name;
    if contact.surname <> '' then
      w := w + ' ' + contact.surname; // do not use GetContactFullName here!
    txtName.Text := w;
    txtContactDataID.Text := GUIDToString(contact.CDID);
    txtFileAs.Text := contact.displayname;
    txtDisplayAs.Text := contact.displayname;
    txtOrganization.Text := contact.org;
    txtBirthday.Date := contact.Birthday;
    txtBirthdayChange(nil);
    txtHome.Text := contact.home;
    txtWork.Text := contact.work;
    txtCell.Text := contact.cell;
    txtFax.Text := contact.fax;
    txtOther.Text := contact.other;
    FillPostalAdrs;
    FillInternetAdrs;
    ShowFullName;
    FillDisplayNameList;
    FMoreNumbers := contact.morenums;
    if not (FUseSIMMode or FUseOwnMode) then begin
      // Personalize, will fill data on tabsheet open
      btnPicDel.Click;
      btnSndDel.Click;
      // Preferences
      UpdateDefNum(contact.DefaultIndex);
    end;
    { Leave only used field for editing, or enable all fields for new contacts }
    if FUseSIMMode then begin
      if (txtCell.Text <> '') or (txtHome.Text <> '') or (txtWork.Text <> '') or
        (txtFax.Text <> '') or (txtOther.Text <> '') then begin
        UpdateTelView(txtCell);
        UpdateTelView(txtHome);
        UpdateTelView(txtWork);
        UpdateTelView(txtFax);
        UpdateTelView(txtOther);
      end
      else if Form1.ExplorerNew.FocusedNode = Form1.FNodeContactsSM then begin
        if not Form1.IsK700orBetter then begin // older phone?
          { Creating a New Contact in SIM Card - enable only home phone }
          UpdateTelView(txtCell);
          UpdateTelView(txtWork);
          UpdateTelView(txtFax);
          UpdateTelView(txtOther);
        end;
      end;
    end
    else
      GetContactDetails(@contact,MemoDetails.Lines);
    GetContactNotes(@contact,MemoNotes.Lines);
    MemoNotesChange(nil);
  finally
    FLoadingData := False;
  end;
  // done
  ApplyButton.Enabled := False;
  Modified := False;
  customModified := False;
end;

procedure TfrmEditContact.SaveContactData;
var
  i,j: integer;
  s,a: WideString;
begin
  contact.title := txtTitle.text;
  contact.org := txtOrganization.text;
  { Update contact name and surname }
  a := GetContactFullName(@contact);
  s := Trim(txtName.text);
  i := Pos(' ',s);
  if i = 0 then begin
    contact.name := s;
    contact.surname := '';
  end
  else begin
    contact.name := Copy(s,1,i-1);
    Delete(s,1,i);
    contact.surname := Trim(s);
  end;
  (* Commented out since will keep DisplayName as fma internal setting
  s := GetContactFullName(@contact);
  if WideCompareText(a,s) <> 0 then
    { If name/surname are changed, reset display name, since SE T610
      doesnt support displayname vCard peoperty }
    txtDisplayAs.Text := s;
  *)
  contact.displayname := txtDisplayAs.Text;
  contact.home := txtHome.text;
  contact.work := txtWork.text;
  contact.cell := txtCell.text;
  contact.fax := txtFax.text;
  contact.other := txtOther.text;
  contact.homepage := txtURL.text;
  { birthday }
  contact.Birthday := DateOf(txtBirthday.Date);
  { internet }
  a := '';
  i := PrefEmailIndex;
  if i <> -1 then contact.email := lvEmails.Items[i].Caption
    else contact.email := '';
  for j := 0 to lvEmails.Items.Count-1 do
    if i <> j then a := a + lvEmails.Items[j].Caption + sLineBreak;
  contact.moremails := a;
  { postal }
  txtAddressTypeChange(nil); // save current changes to FAddresses
  contact.homeAddress := FAddresses[0];
  contact.workAddress := FAddresses[1];
  contact.morenums := FMoreNumbers;
  //See SyncPhonebook to save notes. SetContactNotes(@contact,MemoNotes.Lines);
  if not (FUseSIMMode or FUseOwnMode) then begin
    contact.DefaultIndex := cbDefaultNum.ItemIndex;
    contact.picture := lblPicName.Caption;
    contact.sound := lblSndName.Caption;
    contact.CDID := StringToGUID(txtContactDataID.Text);
  end;
  { Dont reset modified flags here, since we'll use them in SyncPhonebook. Only disable apply button. }
  ApplyButton.Enabled := False;
end;

procedure TfrmEditContact.ApplyButtonClick(Sender: TObject);
begin
  DoSanityCheck;
  SaveContactData;
end;

procedure TfrmEditContact.OkButtonClick(Sender: TObject);
begin
  DoSanityCheck;
  if ApplyButton.Enabled or IsNew then
    SaveContactData;
  ModalResult := mrOk;  
end;

procedure TfrmEditContact.txtTelKeyPress(Sender: TObject; var Key: Char);
begin
  case ord(Key) of
    8, 48..57: ;
    35, 42: ; // # and * (for special service numbers)
    3, 22, 24, 26: ; //escape CTRL+C,V,X,Z ;)
    43: with (Sender as TTntEdit) do begin
      if (Pos('+',Text) <> 0) or (SelStart <> 0) then begin
        Key := #0;     //only the first char can be '+'
        Beep;
      end;
    end;
    112: ; // p (pause)
    else begin

⌨️ 快捷键说明

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