elmimeviewer_mainform.pas
来自「著名的SecureBlackBox控件完整源码」· PAS 代码 · 共 1,038 行 · 第 1/3 页
PAS
1,038 行
NullNode := TTreeNodeInfo.Create(Node.Owner, tiError);
TTreeNodesA(Node.Owner).AddNode(NullNode, NewNode, 'ERROR: '+e.Message, nil, naAddChild);
end;
end;
end;
end;
end;
{---------------------------------------------------------------------------}
procedure AddBodyPartHandlerOnly(mp: TElMessagePart);
begin
if Assigned(mp) and Assigned(mp.MessageBodyPartHandler) then
begin
NewNode := TTreeNodeInfo.Create(Node.Owner, tiPartBodyHandler, mp, False);
S := 'Body Handler: "'+mp.MessageBodyPartHandler.GetDescription+'"';
TTreeNodesA(Node.Owner).AddNode(NewNode, NodeInfo, S, nil, naAddChild);
if mp.MessageBodyPartHandler.IsError then
begin
NullNode := TTreeNodeInfo.Create(Node.Owner, tiError);
TTreeNodesA(Node.Owner).AddNode(NullNode, NewNode,
'ERROR: '+mp.MessageBodyPartHandler.ErrorText, nil, naAddChild);
end
else
begin
if Assigned(mp.MessageBodyPartHandler.DecodedPart) then
begin
NullNode := TTreeNodeInfo.Create(Node.Owner);
TTreeNodesA(Node.Owner).AddNode(NullNode, NewNode, '...', nil, naAddChild);
end;
if mp.MessageBodyPartHandler.ResultCode = EL_WARNING then
begin
if mp.MessageBodyPartHandler.ErrorText<>'' then
S := mp.MessageBodyPartHandler.ErrorText
else
S := 'Warning given when handling body of the message part';
NullNode := TTreeNodeInfo.Create(Node.Owner, tiWarning);
TTreeNodesA(Node.Owner).AddNode(NullNode, NewNode, 'WARNING: '+S, nil, naAddChild);
end;
end;
end;
end;
{---------------------------------------------------------------------------}
procedure AddHeadersInfoForMessagePart(mp: TElMessagePart);
begin
if Assigned(mp) and fOpHeaderInTree and (
(mp.Header.FieldsCount > 0) or (mp.Header.MailAddressListCount>0) ) then
begin
NewNode := TTreeNodeInfo.Create(Node.Owner, tiHeaders, mp, False);
TTreeNodesA(Node.Owner).AddNode(NewNode, NodeInfo, 'Headers', nil, naAddChild);
if fOpFieldsInTree then
begin
NullNode := TTreeNodeInfo.Create(Node.Owner);
TTreeNodesA(Node.Owner).AddNode(NullNode, NewNode, '...', nil, naAddChild);
end;
end;
end;
{---------------------------------------------------------------------------}
procedure AddBodyInfoForMessagePart(mp: TElMessagePart);
begin
if Assigned(mp) and (fOpBodyInTree or mp.IsMultipart) then
begin
NewNode := TTreeNodeInfo.Create(Node.Owner, tiBody, mp, False);
S := 'Body';
TTreeNodesA(Node.Owner).AddNode(NewNode, NodeInfo, S, nil, naAddChild);
if mp.IsMultipart and (mp.PartsCount>0) then
begin
NullNode := TTreeNodeInfo.Create(Node.Owner);
TTreeNodesA(Node.Owner).AddNode(NullNode, NewNode, '...', nil, naAddChild);
//NodeInfoChild := NewNode;
end
else
begin
S := mp.ContentType;
if S<>'' then
NewNode.Text := NewNode.Text + ' : [ '+S + '/' + mp.ContentSubtype+' ]';
if mp.IsMessage then
begin
NullNode := TTreeNodeInfo.Create(Node.Owner);
TTreeNodesA(Node.Owner).AddNode(NullNode, NewNode, '...', nil, naAddChild);
end;
end;
end;
end;
{---------------------------------------------------------------------------}
procedure AddMessageInfoForMessagePart(mp: TElMessagePart);
begin
if Assigned(mp) then
begin
// HEADERS
AddHeadersInfoForMessagePart(mp);
// BODY
if not ( Assigned(mp) and Assigned(mp.MessageBodyPartHandler) ) then
AddBodyInfoForMessagePart(mp);
// PART HANDLER
AddPartHandlerOnly(mp);
// PART BODY HANDLER
AddBodyPartHandlerOnly(mp);
end;
end;
{---------------------------------------------------------------------------}
procedure AddPartInfoForMessagePart(mp: TElMessagePart; PartIndex: Integer = -1);
var
ti: TTagInfo;
sFile: String;
begin
if Assigned(mp) then
begin
// PART
S := 'Part';
if mp.IsMultipart then
ti := tiPartList
else
ti := tiPart;
if PartIndex>=0 then
S := S + ' [ ' + IntToStr(PartIndex)+' ]';
if mp.IsMultipart then
S := S + ' / ['+mp.ContentType+'/'+mp.ContentSubtype+']'
else
if not mp.IsMultipart then
begin
sFile := Trim(mp.FileName);
if Length(sFile) > 0 then
S := S + ': "' + sFile + '"';
end;
NewNode := TTreeNodeInfo.Create(Node.Owner, ti, mp, False);
TTreeNodesA(Node.Owner).AddNode(NewNode, NodeInfo, S, nil, naAddChild);
NullNode := TTreeNodeInfo.Create(Node.Owner);
TTreeNodesA(Node.Owner).AddNode(NullNode, NewNode, '...', nil, naAddChild);
end;//of: if Assigned(mp) then
end;
{---------------------------------------------------------------------------}
procedure AddPartListInfoForMessagePart(mp: TElMessagePart; PartIndex: Integer = -1);
begin
if Assigned(mp) then
begin
// HEADERS
AddHeadersInfoForMessagePart(mp);
// BODY
if not ( Assigned(mp) and Assigned(mp.MessageBodyPartHandler) ) then
AddBodyInfoForMessagePart(mp);
// PART HANDLER
AddPartHandlerOnly(mp);
// PART BODY HANDLER
AddBodyPartHandlerOnly(mp);
end;//of: if Assigned(mp) then
end;
{---------------------------------------------------------------------------}
procedure AddAtachedMessage(mp: TElMessagePart);
var
Buffer: TBytes;
BufferSize: Integer;
sm: TAnsiStringStream;
begin
mp.GetDataSize(BufferSize);
SetLength(Buffer, BufferSize);
mp.GetData(Buffer, BufferSize);
sm := TAnsiStringStream.Create;
try
Node.Owner.Delete(NodeInfoChild); // !!!
NodeInfoChild := nil;
sm.Memory := Buffer;
TElMessageThread.Create(Node, '', sm, dmElMime);
sm := nil;
finally
sm.Free;
end;
end;
begin
if Node is TTreeNodeInfo then
begin
NodeInfoChild := nil;
NodeInfo := TTreeNodeInfo(Node);
case NodeInfo.TagInfo of
// tiNull:
// AllowExpansion := False;
// tiError,
// tiWarning,
// tiText,
tiParsedMessage:
begin
AllowExpansion := Node.Count>0;
if AllowExpansion then
begin
NodeInfoChild := Node.Item[0] as TTreeNodeInfo;
if (NodeInfoChild.TagInfo = tiNull) and Assigned(NodeInfo.TagObj)
and (NodeInfo.TagObj is TElMessageDemo)
then
begin
md := TElMessageDemo(NodeInfo.TagObj);
mp := md.MainPart;
AddMessageInfoForMessagePart(mp);
Node.Owner.Delete(NodeInfoChild);
if Node.Count>0 then
NodeInfoChild := Node.Item[0] as TTreeNodeInfo
else
NodeInfoChild := nil;
end;//of: if NodeInfoChild.TagInfo = tiNull then
end;//of: if AllowExpansion
end;
// tiAssembledMessage,
tiHeaders:
begin
AllowExpansion := Node.Count>0;
if AllowExpansion and fOpFieldsInTree then
begin
NodeInfoChild := Node.Item[0] as TTreeNodeInfo;
if NodeInfoChild.TagInfo = tiNull then
begin
mp := NodeInfo.TagObj as TElMessagePart;
if Assigned(mp) and ( (mp.Header.FieldsCount > 0)
or (mp.Header.MailAddressListCount>0) )
then
begin
iCount := 0;
// MAIL ADDRESSES
for i := 0 to mp.Header.MailAddressListCount-1 do
begin
al := mp.Header.GetMailAddressList(i);
if (al = nil) or (al.TotalCount = 0) then
continue;
inc(iCount);
NewNode := TTreeNodeInfo.Create(Node.Owner, tiFromList, al, False);
S := Trim(al.FieldName);
if S = '' then
S := 'unnamed_'+IntToStr(iCount);
TTreeNodesA(Node.Owner).AddNode(NewNode, NodeInfo, S, nil, naAddChild);
for k:=0 to al.Count-1 do
begin
ma := al.GetAddress(k);
if ma=nil then
continue;
if ma.IsAlias then
S := '"' + ma.Alias + '"'
else
S := '';
if ma.IsAddress then
S := S + '<'+ma.Address+'>';
if S='' then
S := '<>';
NullNode := TTreeNodeInfo.Create(Node.Owner, tiFrom);
NullNode.Level := k;
TTreeNodesA(Node.Owner).AddNode(NullNode, NewNode, S, nil, naAddChild);
end;
//{
// todo:
// GROUPS
for g := 0 to al.GroupsCount-1 do
begin
ag := al.GetGroup(g);
if ag=nil then
continue;
tmpNode := TTreeNodeInfo.Create(Node.Owner, tiGroup);
TTreeNodesA(Node.Owner).AddNode(tmpNode, NewNode, ag.Name, nil, naAddChild);
//tmpNode
for ig := 0 to ag.AddressesCount-1 do
begin
ma := ag.Address[ig];
if ma=nil then
continue;
if ma.IsAlias then
S := '"' + ma.Alias + '"'
else
S := '';
if ma.IsAddress then
S := S + '<'+ma.Address+'>';
if S='' then
S := '<>';
NullNode := TTreeNodeInfo.Create(tmpNode.Owner, tiFrom);
NullNode.Level := ig;
TTreeNodesA(Node.Owner).AddNode(NullNode, tmpNode, S, nil, naAddChild);
end;
end;
{}
end;// of: for i
// HEADERDS
for i:=0 to mp.Header.FieldsCount do
begin
f := mp.Header.GetField(i);
if f=nil then
continue;
inc(iCount);
NewNode := TTreeNodeInfo.Create(Node.Owner, tiField, f, False);
S := Trim(f.Name);
if S = '' then
S := 'unnamed_'+IntToStr(iCount);
TTreeNodesA(Node.Owner).AddNode(NewNode, NodeInfo, S, nil, naAddChild);
NullNode := TTreeNodeInfo.Create(Node.Owner, tiText);
NullNode.ImageIndex := NewNode.ImageIndex + 1;
NullNode.SelectedIndex := NullNode.ImageIndex;
TTreeNodesA(Node.Owner).AddNode(NullNode, NewNode, f.Value, nil, naAddChild);
if f.Comments<>'' then
begin
NullNode := TTreeNodeInfo.Create(Node.Owner, tiComment, f, False);
TTreeNodesA(Node.Owner).AddNode(NullNode, NewNode, 'Comments', nil, naAddChild);
tmpNode := TTreeNodeInfo.Create(Node.Owner, tiText);
tmpNode.ImageIndex := NewNode.ImageIndex + 4;
tmpNode.SelectedIndex := tmpNode.ImageIndex;
TTreeNodesA(Node.Owner).AddNode(tmpNode, NullNode, f.Comments, nil, naAddChild);
end;
if fOpParamsInTree and (f.ParamsCount>0) then
begin
NullNode := TTreeNodeInfo.Create(Node.Owner, tiParamList, f, False);
NullNode.ImageIndex := NewNode.ImageIndex + 2;
NullNode.SelectedIndex := NullNode.ImageIndex;
TTreeNodesA(Node.Owner).AddNode(NullNode, NewNode, 'Params', nil, naAddChild);
NewNode := NullNode;
for k:=0 to f.ParamsCount-1 do
begin
NullNode := TTreeNodeInfo.Create(Node.Owner, tiParam);
NullNode.Level := k;
NullNode.ImageIndex := NewNode.ImageIndex + 1;
NullNode.SelectedIndex := NullNode.ImageIndex;
TTreeNodesA(Node.Owner).AddNode(NullNode, NewNode, f.GetParamName(k), nil, naAddChild);
tmpNode := TTreeNodeInfo.Create(Node.Owner, tiText);
tmpNode.ImageIndex := NewNode.ImageIndex + 2;
tmpNode.SelectedIndex := tmpNode.ImageIndex;
TTreeNodesA(Node.Owner).AddNode(tmpNode, NullNode, f.GetParamValue(k), nil, naAddChild);
end;
end;
end;//of: for i:=0
Node.Owner.Delete(NodeInfoChild);
if iCount>0 then
NodeInfoChild := Node.Item[0] as TTreeNodeInfo
else
NodeInfoChild := nil;
end;//of: if Assigned(mp) and (...
end;//of: if NodeInfoChild.TagInfo = tiNull
end;//of: if AllowExpansion
end;
//tiField, tiParamList, tiParam,
tiBody:
begin
AllowExpansion := Node.Count>0;
if AllowExpansion then
begin
NodeInfoChild := Node.Item[0] as TTreeNodeInfo;
if NodeInfoChild.TagInfo = tiNull then
begin
mp := NodeInfo.TagObj as TElMessagePart;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?