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

📄 fexportmessageswizard.pas

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

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, JvWizard, JvWizardRouteMapSteps, JvWizardRouteMapNodes, JvWaitingGradient, ExtCtrls,
  StdCtrls, VirtualTrees, PluginManager, JvComponent, JvExControls, ActiveX,
  BasePluginInterface, siMailPluginInterfaces, StrUtils, CheckLst, TB2Item,
  Menus, TBX, account;

type
  TfrmExportMessagesWizard = class(TForm)
    wizard: TJvWizard;
    KWizardRouteMapSteps1: TJvWizardRouteMapSteps;
    wizWelcome: TJvWizardWelcomePage;
    wizExport: TJvWizardInteriorPage;
    wizExportFrom: TJvWizardInteriorPage;
    Panel1: TPanel;
    txtLog: TMemo;
    Label1: TLabel;
    lstFormats: TVirtualStringTree;
    lblDescription: TLabel;
    Label2: TLabel;
    wizExportSettings: TJvWizardInteriorPage;
    pnlPlugInContainer: TScrollBox;
    Panel3: TPanel;
    Label3: TLabel;
    cmboxAccounts: TComboBox;
    Label4: TLabel;
    chklstMailboxes: TCheckListBox;
    popSelect: TTBXPopupMenu;
    mnuSelectAll: TTBItem;
    mnuSelectNone: TTBItem;
    mnuInvertSelection: TTBItem;
    procedure wizardFinishButtonClick(Sender: TObject);
    procedure wizardCancelButtonClick(Sender: TObject);
    procedure FormHide(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
    procedure lstFormatsGetNodeDataSize(Sender: TBaseVirtualTree;
      var NodeDataSize: Integer);
    procedure lstFormatsGetText(Sender: TBaseVirtualTree;
      Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
      var CellText: WideString);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure lstFormatsChange(Sender: TBaseVirtualTree;
      Node: PVirtualNode);
    procedure lstFormatsFreeNode(Sender: TBaseVirtualTree;
      Node: PVirtualNode);
    procedure wizardSelectNextPage(Sender: TObject;
      FromPage: TJvWizardCustomPage; var ToPage: TJvWizardCustomPage);
    procedure wizWelcomeEnterPage(Sender: TObject;
      const Page: TJvWizardCustomPage);
    procedure mnuSelectAllClick(Sender: TObject);
    procedure mnuSelectNoneClick(Sender: TObject);
    procedure mnuInvertSelectionClick(Sender: TObject);
    procedure cmboxAccountsChange(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    FPlugIns: TPluginManager;
    exported: Boolean;
    oldOffline: Boolean;
    procedure AddNewFormatToList(plugIn: IsiMailMailboxExportPlugin_V1; no: Integer);
    procedure Export;
    procedure buildMessage(mbox: TMailbox; msgID: Integer;var str: String);
    function readStringFromStream(len: Integer; stream: TStream): String;
  public
    { Public declarations }
  end;

var
  frmExportMessagesWizard: TfrmExportMessagesWizard;

implementation

uses
  mailBox, defFldrs, gnugettext, fMain, mimemess_siMail, mimepart, flatMime,
  uExMbox;

{$R *.dfm}

type TTreeFormats = record
    Caption: String;
    pi: IsiMailMailboxExportPlugin_V1;
    Format: Integer;   //format no form plugin
end;

type PTreeFormats = ^TTreeFormats;

var SelectedPlugIn: TTreeFormats;

procedure TfrmExportMessagesWizard.wizardFinishButtonClick(Sender: TObject);
begin
  if not exported then begin
    Export;
    exported := True;
  end
  else
    Self.Close;
end;

procedure TfrmExportMessagesWizard.wizardCancelButtonClick(Sender: TObject);
begin
  Self.Close;
end;

procedure TfrmExportMessagesWizard.FormHide(Sender: TObject);
begin
  //write self position & size
  frmMailbox.Profile.Config.WriteControlSettings(Self);
end;

procedure TfrmExportMessagesWizard.FormShow(Sender: TObject);
var i, j: Integer;
var ipi_V1: IsiMailMailboxExportPlugin_V1;
begin
  //translate me
  TranslateComponent(Self);
  oldOffline := frmMain.Online;
  frmMain.Online := False;

  cmboxAccounts.Clear;
  for i:=  0 to frmMailbox.Profile.Accounts.Count - 1 do
    cmboxAccounts.Items.AddObject(frmMailbox.Profile.Accounts[i].AccountName, Pointer(i));

  cmboxAccounts.ItemIndex := 0;
  cmboxAccountsChange(cmboxAccounts);
  
  lstFormats.Clear;
  wizard.ActivePageIndex := 0;

  //read self position & size
  frmMailbox.Profile.Config.ReadControlSettings(Self);
  lstFormats.Clear;

  if FPlugIns.Count = 0 then begin
    FPlugIns.AddCustomPlugin(uExMbox.RegisterPlugin);
    //load dll plug-ins
    FPlugIns.PluginFolder := df.piExportMessages;
    FPlugIns.LoadPlugins;
  end;

  for i := 0 to FPlugIns.Count - 1 do begin
    if FPlugIns.PlugIn[i].QueryInterface(IIsiMailMailboxExportPlugin_V1, ipi_V1) = S_OK then begin
      FPlugIns.PlugIn[i].SetApplication(Application.Handle);
      for j := 1 to ipi_V1.GetSupportedFormatCount do
        AddNewFormatToList(ipi_V1, j);
    end;
  end;
  txtLog.Clear;
end;

procedure TfrmExportMessagesWizard.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
  if msg.CharCode = 27 then begin
    Self.Close;
    Handled := True;
  end;
end;

procedure TfrmExportMessagesWizard.lstFormatsGetNodeDataSize(
  Sender: TBaseVirtualTree; var NodeDataSize: Integer);
begin
  NodeDataSize := SizeOf(TTreeFormats);
end;

procedure TfrmExportMessagesWizard.lstFormatsGetText(
  Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex;
  TextType: TVSTTextType; var CellText: WideString);
begin
  CellText := PTreeFormats(Sender.GetNodeData(Node)).Caption;
end;

procedure TfrmExportMessagesWizard.FormCreate(Sender: TObject);
begin
  FPlugIns := TPluginManager.Create;
end;

procedure TfrmExportMessagesWizard.FormDestroy(Sender: TObject);
begin
  if SelectedPlugIn.pi <> nil then begin
    SelectedPlugIn.pi.SetParentHandle(0);
    SelectedPlugIn.pi := nil;
  end;
  FreeAndNil(FPlugIns);
end;

procedure TfrmExportMessagesWizard.AddNewFormatToList(
  plugIn: IsiMailMailboxExportPlugin_V1; no: Integer);
var nd: PTreeFormats;
var str: PChar;
begin
  nd := lstFormats.GetNodeData(lstFormats.AddChild(nil));
  nd^.Format := no;
  nd^.pi := plugIn;
  plugIn.GetSupportedFormat(no, str);
  nd^.Caption := str;
end;

procedure TfrmExportMessagesWizard.lstFormatsChange(
  Sender: TBaseVirtualTree; Node: PVirtualNode);
var nd: PTreeFormats;
var str: PChar;
begin
  if Node = nil then
    Exit;
  nd := lstFormats.GetNodeData(Node);
  nd^.pi.GetSupportedFormatDescription(nd^.Format, str);
  lblDescription.Caption := str;
end;

procedure TfrmExportMessagesWizard.lstFormatsFreeNode(
  Sender: TBaseVirtualTree; Node: PVirtualNode);
begin
  //PTreeFormats(lstFormats.GetNodeData(Node))^.pi := nil;
end;

procedure TfrmExportMessagesWizard.wizardSelectNextPage(Sender: TObject;

⌨️ 快捷键说明

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