📄 fcompose.pas
字号:
(*
# (C) Copyright 2003
# Miha Vrhovnik, miha.vrhovnik@cordia.si
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307 USA
#
# The Initial Developer of the Original Code is Miha Vrhovnik (Slovenia).
# Portions created by Miha Vrhovnik are Copyright (c)2003.
# All Rights Reserved.
#==============================================================================
# Contributor(s):
#==============================================================================
# History: see whats new.txt from distribution package
#==============================================================================
*)
unit fCompose;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ImgList, Menus, ComCtrls, ToolWin, StdCtrls, ActnList,
ActiveX, mimemess_siMail, mimeinln_siMail, synsock, synachar, pcre, Clipbrd,
VirtualTrees, MFEdit, VSTEdit, mimepart, synautil, Mask, OleCtrls,
synacode, TB2Item, TB2Dock, TB2Toolbar, TBX, TB2ExtItems, TBXExtItems, StrUtils,
TBXStatusBars, JvDragDrop, JvComponent, JvFindReplace, flatMime, SHDocVw,
EmbeddedWB, MSHTML_TLB, Math, JvExExtCtrls, JvNetscapeSplitter;
type TEditType = (tetNew, tetContinue, tetReply, tetReplyAll, tetForward);
type TAddrType = (tatTo, tatCC, tatBCC, tatReplyTo);
type
TfrmCompose = class(TForm)
ActionList2: TActionList;
actTBSendNow: TAction;
actTBSendLater: TAction;
actTBAttach: TAction;
actTBSignatures: TAction;
actTBAddressBook: TAction;
actTBSpellCheck: TAction;
actTBEncrypt: TAction;
ActionList1: TActionList;
diOpen: TOpenDialog;
actFileSendNow: TAction;
actFileSendLater: TAction;
actFileFinishLater: TAction;
actFileSaveToFile: TAction;
actFileOpenFromFile: TAction;
actFileClose: TAction;
actEditCut: TAction;
actEditCopy: TAction;
actEditPaste: TAction;
actEditPasteQuoted: TAction;
actEditFind: TAction;
actEditFindNext: TAction;
actEditReplace: TAction;
actEditSelectAll: TAction;
actViewStatusbar: TAction;
actViewToolbar: TAction;
actInsertAttachment: TAction;
actInsertTextFile: TAction;
actInsertAddressBook: TAction;
actInsertDate: TAction;
actInsertTime: TAction;
actInsertDateTime: TAction;
actInsertComputerInfo: TAction;
actToolsSpellcheckerSettings: TAction;
actToolsSpellcheck: TAction;
actOptionsRewarpLines: TAction;
actOptionsAutoComplete: TAction;
actFormatText: TAction;
actFormatHtml: TAction;
actFormatTextAndHtml: TAction;
actOptionsRequestReadRcpt: TAction;
Panel3: TPanel;
lstAttachments: TVirtualStringTree;
dfsSplitter1: TJvNetscapeSplitter;
dfsSplitter2: TJvNetscapeSplitter;
Panel1: TPanel;
pnlFrom: TPanel;
Label6: TLabel;
lstAddresses: TVirtualStringTree;
cmboxAccount: TComboBox;
cmboxMailType: TMFComboEdit;
actTBClose: TAction;
actTBReadReceipt: TAction;
pnlAll: TPanel;
pnlSubject: TPanel;
Label9: TLabel;
txtSubject: TEdit;
txtMessage: TMemo;
pnlSig: TPanel;
cmboxSignature: TComboBox;
ilFiles: TImageList;
editor: TVSTEditor;
TBXDock1: TTBXDock;
mnu: TTBXToolbar;
File1: TTBXSubmenuItem;
SendNow1: TTBXItem;
SendLater1: TTBXItem;
N2: TTBXSeparatorItem;
FinishLater1: TTBXItem;
Savetofile1: TTBXItem;
Openfromfile1: TTBXItem;
N7: TTBXSeparatorItem;
Pagesetup1: TTBXItem;
Print1: TTBXItem;
Print2: TTBXItem;
N3: TTBXSeparatorItem;
Close1: TTBXItem;
Edit1: TTBXSubmenuItem;
Cut1: TTBXItem;
Copy1: TTBXItem;
Paste1: TTBXItem;
Pastequoted1: TTBXItem;
N1: TTBXSeparatorItem;
Find1: TTBXItem;
Findnext1: TTBXItem;
Replace1: TTBXItem;
N4: TTBXSeparatorItem;
SelectAll1: TTBXItem;
View1: TTBXSubmenuItem;
Statusbar1: TTBXItem;
oolbar1: TTBXItem;
Insert1: TTBXSubmenuItem;
Attachment1: TTBXItem;
extfile1: TTBXItem;
Addressbook1: TTBXSeparatorItem;
N5: TTBXItem;
Date1: TTBXItem;
ime1: TTBXItem;
DateTime1: TTBXItem;
ComputerInfo1: TTBXItem;
ools1: TTBXSubmenuItem;
Spellcheckersetings1: TTBXItem;
Spellcheck1: TTBXItem;
N6: TTBXSeparatorItem;
Managesignatures1: TTBXItem;
Addressbook2: TTBXItem;
Options1: TTBXSubmenuItem;
Rewraplines1: TTBXItem;
Enableautocomplete1: TTBXItem;
N8: TTBXSeparatorItem;
RequestreadRecipient1: TTBXItem;
Format1: TTBXSubmenuItem;
extformatmessage1: TTBXItem;
Htmlformatmessage1: TTBXItem;
exthtmlformatmessage1: TTBXItem;
Help1: TTBXSubmenuItem;
About1: TTBXItem;
tb1: TTBXToolbar;
TBXItem1: TTBXItem;
TBXItem2: TTBXItem;
TBXSeparatorItem1: TTBXSeparatorItem;
TBXItem3: TTBXItem;
TBXItem4: TTBXItem;
TBXItem5: TTBXItem;
TBXSeparatorItem2: TTBXSeparatorItem;
TBXItem6: TTBXItem;
TBXItem7: TTBXItem;
TBXSubmenuItem1: TTBXSubmenuItem;
TBXSeparatorItem3: TTBXSeparatorItem;
TBXItem8: TTBXItem;
TBXItem9: TTBXItem;
TBXItem10: TTBXItem;
TBXItem11: TTBXItem;
actTBSign: TAction;
actEncryptAndSign: TAction;
ilPriority: TImageList;
TBXToolbar3: TTBXToolbar;
cmboxMsgType: TTBXComboBoxItem;
TBXToolbar2: TTBXToolbar;
cmboxPriority: TTBXComboBoxItem;
sb: TTBXStatusBar;
JvDragDrop1: TJvDragDrop;
diFindAndReplace: TJvFindReplace;
diOpenText: TOpenDialog;
msgView: TEmbeddedWB;
diSave: TSaveDialog;
actFilePrintPrint: TAction;
actFilePrintPreview: TAction;
actFilePrintSetup: TAction;
actAddEmailAddresses: TAction;
txtMail: TMFACButtonEdit;
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure cmboxAccountClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure actTBSendLaterExecute(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
procedure FormHide(Sender: TObject);
procedure actTBSignaturesExecute(Sender: TObject);
procedure actTBAttachExecute(Sender: TObject);
procedure lstAttachmentsGetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
var Ghosted: Boolean; var ImageIndex: Integer);
procedure lstAttachmentsGetNodeDataSize(Sender: TBaseVirtualTree;
var NodeDataSize: Integer);
procedure lstAttachmentsGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
procedure actInsertAttachmentExecute(Sender: TObject);
procedure actFileCloseExecute(Sender: TObject);
procedure lstAddressesClick(Sender: TObject);
procedure lstAddressesCreateEditor(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
procedure lstAddressesEdited(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex);
procedure lstAddressesGetNodeDataSize(Sender: TBaseVirtualTree;
var NodeDataSize: Integer);
procedure lstAddressesGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
procedure lstAddressesEditing(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean);
procedure cmboxSignatureChange(Sender: TObject);
procedure actTBCloseExecute(Sender: TObject);
procedure actOptionsRequestReadRcptExecute(Sender: TObject);
procedure actTBReadReceiptExecute(Sender: TObject);
procedure txtSubjectClick(Sender: TObject);
procedure actFileSendNowExecute(Sender: TObject);
procedure actFileSendLaterExecute(Sender: TObject);
procedure actTBSendNowExecute(Sender: TObject);
procedure lstAddressesPaintText(Sender: TBaseVirtualTree;
const TargetCanvas: TCanvas; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType);
procedure txtMailButtonClick(Sender: TObject);
procedure pnlSubjectEnter(Sender: TObject);
procedure lstAttachmentsDblClick(Sender: TObject);
procedure lstAttachmentsCompareNodes(Sender: TBaseVirtualTree; Node1,
Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
procedure lstAttachmentsHeaderClick(Sender: TVTHeader;
Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
procedure actEditCutExecute(Sender: TObject);
procedure actEditCopyExecute(Sender: TObject);
procedure actEditPasteExecute(Sender: TObject);
procedure actEditPasteQuotedExecute(Sender: TObject);
procedure actEditSelectAllExecute(Sender: TObject);
procedure actTBAddressBookUpdate(Sender: TObject);
procedure actTBAddressBookExecute(Sender: TObject);
procedure txtSubjectChange(Sender: TObject);
procedure JvDragDrop1Drop(Sender: TObject; Pos: TPoint;
Value: TStrings);
procedure msgViewDocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure actEditFindExecute(Sender: TObject);
procedure actEditFindNextExecute(Sender: TObject);
procedure actEditReplaceExecute(Sender: TObject);
procedure actFileFinishLaterExecute(Sender: TObject);
procedure actInsertTextFileExecute(Sender: TObject);
procedure actInsertDateExecute(Sender: TObject);
procedure actInsertTimeExecute(Sender: TObject);
procedure actInsertDateTimeExecute(Sender: TObject);
procedure actInsertComputerInfoExecute(Sender: TObject);
procedure actViewToolbarExecute(Sender: TObject);
procedure actViewStatusbarExecute(Sender: TObject);
procedure actFileSaveToFileExecute(Sender: TObject);
procedure actFileOpenFromFileExecute(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure actAddEmailAddressesExecute(Sender: TObject);
procedure txtMessageChange(Sender: TObject);
procedure cmboxPriorityChange(Sender: TObject; const Text: String);
procedure lstAddressesFocusChanged(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex);
procedure lstAddressesKeyPress(Sender: TObject; var Key: Char);
procedure actOptionsAutoCompleteExecute(Sender: TObject);
private
FAccount: Integer;
FmsgID: Integer; //if continue edit
FoldAccountIdx: Integer;
FEditType: TEditType;
FMailbox: Integer;
FCaption: String;
FOldMsgMime: TMimeMess;
askForSave: Boolean;
emailList: TStringList; //stores list of e-mails and their accounts
procedure buildEmailListUTF8(Value: string; lst: TStringList);
procedure buildEmailList(Value: string; lst: TStrings; justEmail: Boolean = False);
procedure loadUserSettings;
procedure loadAddresses(mime: TMimeMess); overload;
function loadAddresses: String; overload;
procedure moveAddresses;
procedure addNewNodeToAddresses;
function findAccountIndex(accountName: string): Integer;
function lTrimPunctuation(Value: String): String;
function rTrimPunctuation(Value: String): String;
function TrimPunctuation(Value: String): String;
function buildMessage(finnishLater: Boolean = False; saveStream: TStream = nil): Integer;
procedure deleteAttachments;
procedure addAddress(type1: TAddrType; mail1: String);
procedure selectCorrectSignature;
procedure loadSignatures;
procedure updateAttachmentsSize;
procedure processMimePart(mimePart: TMimePart);
function reformatReplies(Value: String): String;
function getNumber(str: String; var len: Integer): Integer;
function reformatForwards(Value: String): String;
procedure loadEmbededAttachments(fm: TFlatMsg);
function findAliasIndex(accountNo: Integer; alias: String): Integer; overload;
function findAliasIndex(accountNo: Integer; emails1, emails2: String): Integer; overload;
function extractEMail(str: String): String;
public
{ Public declarations }
procedure LoadOld(msgIdx: Integer; loadStream: TStream = nil);
property Account: Integer read FAccount write FAccount;
property Mailbox: Integer read FMailbox write FMailbox;
property MessageID: Integer read FmsgID write FmsgID;
property EditType: TEditType read FEditType write FEditType;
procedure CreateMessage(msg, subject, sendTo: String; attachments: TStringList); overload;
procedure CreateMessage(msg, subject, sendTo, sendCc, sendBcc: String; attachments: TStringList); overload;
procedure CreateParams(var Params: TCreateParams); override;
end;
var
frmCompose: TfrmCompose;
implementation
uses
account, mailBox, fMain, fMailView, tasks, gnugettext,
addrBk_frm, fMyInputBox, task, defFldrs, dImages, maillist;
{$R *.dfm}
//tree type data
type TTreeAddresses = record
type_: TAddrType;
mail: String;
end;
type PTreeAddresses = ^TTreeAddresses;
procedure TfrmCompose.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;
procedure TfrmCompose.FormCreate(Sender: TObject);
var i, j: Integer;
var l: TStringList;
begin
//translate me
TranslateComponent(Self); //we must translate this form in onCreate event
txtMessage.Align := alClient;
//load accounts
cmboxAccount.Clear;
//this list maps e-mails to accounts
emailList := TStringList.Create;
l := TStringList.Create;
//build list of e-mail - [account] and corresponding map file
for i := 0 to frmMailbox.Profile.Accounts.Count - 1 do begin
l.Text := frmMailbox.Profile.Accounts[i].Aliases;
emailList.AddObject(frmMailbox.Profile.Accounts[i].EMail, Pointer(i));
cmboxAccount.Items.AddObject(frmMailbox.Profile.Accounts[i].EMail + ' - [' +
frmMailbox.Profile.Accounts[i].AccountName + ']', Pointer(emailList.Count - 1));
for j := 0 to l.Count - 1 do begin
emailList.AddObject(l[j], Pointer(i));
cmboxAccount.Items.AddObject(l[j] + ' - [' +
frmMailbox.Profile.Accounts[i].AccountName + ']', Pointer(emailList.Count - 1));
end;
end;
msgView.Top := -1000; msgView.Left := -1000;
//draw flat controls
frmMain.XPMenu1.InitComponent(Self);
//MainMenu1.AutoHotkeys := maAutomatic;
lstAddresses.Clear;
addAddress(tatTo, '');
//load signatures
loadSignatures;
frmMain.ConvertToHighColor(ilFiles);
Randomize;
//add priority images
ilPriority.AddImage(dmImages.ilMailListMessages, 13);
ilPriority.AddImage(dmImages.ilMailListMessages, 12);
ilPriority.AddImage(dmImages.ilMailListMessages, 11);
ilPriority.AddImage(dmImages.ilMailListMessages, 10);
ilPriority.AddImage(dmImages.ilMailListMessages, 9);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -