www.pudn.com > EmailServer.zip > ViewMailListArchive.pas
unit ViewMailListArchive;
(******************************************************************************)
(* *)
(* Hermes View Mail List Archive Dialog Box *)
(* Part of Hermes SMTP/POP3 Server. *)
(* Copyright(C) 2000 by Alexander J. Fanti, All Rights Reserver Worldwide. *)
(* *)
(* Created January 30, 2000 by Alexander J. Fanti. See License.txt *)
(* *)
(* Used by: AddEditMailList *)
(* Uses: UtilU1 *)
(* *)
(* Description: This Modal dialog window allows the user to see a mail list *)
(* archive file, truncate or erase it. *)
(* *)
(******************************************************************************)
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls, Menus;
type
TfrmViewMailListArchive = class(TForm)
reArchive: TRichEdit;
PopupMenu1: TPopupMenu;
puSave: TMenuItem;
puSaveAs: TMenuItem;
puErase: TMenuItem;
puTruncate: TMenuItem;
N1: TMenuItem;
puEdit: TMenuItem;
puRefresh: TMenuItem;
SaveDialog1: TSaveDialog;
StatusBar1: TStatusBar;
N2: TMenuItem;
puClose: TMenuItem;
Panel1: TPanel;
lblWarning: TLabel;
procedure puRefreshClick(Sender: TObject);
procedure puSaveClick(Sender: TObject);
procedure puSaveAsClick(Sender: TObject);
procedure puEraseClick(Sender: TObject);
procedure puTruncateClick(Sender: TObject);
procedure puEditClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Panel1Resize(Sender: TObject);
procedure reArchiveChange(Sender: TObject);
procedure puCloseClick(Sender: TObject);
private
{ Private declarations }
FFilename, FListName : String;
FEdited : Boolean;
procedure Display;
public
{ Public declarations }
procedure View(ListName, Filename : String);
end;
var
frmViewMailListArchive: TfrmViewMailListArchive;
implementation
uses UtilU1;
{$R *.DFM}
procedure TfrmViewMailListArchive.View(ListName, Filename : String);
begin
FFilename := Filename;
FListName := ListName;
FEdited := False;
if FileExists(FFilename) then reArchive.Lines.LoadFromFile(FFilename)
else reArchive.Lines.Clear;
StatusBar1.Panels[1].Text := IntToStr(GetFileSize(FFilename)) + ' bytes';
Display;
ShowModal;
end;
procedure TfrmViewMailListArchive.Display;
begin
Caption := 'Mail List (' + FListName + ') Archive - ' + FFilename;
if FEdited then StatusBar1.Panels[0].Text := 'EDITED'
else StatusBar1.Panels[0].Text := '';
// Do not display file size here...
// it's too demanding because of frequency of call...
// We'll display it only when we load or save the file.
StatusBar1.Panels[2].Text := IntToStr(reArchive.Lines.Count) + ' lines';
end;
procedure TfrmViewMailListArchive.Panel1Resize(Sender: TObject);
begin
lblWarning.Width := Panel1.Width - (2 * lblWarning.Left);
end;
procedure TfrmViewMailListArchive.reArchiveChange(Sender: TObject);
begin
if not reArchive.ReadOnly then begin
FEdited := True;
Display;
end;
end;
procedure TfrmViewMailListArchive.puRefreshClick(Sender: TObject);
begin
reArchive.Lines.LoadFromFile(FFilename);
FEdited := False;
StatusBar1.Panels[1].Text := IntToStr(GetFileSize(FFilename)) + ' bytes';
Display;
end;
procedure TfrmViewMailListArchive.puSaveClick(Sender: TObject);
begin
reArchive.Lines.SaveToFile(FFilename);
FEdited := False;
StatusBar1.Panels[1].Text := IntToStr(GetFileSize(FFilename)) + ' bytes';
Display;
end;
procedure TfrmViewMailListArchive.puSaveAsClick(Sender: TObject);
begin
if SaveDialog1.Execute then begin
FFilename := SaveDialog1.Filename;
Caption := 'Mail List (' + FListName + ') Archive - ' + FFilename;
reArchive.Lines.SaveToFile(FFilename);
FEdited := False;
end;
StatusBar1.Panels[1].Text := IntToStr(GetFileSize(FFilename)) + ' bytes';
Display;
end;
procedure TfrmViewMailListArchive.puEraseClick(Sender: TObject);
begin
reArchive.Lines.Clear;
FEdited := True;
Display;
end;
procedure TfrmViewMailListArchive.puTruncateClick(Sender: TObject);
var
Lines, Drop : Longint;
tempStr : String;
begin
tempStr := InputBox('Truncate Archive to...',
'How many lines? (0 = cancel)', '0');
try
Lines := StrToInt(tempStr);
except
on E: Exception do Lines := -1;
end;
if Lines > 0 then
if Lines < reArchive.Lines.Count then begin
Drop := reArchive.Lines.Count -(Lines +1);
while (Drop >= 0) and (reArchive.Lines.Count > 0) do begin
reArchive.Lines.Delete(0);
Dec(Drop);
end;
end;
FEdited := True;
Display;
end;
procedure TfrmViewMailListArchive.puEditClick(Sender: TObject);
begin
puEdit.Checked := not puEdit.Checked;
reArchive.ReadOnly := not puEdit.Checked;
Display;
end;
procedure TfrmViewMailListArchive.puCloseClick(Sender: TObject);
begin
Close;
end;
procedure TfrmViewMailListArchive.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
var
x : Longint;
begin
CanClose := True;
if FEdited then begin
x := MessageDlg('Archive has been edited.' + #13 + #10 +
'Do you want to save this version?',
mtConfirmation, [mbYes, mbNo, mbCancel], 0);
if x = mrYes then begin
reArchive.Lines.SaveToFile(FFilename);
FEdited := False;
StatusBar1.Panels[1].Text := IntToStr(GetFileSize(FFilename)) + ' bytes';
Display;
end;
if x = mrCancel then CanClose := False;
end;
end;
end.