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

📄 main.pas

📁 这是一套全面的网络组件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  clMailMessage, clMC, clIMAP4, Menus, StdCtrls, ExtCtrls, ActnList,
  ComCtrls, ImgList, clTcpClient, clImapUtils, clCert;

type
  TIMAPViewMode = (clIMAPViewAll, clIMAPViewSub);

  TMainWindow = class(TForm)
    MainMenu: TMainMenu;
    mnHelp: TMenuItem;
    mnAbout: TMenuItem;
    clIMAP4: TclIMAP4;
    Parser: TclMailMessage;
    mnFile: TMenuItem;
    mnLogin: TMenuItem;
    mnLogout: TMenuItem;
    mnFileBreak1: TMenuItem;
    mnExit: TMenuItem;
    mnSettings: TMenuItem;
    mnAccount: TMenuItem;
    mnView: TMenuItem;
    Allfolders1: TMenuItem;
    Subscribedfolders1: TMenuItem;
    mnBreak: TMenuItem;
    Cleareventswindow1: TMenuItem;
    Splitter1: TSplitter;
    GroupBox1: TGroupBox;
    Events: TMemo;
    GroupBox2: TGroupBox;
    Splitter2: TSplitter;
    Actions: TActionList;
    actFolderNew: TAction;
    actFolderDelete: TAction;
    actFolderSubscribe: TAction;
    actFolderUnsubscribe: TAction;
    actFolderViewAll: TAction;
    actFolderViewSub: TAction;
    mnFolder: TMenuItem;
    Newfolder1: TMenuItem;
    Deletefolder1: TMenuItem;
    Subscribe1: TMenuItem;
    Unsubscribe1: TMenuItem;
    Folders: TTreeView;
    actLogin: TAction;
    actLogout: TAction;
    actFolderRename: TAction;
    gbFolderInfo: TGroupBox;
    Message1: TMenuItem;
    actMsgAppend: TAction;
    actMsgCopy: TAction;
    actMsgDelete: TAction;
    actMsgPurge: TAction;
    actMsgView: TAction;
    actMsgViewSrc: TAction;
    Appendmessage1: TMenuItem;
    Copymessage1: TMenuItem;
    Deletemessage1: TMenuItem;
    Purgemessages1: TMenuItem;
    Viewmessage1: TMenuItem;
    Viewmessagesource1: TMenuItem;
    Panel1: TPanel;
    MsgList: TListView;
    Panel2: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    edFldName: TEdit;
    edFldRO: TEdit;
    edFldExists: TEdit;
    edFldResent: TEdit;
    edFld1Unseen: TEdit;
    actMsgSearch: TAction;
    Searchmessages1: TMenuItem;
    FolderPopup: TPopupMenu;
    MsgPopup: TPopupMenu;
    Newfolder2: TMenuItem;
    Deletefolder2: TMenuItem;
    Subscribe2: TMenuItem;
    Unsubscribe2: TMenuItem;
    Searchmessages2: TMenuItem;
    Appendmessage2: TMenuItem;
    Copymessage2: TMenuItem;
    Deletemessage2: TMenuItem;
    Purgemessages2: TMenuItem;
    Viewmessage2: TMenuItem;
    Viewmessagesource2: TMenuItem;
    Images: TImageList;
    edSubscribed: TEdit;
    Label7: TLabel;
    procedure mnAboutClick(Sender: TObject);
    procedure mnExitClick(Sender: TObject);
    procedure mnAccountClick(Sender: TObject);
    procedure Cleareventswindow1Click(Sender: TObject);
    procedure actFolderNewUpdate(Sender: TObject);
    procedure actFolderDeleteUpdate(Sender: TObject);
    procedure actFolderSubscribeUpdate(Sender: TObject);
    procedure actFolderNewExecute(Sender: TObject);
    procedure actFolderDeleteExecute(Sender: TObject);
    procedure actFolderSubscribeExecute(Sender: TObject);
    procedure actFolderUnsubscribeExecute(Sender: TObject);
    procedure actFolderViewAllExecute(Sender: TObject);
    procedure actFolderViewSubExecute(Sender: TObject);
    procedure actLoginUpdate(Sender: TObject);
    procedure actLogoutUpdate(Sender: TObject);
    procedure actLoginExecute(Sender: TObject);
    procedure actLogoutExecute(Sender: TObject);
    procedure actFolderRenameUpdate(Sender: TObject);
    procedure actFolderRenameExecute(Sender: TObject);
    procedure actMsgAppendUpdate(Sender: TObject);
    procedure actMsgAppendExecute(Sender: TObject);
    procedure actMsgCopyUpdate(Sender: TObject);
    procedure actMsgCopyExecute(Sender: TObject);
    procedure actMsgDeleteUpdate(Sender: TObject);
    procedure actMsgDeleteExecute(Sender: TObject);
    procedure actMsgPurgeUpdate(Sender: TObject);
    procedure actMsgPurgeExecute(Sender: TObject);
    procedure actMsgViewUpdate(Sender: TObject);
    procedure actMsgViewExecute(Sender: TObject);
    procedure actMsgViewSrcExecute(Sender: TObject);
    procedure FoldersChange(Sender: TObject; Node: TTreeNode);
    procedure actMsgSearchUpdate(Sender: TObject);
    procedure actMsgSearchExecute(Sender: TObject);
    procedure clIMAP4Close(Sender: TObject);
    procedure clIMAP4SendCommand(Sender: TObject; const AText: String);
    procedure clIMAP4ReceiveResponse(Sender: TObject; AList: TStrings);
    procedure FormDestroy(Sender: TObject);
    procedure clIMAP4VerifyServer(Sender: TObject;
      ACertificate: TclCertificate; const AStatusText: String;
      AStatusCode: Integer; var AVerified: Boolean);
  private
    FViewMode: TIMAPViewMode;
    FCertificateVerified: Boolean;
    procedure GetFoldersList;
    procedure AddFolderToList(Name: string; Subscribed: boolean);
    function GetFolderName(Node: TTreeNode): string;
    procedure UpdateMailboxInfo;
    procedure UpdateMessage(Item:TListItem);
    Procedure UpdateMessages;
  end;

