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 + -
显示快捷键?