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

📄 addressbook.pas

📁 siMail, siMail, siMail, siMail
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    Node := trAddressBook.GetFirstSelected;
    while (Node <> nil) do begin
      nd := trAddressBook.GetNodeData(Node);
      if nd^.id = atContact then begin
        TPerson(nd^.obj).Delete;
        trAddressBook.DeleteNode(Node);
        Node := trAddressBook.GetFirstSelected;
      end
      else
        Node := trAddressBook.GetNextSelected(Node);
    end;
    (FSelectedAddressBook.Collection as TAddressBooks).Dirty := True;
    //update address book if necessary
    if FSelectedAddressBook = frmAddrBk.SelectedAddressBook then
      frmAddrBk.ReloadBook(rbmFullReload);
  end;
  Result := True;
end;

procedure TfrmAddressBook.trAddressBookDblClick(Sender: TObject);
begin
  if ssShift in KeyboardStateToShiftState then
    actEditContact.Execute
  else
    actSendMail.Execute;
end;

procedure TfrmAddressBook.actOpenAddressBookExecute(Sender: TObject);
begin
  frmAddrBk.Mode := abkNormal;
  frmAddrBk.Show;
end;

procedure TfrmAddressBook.actNewContactUpdate(Sender: TObject);
begin
  if FSelectedAddressBook <> nil then
    actNewContact.Enabled := True
  else
    actNewContact.Enabled := False;

end;

procedure TfrmAddressBook.actPublicAddressBookUpdate(Sender: TObject);
begin
  if mnuPublic.Count > 0 then 
    actPublicAddressBook.Visible := True
  else
    actPublicAddressBook.Visible := False;

end;

procedure TfrmAddressBook.actPrivateAddressBookUpdate(Sender: TObject);
begin
  if mnuPrivate.Count > 0 then
    actPrivateAddressBook.Visible := True
  else
    actPrivateAddressBook.Visible := False;

end;

procedure TfrmAddressBook.actAddressBooksUpdate(Sender: TObject);
begin
  if actPrivateAddressBook.Visible or actPublicAddressBook.Visible then
    actAddressBooks.Enabled := True
  else
    actAddressBooks.Enabled := False;
end;

procedure TfrmAddressBook.Books2Menues;
var newMenu:TTBXItem;
var i: Integer;
begin
  //public address books
  for i := 0 to frmMailbox.PublicAddressBook.Count - 1 do begin
    newMenu:=TTBXItem.Create(mnuPublic);
    mnuPublic.Add(newMenu);
    with newMenu do begin
      Caption := frmMailbox.PublicAddressBook.AddressBooks[i].BookName;
      Tag := cMenuPublicBook;
      Visible := True;
      OnClick := mnuBookClick;
    end;
  end;
  //private address books
  for i := 0 to frmMailbox.Profile.AddressBook.Count - 1 do begin
    newMenu:=TTBXItem.Create(mnuPrivate);
    mnuPrivate.Add(newMenu);
    with newMenu do begin
      Caption := frmMailbox.Profile.AddressBook.AddressBooks[i].BookName;
      Tag := cMenuPrivateBook;
      Visible := True;
      OnClick := mnuBookClick;
    end;
  end;
end;

procedure TfrmAddressBook.mnuBookClick(Sender: TObject);
var idx: Integer;
begin
  with Sender as TTBXItem do begin
    if Tag = cMenuPublicBook then begin
      idx := Parent.IndexOf(Sender as TTBXItem);
      LoadBook(idx, False);
      frmMailbox.Profile.Config.WriteInteger(Self.Name, 'lastAddressBook', idx);
      frmMailbox.Profile.Config.WriteBool(Self.Name, 'wasPrivateBook', False);
    end
    else begin
      idx := Parent.IndexOf(Sender as TTBXItem);
      LoadBook(idx, True);
      frmMailbox.Profile.Config.WriteInteger(Self.Name, 'lastAddressBook', idx);
      frmMailbox.Profile.Config.WriteBool(Self.Name, 'wasPrivateBook', True);
    end;
  end;
end;

procedure TfrmAddressBook.actAddressBooksExecute(Sender: TObject);
begin
// don't delete this line
end;

