elmimeviewer_mainform.pas
来自「著名的SecureBlackBox控件完整源码」· PAS 代码 · 共 1,038 行 · 第 1/3 页
PAS
1,038 行
// File Version: 2004-03-12
unit ElMimeViewer_MainForm;
{$i ElMimeViewer_Options.inc}
interface
uses
{$IFDEF DELPHI_NET}
System.Text,
System.Collections,
System.ComponentModel,
{$ENDIF}
// System units:
Windows, Messages, SysUtils, {$IFDEF D_6_UP}Variants,{$ENDIF} Classes,
SBUtils,
// SB Unicode Library
SBChSConvCharsets, // include all charsets
// ElMime units:
SBMIMETypes,
SBMIMEUtils,
SBMIMEClasses,
SBMIMEStream,
SBMIME,
// optional ElMime units:
{$IFDEF _UUE_}
SBMIMEUUE, // add support UUE
ElMimeViewer_OptionsUUE,
{$ENDIF}
{$IFDEF _SMIME_}
SBSMIMECore, // add support SMIME
ElMimeViewer_OptionsSMime,
ElMimeViewer_CertDetails,
{$ENDIF}
{$IFDEF _PGP_}
ElMimeViewer_OptionsPGPMime,
SBPGPKeys,
SBPGPMIME,
SBPGPUtils,
{$ENDIF}
// Demo units:
ElMimeViewer_DataCommon,
// VCL units:
Graphics, Controls, Forms,
Dialogs, Menus, ComCtrls, ExtCtrls;
type
TfrmMain = class(TForm)
StatusBar: TStatusBar;
mainMenu: TMainMenu;
miFile: TMenuItem;
miOpenLoadParse: TMenuItem;
miSaveAssemble: TMenuItem;
miEdit: TMenuItem;
miDelete: TMenuItem;
miCreate: TMenuItem;
miView: TMenuItem;
miHelp: TMenuItem;
miAbout: TMenuItem;
N1: TMenuItem;
miExit: TMenuItem;
TreeView: TTreeView;
Splitter1: TSplitter;
OD: TOpenDialog;
miCollapseAll: TMenuItem;
miExpandAll: TMenuItem;
pDetailView: TPanel;
pContainer: TPanel;
pCap: TPanel;
ShapeR: TShape;
ShapeB: TShape;
procedure miExitClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure miOpenLoadParseClick(Sender: TObject);
procedure miSaveAssembleClick(Sender: TObject);
procedure miDeleteClick(Sender: TObject);
procedure miCreateClick(Sender: TObject);
procedure miAboutClick(Sender: TObject);
procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
procedure TreeViewExpanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
procedure miCollapseAllClick(Sender: TObject);
procedure miExpandAllClick(Sender: TObject);
procedure TreeViewChange(Sender: TObject; Node: TTreeNode);
procedure miEditClick(Sender: TObject);
procedure miViewClick(Sender: TObject);
procedure TreeViewAdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
var PaintImages, DefaultDraw: Boolean);
{$IFDEF _PGP_}
procedure HandleKeyPassphrase(Sender: TObject; Key : TElPGPCustomSecretKey;
var Passphrase: string; var Cancel: boolean);
{$ENDIF}
private
{ Private declarations }
fRootOptions :TTreeNode;
fRootOptionsParser :TTreeNodeInfoOptions;
fRootParseMessages :TTreeNode;
{$IFDEF DEV_COMMENTS}
fRootAssembleMessages: TTreeNode;
{$ENDIF}
public
fOpParamsInTree: Boolean;
fOpFieldsInTree: Boolean;
fOpHeaderInTree: Boolean;
fOpBodyInTree: Boolean;
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
uses ElMimeViewer_OptionsParser;
{$R *.dfm}
procedure NotImplemented;
begin
ShowMessage('This function has not been implemented.');
Abort;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
{$IFDEF DEV_COMMENTS}
//var
// Node: TTreeNodeInfoOptions;
{$ENDIF IFDEF DEV_COMMENTS}
begin
// interface options for loaded/parsed messages
fOpParamsInTree := True;
fOpFieldsInTree := True;
fOpHeaderInTree := True;
fOpBodyInTree := True;
// TreeView initialize
fRootOptions := TreeView.Items.AddChild(nil, 'Options');
fRootOptions.ImageIndex := 0;
fRootOptions.SelectedIndex := 0;
fRootParseMessages := TreeView.Items.AddChild(nil, 'Parsed Messages');
fRootParseMessages.ImageIndex := 1;
fRootParseMessages.SelectedIndex := 1;
{$IFDEF DEV_COMMENTS}
//todo:
//fRootAssembleMessages := TreeView.Items.AddChild(nil, 'Assemble Messages');
//fRootAssembleMessages.ImageIndex := 2;
//fRootAssembleMessages.SelectedIndex := 2;
//TTreeNodeInfoOptions
{fRootOptionsParser := TreeView.Items.AddChild(fRootOptions, 'Parser');
fRootOptionsParser.ImageIndex := 3;
fRootOptionsParser.SelectedIndex := 3;}
{$ENDIF IFDEF DEV_COMMENTS}
fRootOptionsParser := TTreeNodeInfoOptions.Create(fRootOptions.Owner, tiOptions, TfraOptionsParser.Create(nil), True);
TTreeNodesA(fRootOptionsParser.Owner).AddNode(fRootOptionsParser, fRootOptions, 'MIME', nil, naAddChild);
fRootOptionsParser.PlugFrame := TfraOptionsParser(fRootOptionsParser.TagObj);
fRootOptionsParser.ImageIndex := 3;
fRootOptionsParser.SelectedIndex := 3;
dmElMime.InitExtensions( fRootOptions );
{$IFDEF DEV_COMMENTS}
{$IFDEF _DEBUG_}
//TElMessageThread.Create(fRootParseMessages, 'JPEG.eml', nil, dmElMime);
//TElMessageThread.Create(fRootParseMessages, 'aa-bug.parse.subj.utf-16.eml', nil, dmElMime);
//TElMessageThread.Create(fRootParseMessages, 'Message.eml', dmElMime);
//TElMessageThread.Create(fRootParseMessages, 'Message.Header.Field.Comments.eml', nil, dmElMime);
//TElMessageThread.Create(fRootParseMessages, 'Message.uue.1.eml', nil, dmElMime);
//TElMessageThread.Create(fRootParseMessages, 'Message.e-mal.group.eml', nil, dmElMime);
//TElMessageThread.Create(fRootParseMessages, 'Message.sign-a.eml', nil, dmElMime);
//TElMessageThread.Create(fRootParseMessages, 'Message.html.plain.eml', nil, dmElMime);
//TElMessageThread.Create(fRootParseMessages, 'Message.plain.html.eml', nil, dmElMime);
//TElMessageThread.Create(fRootParseMessages, '__SPAM__.eml', nil, dmElMime);
//fRootParseMessages.Expand(True);
{$ENDIF}
{$ENDIF IFDEF DEV_COMMENTS}
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
FreeAndNil(dmElMime);
end;
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
{$IFDEF _DEBUG_}
// quick exit:
TerminateProcess(OpenProcess (PROCESS_TERMINATE, False, GetCurrentProcessID),0);
{$ENDIF}
end;
procedure TfrmMain.miCollapseAllClick(Sender: TObject);
begin
if Assigned(TreeView.Selected) then
TreeView.Selected.Collapse(True);
end;
procedure TfrmMain.miExpandAllClick(Sender: TObject);
begin
if Assigned(TreeView.Selected) then
TreeView.Selected.Expand(True);
end;
procedure TfrmMain.miOpenLoadParseClick(Sender: TObject);
begin
if not OD.Execute then
exit;
TElMessageThread.Create(fRootParseMessages, OD.FileName, nil, dmElMime);
end;
procedure TfrmMain.miSaveAssembleClick(Sender: TObject);
begin
NotImplemented;
end;
procedure TfrmMain.miExitClick(Sender: TObject);
begin
Close;
end;
procedure TfrmMain.miDeleteClick(Sender: TObject);
var
Node: TTreeNode;
NodeInfo, NullNode: TTreeNodeInfo;
begin
Node := TreeView.Selected;
if (Node<>nil) and (Node is TTreeNodeInfo) then
begin
NodeInfo := TTreeNodeInfo(Node);
//if NodeInfo.TagInfo in [tiParsedMessage, tiAssembledMessage] then
if not NodeInfo.Locked then
begin
if (Node.Parent <> fRootParseMessages) and (Node.Parent<>nil) then
begin
if NodeInfo.TagObj is TElMessageDemo then
begin
NullNode := TTreeNodeInfo.Create(Node.Owner);
TTreeNodesA(Node.Owner).AddNode(NullNode, Node.Parent, '...', nil, naAddChild);
Node.Parent.Collapse(False);
end;
end;
Node.Owner.Delete(Node);
end;
end;
end;
procedure TfrmMain.miCreateClick(Sender: TObject);
begin
NotImplemented;
end;
procedure TfrmMain.miAboutClick(Sender: TObject);
begin
ShowMessage('ElMime Demo Application, version: '+cDemoVersion+#13#10#13#10+
' (' +cXMailerDefaultFieldValue + ')'#13#10#13#10+
' Home page: http://www.secureblackbox.com')
end;
procedure TfrmMain.TreeViewExpanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
var
NodeInfo, NodeInfoChild, NewNode, NullNode, tmpNode: TTreeNodeInfo;
md: TElMessageDemo;
mp, mpi: TElMessagePart;
ma: TElMailAddress;
f: TElMessageHeaderField;
S: string;
i, iCount, k, g, ig: Integer;
al : TElMailAddressList;
ag: TElMailAddressGroup;
{---------------------------------------------------------------------------}
procedure AddPartHandlerOnly(mp: TElMessagePart);
begin
if Assigned(mp) and Assigned(mp.MessagePartHandler) then
begin
NewNode := TTreeNodeInfo.Create(Node.Owner, tiPartHandler, mp, False);
S := 'Part Handler: "'+mp.MessagePartHandler.GetDescription+'"';
TTreeNodesA(Node.Owner).AddNode(NewNode, NodeInfo, S, nil, naAddChild);
if not mp.IsActivatedMessagePartHandler then
begin
if mp.MessagePartHandler.IsError then
begin
NullNode := TTreeNodeInfo.Create(Node.Owner, tiError);
TTreeNodesA(Node.Owner).AddNode(NullNode, NewNode, 'ERROR: '+mp.MessagePartHandler.ErrorText,
nil, naAddChild);
end
else
try
{$ifdef _SMIME_}
if mp.MessagePartHandler is TElMessagePartHandlerSMIME then
begin
SMIMECollectCertificates;
TElMessagePartHandlerSMIME(mp.MessagePartHandler).CertificatesStorage := CurCertStorage;
//TElMessagePartHandlerPGPMIME(mp.MessagePartHandler).VerifyingKeys := Keyring;
//TElMessagePartHandlerPGPMIME(mp.MessagePartHandler).OnKeyPassphrase := HandleKeyPassphrase;
end;
{$endif}
{$IFDEF _PGP_}
if mp.MessagePartHandler is TElMessagePartHandlerPGPMIME then
begin
TElMessagePartHandlerPGPMIME(mp.MessagePartHandler).DecryptingKeys := Keyring;
TElMessagePartHandlerPGPMIME(mp.MessagePartHandler).VerifyingKeys := Keyring;
TElMessagePartHandlerPGPMIME(mp.MessagePartHandler).OnKeyPassphrase := HandleKeyPassphrase;
end;
{$ENDIF}
Screen.Cursor := crHourGlass;
try
mp.MessagePartHandler.Decode(False);
finally
Screen.Cursor := crDefault;
end;
if mp.MessagePartHandler.IsError then
begin
NullNode := TTreeNodeInfo.Create(Node.Owner, tiError);
TTreeNodesA(Node.Owner).AddNode(NullNode, NewNode, 'ERROR: '+mp.MessagePartHandler.ErrorText,
nil, naAddChild);
end
else
begin
if Assigned(mp.MessagePartHandler.DecodedPart) then
begin
NullNode := TTreeNodeInfo.Create(Node.Owner);
TTreeNodesA(Node.Owner).AddNode(NullNode, NewNode, '...', nil, naAddChild);
end;
if mp.MessagePartHandler.ResultCode = EL_WARNING then
begin
if mp.MessagePartHandler.ErrorText<>'' then
S := mp.MessagePartHandler.ErrorText
else
S := 'Warning given when handling the message part';
NullNode := TTreeNodeInfo.Create(Node.Owner, tiWarning);
TTreeNodesA(Node.Owner).AddNode(NullNode, NewNode, 'WARNING: '+S, nil, naAddChild);
end;
end;
except
on e:exception do
begin
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?