ViewMailListArchive.pas
上传用户:dh8233980
上传日期:2014-10-16
资源大小:1015k
文件大小:6k
源码类别:

Email服务器

开发平台:

Delphi

  1. unit ViewMailListArchive;
  2. (******************************************************************************)
  3. (*                                                                            *)
  4. (* Hermes View Mail List Archive Dialog Box                                   *)
  5. (* Part of Hermes SMTP/POP3 Server.                                           *)
  6. (* Copyright(C) 2000 by Alexander J. Fanti, All Rights Reserver Worldwide.    *)
  7. (*                                                                            *)
  8. (* Created January 30, 2000 by Alexander J. Fanti.  See License.txt           *)
  9. (*                                                                            *)
  10. (* Used by: AddEditMailList                                                   *)
  11. (* Uses: UtilU1                                                               *)
  12. (*                                                                            *)
  13. (* Description: This Modal dialog window allows the user to see a mail list   *)
  14. (*              archive file, truncate or erase it.                           *)
  15. (*                                                                            *)
  16. (******************************************************************************)
  17. interface
  18. uses
  19.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  20.   StdCtrls, ComCtrls, ExtCtrls, Menus;
  21. type
  22.   TfrmViewMailListArchive = class(TForm)
  23.     reArchive: TRichEdit;
  24.     PopupMenu1: TPopupMenu;
  25.     puSave: TMenuItem;
  26.     puSaveAs: TMenuItem;
  27.     puErase: TMenuItem;
  28.     puTruncate: TMenuItem;
  29.     N1: TMenuItem;
  30.     puEdit: TMenuItem;
  31.     puRefresh: TMenuItem;
  32.     SaveDialog1: TSaveDialog;
  33.     StatusBar1: TStatusBar;
  34.     N2: TMenuItem;
  35.     puClose: TMenuItem;
  36.     Panel1: TPanel;
  37.     lblWarning: TLabel;
  38.     procedure puRefreshClick(Sender: TObject);
  39.     procedure puSaveClick(Sender: TObject);
  40.     procedure puSaveAsClick(Sender: TObject);
  41.     procedure puEraseClick(Sender: TObject);
  42.     procedure puTruncateClick(Sender: TObject);
  43.     procedure puEditClick(Sender: TObject);
  44.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  45.     procedure Panel1Resize(Sender: TObject);
  46.     procedure reArchiveChange(Sender: TObject);
  47.     procedure puCloseClick(Sender: TObject);
  48.   private
  49.     { Private declarations }
  50.     FFilename, FListName : String;
  51.     FEdited : Boolean;
  52.     procedure Display;
  53.   public
  54.     { Public declarations }
  55.     procedure View(ListName, Filename : String);
  56.   end;
  57. var
  58.   frmViewMailListArchive: TfrmViewMailListArchive;
  59. implementation
  60. uses UtilU1;
  61. {$R *.DFM}
  62. procedure TfrmViewMailListArchive.View(ListName, Filename : String);
  63. begin
  64.   FFilename := Filename;
  65.   FListName := ListName;
  66.   FEdited := False;
  67.   if FileExists(FFilename) then reArchive.Lines.LoadFromFile(FFilename)
  68.     else reArchive.Lines.Clear;
  69.   StatusBar1.Panels[1].Text := IntToStr(GetFileSize(FFilename)) + ' bytes';
  70.   Display;
  71.   ShowModal;
  72. end;
  73. procedure TfrmViewMailListArchive.Display;
  74. begin
  75.   Caption := 'Mail List (' + FListName + ') Archive - ' + FFilename;
  76.   if FEdited then StatusBar1.Panels[0].Text := 'EDITED'
  77.     else StatusBar1.Panels[0].Text := '';
  78.   // Do not display file size here...
  79.   // it's too demanding because of frequency of call...
  80.   // We'll display it only when we load or save the file.
  81.   StatusBar1.Panels[2].Text := IntToStr(reArchive.Lines.Count) + ' lines';
  82. end;
  83. procedure TfrmViewMailListArchive.Panel1Resize(Sender: TObject);
  84. begin
  85.   lblWarning.Width := Panel1.Width - (2 * lblWarning.Left);
  86. end;
  87. procedure TfrmViewMailListArchive.reArchiveChange(Sender: TObject);
  88. begin
  89.   if not reArchive.ReadOnly then begin
  90.     FEdited := True;
  91.     Display;
  92.   end;
  93. end;
  94. procedure TfrmViewMailListArchive.puRefreshClick(Sender: TObject);
  95. begin
  96.   reArchive.Lines.LoadFromFile(FFilename);
  97.   FEdited := False;
  98.   StatusBar1.Panels[1].Text := IntToStr(GetFileSize(FFilename)) + ' bytes';
  99.   Display;
  100. end;
  101. procedure TfrmViewMailListArchive.puSaveClick(Sender: TObject);
  102. begin
  103.   reArchive.Lines.SaveToFile(FFilename);
  104.   FEdited := False;
  105.   StatusBar1.Panels[1].Text := IntToStr(GetFileSize(FFilename)) + ' bytes';
  106.   Display;
  107. end;
  108. procedure TfrmViewMailListArchive.puSaveAsClick(Sender: TObject);
  109. begin
  110.   if SaveDialog1.Execute then begin
  111.     FFilename := SaveDialog1.Filename;
  112.     Caption := 'Mail List (' + FListName + ') Archive - ' + FFilename;
  113.     reArchive.Lines.SaveToFile(FFilename);
  114.     FEdited := False;
  115.   end;
  116.   StatusBar1.Panels[1].Text := IntToStr(GetFileSize(FFilename)) + ' bytes';
  117.   Display;
  118. end;
  119. procedure TfrmViewMailListArchive.puEraseClick(Sender: TObject);
  120. begin
  121.   reArchive.Lines.Clear;
  122.   FEdited := True;
  123.   Display;
  124. end;
  125. procedure TfrmViewMailListArchive.puTruncateClick(Sender: TObject);
  126. var
  127.   Lines, Drop : Longint;
  128.   tempStr : String;
  129. begin
  130.   tempStr := InputBox('Truncate Archive to...',
  131.                       'How many lines? (0 = cancel)', '0');
  132.   try
  133.     Lines := StrToInt(tempStr);
  134.   except
  135.     on E: Exception do Lines := -1;
  136.   end;
  137.   if Lines > 0 then
  138.     if Lines < reArchive.Lines.Count then begin
  139.       Drop := reArchive.Lines.Count -(Lines +1);
  140.       while (Drop >= 0) and (reArchive.Lines.Count > 0) do begin
  141.         reArchive.Lines.Delete(0);
  142.         Dec(Drop);
  143.       end;
  144.     end;
  145.   FEdited := True;
  146.   Display;
  147. end;
  148. procedure TfrmViewMailListArchive.puEditClick(Sender: TObject);
  149. begin
  150.   puEdit.Checked := not puEdit.Checked;
  151.   reArchive.ReadOnly := not puEdit.Checked;
  152.   Display;
  153. end;
  154. procedure TfrmViewMailListArchive.puCloseClick(Sender: TObject);
  155. begin
  156.   Close;
  157. end;
  158. procedure TfrmViewMailListArchive.FormCloseQuery(Sender: TObject;
  159.   var CanClose: Boolean);
  160. var
  161.   x : Longint;
  162. begin
  163.   CanClose := True;
  164.   if FEdited then begin
  165.     x := MessageDlg('Archive has been edited.' + #13 + #10 +
  166.                     'Do you want to save this version?',
  167.                     mtConfirmation, [mbYes, mbNo, mbCancel], 0);
  168.     if x = mrYes then begin
  169.       reArchive.Lines.SaveToFile(FFilename);
  170.       FEdited := False;
  171.       StatusBar1.Panels[1].Text := IntToStr(GetFileSize(FFilename)) + ' bytes';
  172.       Display;
  173.     end;
  174.     if x = mrCancel then CanClose := False;
  175.   end;
  176. end;
  177. end.