procedure TfrmAddressBook.actPublicAddressBookExecute(Sender: TObject);
begin
// don't delete this line
end;

procedure TfrmAddressBook.actPrivateAddressBookExecute(Sender: TObject);
begin
// don't delete this line
end;

procedure TfrmAddressBook.ReloadBook(mode: TReloadBookMode);
begin
  case mode of
  rbmNewContact: trAddressBook.RootNodeCount := SelectedAddressBook.Persons.Count;
  //rbmContactEdit:
  else begin
    trAddressBook.Clear;
    trAddressBook.RootNodeCount := SelectedAddressBook.Persons.Count
  end
  end;
end;

procedure TfrmAddressBook.trAddressBookCompareNodes(
  Sender: TBaseVirtualTree; Node1, Node2: PVirtualNode;
  Column: TColumnIndex; var Result: Integer);
var nd1, nd2: PTreeAddrBk;
begin
  nd1 := trAddressBook.GetNodeData(Node1);
  nd2 := trAddressBook.GetNodeData(Node2);

  if nd1.id = nd2.id then begin
    case nd1.id of
    //atGroup:
    atContact: Result := CompareText(GetFullName(TPerson(nd1.obj)), GetFullName(TPerson(nd2.obj)));
    atEmail: Result := CompareText(TEmail(nd1.obj).Email, TEmail(nd2.obj).Email);
    end;
  end
  else
    Result := 0; //nodes are equal

end;

function TfrmAddressBook.GetFullName(pers: TPerson): String;
begin
  Result := pers.General.FirstName + ' ';
  Result := Result + pers.General.MiddleName + ' ';
  Result := Result + pers.General.LastName;

end;

procedure TfrmAddressBook.trAddressBookPaintText(Sender: TBaseVirtualTree;
  const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  TextType: TVSTTextType);
begin
  //default e--mail is written in bold
  if PTreeAddrBk(trAddressBook.GetNodeData(Node))^.default then
    TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold]
  else
    TargetCanvas.Font.Style := TargetCanvas.Font.Style - [fsBold];
end;

procedure TfrmAddressBook.DeleteBookFromMenu(bkIdx: Integer; privatBk: Boolean);
begin
  if privatBk then
    mnuPrivate.Delete(bkIdx)
  else
    mnuPublic.Delete(bkIdx);

  if FSelectedAddressBook = frmAddrBk.SelectedAddressBook then begin
    trAddressBook.Clear;
    FSelectedAddressBook := nil;
    lblContacts.Caption := '';
    Label1.Visible := True;
  end;
end;

procedure TfrmAddressBook.AddBookToMenu(bkIdx: Integer; privatBk: Boolean);
var newMenu:TTBXItem;
begin

  if privatBk then begin
    newMenu:=TTBXItem.Create(mnuPrivate);
    mnuPrivate.Add(newMenu);
    with newMenu do begin
      Caption := frmMailbox.Profile.AddressBook.AddressBooks[bkIdx].BookName;
      Tag := cMenuPrivateBook;
      Visible := True;
      OnClick := mnuBookClick;
    end;
  end
  else begin
    newMenu:=TTBXItem.Create(mnuPublic);
    mnuPublic.Add(newMenu);
    with newMenu do begin
      Caption := frmMailbox.PublicAddressBook.AddressBooks[bkIdx].BookName;
      Tag := cMenuPublicBook;
      Visible := True;
      OnClick := mnuBookClick;
    end;
  end;
end;

procedure TfrmAddressBook.UpdateBookInMenu(bkIdx: Integer; privatBk: Boolean);
begin
  if privatBk then begin
    mnuPrivate.Items[bkIdx].Caption := frmMailbox.Profile.AddressBook.AddressBooks[bkIdx].BookName;
    if FSelectedAddressBook = frmAddrBk.SelectedAddressBook then
      lblContacts.Caption := FSelectedAddressBook.BookName + _(' - [Private]');
  end
  else begin
    mnuPublic.Items[bkIdx].Caption := frmMailbox.PublicAddressBook.AddressBooks[bkIdx].BookName;
    if FSelectedAddressBook = frmAddrBk.SelectedAddressBook then
      lblContacts.Caption := FSelectedAddressBook.BookName + _(' - [Public]');
  end;