var
  MainWindow: TMainWindow;

implementation

uses Account, AccData, CopyDlg, NewFldr, MessageSourceForm, MessageForm,
  Search;

{$R *.DFM}
const NAStr = 'N/A';

procedure TMainWindow.mnAboutClick(Sender: TObject);
begin
  ShowMessage('Clever Internet Suite Demos'#$D#$A'www.CleverComponents.com');
end;

procedure TMainWindow.mnExitClick(Sender: TObject);
begin
  Close();
end;

procedure TMainWindow.mnAccountClick(Sender: TObject);
begin
  with TAccountDialog.Create(Self) do try
    ShowModal;
  finally
    Release;
  end;
end;

procedure TMainWindow.Cleareventswindow1Click(Sender: TObject);
begin
  Events.Lines.Clear;
end;

procedure TMainWindow.actFolderNewUpdate(Sender: TObject);
begin
  actFolderNew.Enabled := clIMAP4.Active;
end;

procedure TMainWindow.actFolderDeleteUpdate(Sender: TObject);
begin
  actFolderDelete.Enabled := clIMAP4.Active and Assigned(Folders.Selected);
end;

procedure TMainWindow.actFolderRenameUpdate(Sender: TObject);
begin
  actFolderRename.Enabled := clIMAP4.Active and Assigned(Folders.Selected);
end;

procedure TMainWindow.actFolderSubscribeUpdate(Sender: TObject);
begin
  actFolderSubscribe.Enabled := clIMAP4.Active and (FViewMode = clIMAPViewAll) and
                                Assigned(Folders.Selected);
  actFolderUnsubscribe.Enabled := clIMAP4.Active and
                                Assigned(Folders.Selected) and
                                (Folders.Selected.ImageIndex = 1);
end;


procedure TMainWindow.actFolderNewExecute(Sender: TObject);
var S: string;
begin
  with TNewFolderDialog.Create(Self) do try
    if ShowModal = mrOk then begin
      if (rgCreateAs.ItemIndex = 0) and (Folders.Selected <> nil) then
        S := GetFolderName(Folders.Selected.Parent)
      else
        S := GetFolderName(Folders.Selected);
      if (S <> '') then S := S + clIMAP4.MailBoxSeparator;
      S := S + edName.Text;
      clIMAP4.CreateMailBox(S);
      if FViewMode = clIMAPViewSub then clIMAP4.SubscribeMailBox(S);
      AddFolderToList(S, FViewMode = clIMAPViewSub);
    end;
  finally
    Release;
  end;
end;

procedure TMainWindow.actFolderDeleteExecute(Sender: TObject);
begin
  if MessageDlg('Ok to delete folder "' + Folders.Selected.Text + '"?',
                mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin
    clIMAP4.DeleteMailBox(GetFolderName(Folders.Selected));
    Folders.Selected.Delete;
  end;
end;

procedure TMainWindow.actFolderRenameExecute(Sender: TObject);
var S: string;
    IsSubscribed: boolean;
begin
  if InputQuery('Rename Folder', 'Rename folder "' + Folders.Selected.Text + '" to', S) then begin
    IsSubscribed := Folders.Selected.ImageIndex = 1;
    clIMAP4.RenameMailBox(GetFolderName(Folders.Selected), S);
    Folders.Selected.Delete;
    AddFolderToList(S, IsSubscribed);
  end;
end;

procedure TMainWindow.actFolderSubscribeExecute(Sender: TObject);
begin
  clIMAP4.SubscribeMailBox(GetFolderName(Folders.Selected));
  Folders.Selected.ImageIndex := 1;
  Folders.Selected.SelectedIndex := 1;
  ShowMessage('Folder subscribed successfully.');
end;

procedure TMainWindow.actFolderUnsubscribeExecute(Sender: TObject);
begin
  clIMAP4.UnsubscribeMailBox(GetFolderName(Folders.Selected));
  if (FViewMode = clIMAPViewAll) then begin
    Folders.Selected.ImageIndex := 0;
    Folders.Selected.SelectedIndex := 0;
  end else
    Folders.Selected.Delete;
  ShowMessage('Folder unsubscribed successfully.');
end;

procedure TMainWindow.actFolderViewAllExecute(Sender: TObject);
begin
  if (FViewMode <> clIMAPViewAll) then begin
    FViewMode := clIMAPViewAll;
    actFolderViewAll.Checked := True;
    actFolderViewSub.Checked := False;
    GetFoldersList;
  end;
end;

procedure TMainWindow.actFolderViewSubExecute(Sender: TObject);
begin
  if (FViewMode <> clIMAPViewSub) then begin
    FViewMode := clIMAPViewSub;
    actFolderViewAll.Checked := False;
    actFolderViewSub.Checked := True;
    GetFoldersList;
  end;
end;


procedure TMainWindow.actLoginUpdate(Sender: TObject);
begin
  actLogin.Enabled := not clIMAP4.Active;
end;

procedure TMainWindow.actLogoutUpdate(Sender: TObject);
begin
  actLogout.Enabled := clIMAP4.Active;
end;

procedure TMainWindow.actLoginExecute(Sender: TObject);
begin
  FCertificateVerified := False;

  with TAccountData.Create do try
    clIMAP4.Server := Server;
    clIMAP4.Port := Port;
    clIMAP4.UserName := Login;
    clIMAP4.Password := Password;
    if UseSSL then
      clIMAP4.UseTLS := ctAutomatic
    else
      clIMAP4.UseTLS := ctNone;
    clIMAP4.TimeOut := Timeout * 1000;
    clIMAP4.UseSPA := UseSPA;
    clIMAP4.Open;
  finally
    Free;
  end;
  GetFoldersList;
end;

procedure TMainWindow.actLogoutExecute(Sender: TObject);
begin
  clIMAP4.Close;

⌨️ 快捷键说明

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