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

📄 fcompose.pas

📁 siMail, siMail, siMail, siMail
💻 PAS
📖 第 1 页 / 共 5 页
字号:
(*
# (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 + -