📄 addressbook.pas
字号:
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 + -