end;

procedure TfrmAddressBook.actSendMailExecute(Sender: TObject);
var Node: PVirtualNode;
var nd: PTreeAddrBk;
var mail: String;
begin
  if trAddressBook.SelectedCount = 0 then Exit;
  Node := trAddressBook.GetFirstSelected;

  nd := PTreeAddrBk(trAddressBook.GetNodeData(Node));

  if nd.id = atEmail then begin
    mail := '"' + GetFullName(PTreeAddrBk(trAddressBook.GetNodeData(Node.Parent))^.obj)
          + '" <' + TEmail(nd.obj).Email + '>';
    end
    else if nd.id = atContact then begin
      mail := '"' + GetFullName(TPerson(nd.obj)) +
        '" <' + TPerson(nd.obj).Emails.Emails[0].Email + '>';
    end;

   frmMaillist.actMessageNew.Execute;
   frmMaillist.LastCompose.CreateMessage('', '', mail, '', '', nil);

end;

procedure TfrmAddressBook.actSendMailToExecute(Sender: TObject);
var Node: PVirtualNode;
var nd: PTreeAddrBk;
var mail: String;
begin
  if trAddressBook.SelectedCount = 0 then Exit;
  Node := trAddressBook.GetFirstSelected;

  mail := '';
  
  while Node <> nil do begin
    nd := PTreeAddrBk(trAddressBook.GetNodeData(Node));

    if nd.id = atEmail then begin
      mail := mail + '"' + GetFullName(PTreeAddrBk(trAddressBook.GetNodeData(Node.Parent))^.obj)
        + '"' + ' <' + TEmail(nd.obj).Email + '>';
    end
    else if nd.id = atContact then begin
       mail := mail + '"' + GetFullName(TPerson(nd.obj)) + '"'
        + ' <' + TPerson(nd.obj).Emails.Emails[0].Email + '>';
    end;
    mail := mail + ',';
    Node := trAddressBook.GetNextSelected(Node);
  end;
  if mail[Length(mail)] = ',' then
    mail := LeftStr(mail, Length(mail) - 1);

  frmMaillist.actMessageNew.Execute;
  if Sender = actSendMailTo then
    frmMaillist.LastCompose.CreateMessage('', '', mail, '', '', nil)
  else if Sender = actSendMailCc then
    frmMaillist.LastCompose.CreateMessage('', '', '', mail, '', nil)
  else if Sender = actSendMailBcc then
    frmMaillist.LastCompose.CreateMessage('', '', '', '', mail, nil);

end;

procedure TfrmAddressBook.trAddressBookExit(Sender: TObject);
var Node: PVirtualNode;
begin
  Node := trAddressBook.GetFirstSelected;
  while Node <> nil do begin
    trAddressBook.Selected[Node] := False;
    Node := trAddressBook.GetFirstSelected;
  end;
end;

procedure TfrmAddressBook.LoadUserSettings;
var cName: String;
begin
  cName := frmMailbox.Profile.Config.ReadString(Self.Name, tbCompose.Name + 'Dock', '');
  if cName = '' then
    tbCompose.CurrentDock := tbCompose.DefaultDock
  else begin
    if cName = dckTop.Name then
      tbCompose.CurrentDock := dckTop
    else if cName = dckBottom.Name then
      tbCompose.CurrentDock := dckBottom
    else
      tbCompose.CurrentDock := tbCompose.DefaultDock;
  end;
end;

procedure TfrmAddressBook.tbComposeDockChanged(Sender: TObject);
begin
  if tbCompose.CurrentDock = nil then
    Exit;
  frmMailbox.Profile.Config.WriteString(Self.Name, tbCompose.Name + 'Dock', tbCompose.CurrentDock.Name);
end;

procedure TfrmAddressBook.ClearAddressBookMenues;
var i: Integer;
begin
  for i := mnuPublic.Count - 1 downto 0 do
    mnuPublic.Delete(i);

  for i := mnuPrivate.Count - 1 downto 0 do
    mnuPrivate.Delete(i);

end;

procedure TfrmAddressBook.cmdShowMenuClick(Sender: TObject);
begin
  popAddr.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
end;

end.

⌨️ 快捷键说明

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