elmimeviewer_mainform.pas
来自「著名的SecureBlackBox控件完整源码」· PAS 代码 · 共 1,038 行 · 第 1/3 页
PAS
1,038 行
if Assigned(mp) then
begin
if mp.IsMultipart and (mp.PartsCount>0) then
begin
iCount := 0;
for i:=0 to mp.PartsCount-1 do
begin
mpi := mp.GetPart(i);
if mpi=nil then
continue;
inc(iCount);
AddPartInfoForMessagePart(mpi, i+1);
end;
Node.Owner.Delete(NodeInfoChild);
if iCount>0 then
NodeInfoChild := Node.Item[0] as TTreeNodeInfo
else
NodeInfoChild := nil;
end
else
if mp.IsMessage then
AddAtachedMessage(mp);
end;//of: if Assigned(mp)
end;//of: if NodeInfoChild.TagInfo = tiNull
end;//of: if AllowExpansion
end;
tiPart, tiPartList:
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;
AddPartListInfoForMessagePart(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
end;//of: if AllowExpansion
end;
tiPartHandler:
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;
if Assigned(mp) and Assigned(mp.MessagePartHandler)
and Assigned(mp.MessagePartHandler.DecodedPart)
then
begin
AddPartListInfoForMessagePart(mp.MessagePartHandler.DecodedPart);
Node.Owner.Delete(NodeInfoChild);
if Node.Count>0 then
NodeInfoChild := Node.Item[0] as TTreeNodeInfo
else
NodeInfoChild := nil;
end;//of: if Assigned(mp)
end;//of: if NodeInfoChild.TagInfo = tiNull
end;//of: if AllowExpansion
end;
tiPartBodyHandler:
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;
if Assigned(mp) and Assigned(mp.MessageBodyPartHandler)
and Assigned(mp.MessageBodyPartHandler.DecodedPart)
then
begin
AddPartListInfoForMessagePart(mp.MessageBodyPartHandler.DecodedPart);
Node.Owner.Delete(NodeInfoChild);
if Node.Count>0 then
NodeInfoChild := Node.Item[0] as TTreeNodeInfo
else
NodeInfoChild := nil;
end;//of: if Assigned(mp)
end;//of: if NodeInfoChild.TagInfo = tiNull
end;//of: if AllowExpansion
end;
{---------------------------------------------------------------------------}
// template:
{---------------------------------------------------------------------------}{
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;
if Assigned(mp) then
begin
...
end;//of: if Assigned(mp)
end;//of: if NodeInfoChild.TagInfo = tiNull
end;//of: if AllowExpansion
end;
{---------------------------------------------------------------------------}
else
begin
AllowExpansion := Node.Count>0;
if AllowExpansion then
NodeInfoChild := Node.Item[0] as TTreeNodeInfo;
end;
end;//of: case NodeInfo.TagInfo
AllowExpansion := Assigned(NodeInfoChild) and (NodeInfoChild.TagInfo <> tiNull);
end;
end;
procedure InvalidateChildren(C:TWinControl; bNCPaint: Boolean);
var
i: Integer;
begin
C.Invalidate;
if bNCPaint then
C.Perform(WM_NCPAINT, 1, 0);
for i := 0 to C.ControlCount -1 do
begin
if (C.Controls[i] is TWinControl) and C.Controls[i].Visible then
InvalidateChildren( TWinControl(C.Controls[i]), True );
end;
end;
type
TElMimePlugFrameH = class(TElMimePlugFrame);
procedure TfrmMain.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
begin
//
{$IFDEF DEV_COMMENTS}
{case NodeInfo.TagInfo of
tiNull:
begin
end;
tiError:
begin
end;
tiWarning:
begin
end;
tiText:
begin
end;
tiParsedMessage:
begin
end;
tiAssembledMessage:
begin
end;
tiHeaders:
begin
end;
tiField:
begin
end;
tiParamList:
begin
end;
tiParam:
begin
end;
tiBody:
begin
end;
tiPartList:
begin
end;
tiPart:
begin
end;
tiPartHandler:
begin
end;
tiPartBodyHandler:
begin
end;
end;{}
{$ENDIF IFDEF DEV_COMMENTS}
end;
procedure TfrmMain.TreeViewChange(Sender: TObject; Node: TTreeNode);
var
NodeInfo: TTreeNodeInfo;
pf, pfNew: TElMimePlugFrame;
begin
if Application.Terminated then
exit;
try
pfNew := nil;
if (Node<>nil) and (Node.Selected) and (Node is TTreeNodeInfo) then
begin
NodeInfo := TTreeNodeInfo(Node);
if (pContainer.ControlCount>0)and(pContainer.Controls[0] is TElMimePlugFrame) then
pf := TElMimePlugFrame(pContainer.Controls[0])
else
pf := nil;
pfNew := NodeInfo.PlugFrame;
if pf=pfNew then
begin
if pfNew<>nil then
begin
NodeInfo.UpdatePlugFrame;
InvalidateChildren(pfNew, True);
end;
end
else
begin
if Assigned(pf) then
begin
pf.BeforeRemoveParent;
pContainer.RemoveControl(pf);
end;
if Assigned(pfNew) then
begin
pContainer.InsertControl(pfNew);
if not TElMimePlugFrameH(pfNew).FixedFirstInsert then
begin
pfNew.BeforeRemoveParent;
pContainer.RemoveControl(pfNew);
pContainer.InsertControl(pfNew);
end;
NodeInfo.UpdatePlugFrame;
InvalidateChildren(pfNew, True);
pfNew.UpdateView;
end;
end;
end
else
begin
if (pContainer.ControlCount>0)and(pContainer.Controls[0] is TElMimePlugFrame) then
begin
pf := TElMimePlugFrame(pContainer.Controls[0]);
pf.BeforeRemoveParent;
pContainer.RemoveControl(pf);
end;
end;
if pfNew = nil then
begin
//pCap.Caption := 'Detail View';
pCap.Caption := '';
end
else
begin
pCap.Caption := pfNew.GetCaption;
end;
except
end;
end;
procedure TfrmMain.miEditClick(Sender: TObject);
var
Node: TTreeNodeInfo;
begin
miDelete.Enabled := False;
miCreate.Enabled := False;
if TreeView.Selected = nil then
exit;
if TreeView.Selected is TTreeNodeInfo then
begin
Node := TTreeNodeInfo(TreeView.Selected);
if Node.Locked then
exit;
miDelete.Enabled := True;
miCreate.Enabled := True;
end;
end;
procedure TfrmMain.miViewClick(Sender: TObject);
var
bEnabled: Boolean;
begin
bEnabled := Assigned(TreeView.Selected) and (TreeView.Selected.Count > 0);
miCollapseAll.Enabled := bEnabled;
miExpandAll.Enabled := bEnabled;
end;
procedure TfrmMain.TreeViewAdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
var PaintImages, DefaultDraw: Boolean);
begin
// fixed paint selected item for not active TreeView:
if (Stage in [cdPrePaint, cdPostPaint])
and (not(cdsSelected in State))and(TreeView.Selected=Node) then
begin
Sender.Canvas.Font.Color := clInactiveCaption;
Sender.Canvas.Brush.Color := clBtnFace;
Sender.Canvas.Pen.Color := clWindowFrame;
end;
end;
{$IFDEF _PGP_}
procedure TfrmMain.HandleKeyPassphrase(Sender: TObject; Key : TElPGPCustomSecretKey;
var Passphrase: string; var Cancel: boolean);
begin
Passphrase := InputBox('Passphrase request', 'Passphrase required for key ' +
KeyID2Str(Key.KeyID), '');
end;
{$ENDIF}
initialization
SetLicenseKey('ADDCD14AD06709806817E0B3D7BFD0A2222D536FE156466C5D5FE65DB5DEAE76' +
'FFDEBC07E915A5751C12C01C783958872A38E4A5EDA140E7247E0F2E56442A3C' +
'F3E9347AD8FDE52083A0DFC86BC00ECB0FD0CF1B51159A2BCB84F6EA6349EF47' +
'5C15A59AFCC55F7C3AAD26C279628B5D91B1DC94BD2385354A70CCA3B76101D9' +
'F41C84A639FC3CCE4BA8F0CC4A66DCD150114A3F58C1AD46B7B94643741BC20A' +
'8DCA83AB921480951B423CAA19EF1863A47CA2C3422E7E5634BED98939A5AE43' +
'DE1E4BAD79E66D8A5C973B3455656C8C9B6FF024FADD6CDA02D0F506D98493C8' +
'BD1ED7B237DB75FA31F2C82654490CDDDEE24E19939137B9E1DB05508733B22F');
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?