home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / DELPHI / IMS.ZIP / POPVIEW.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-09-22  |  4.0 KB  |  154 lines

  1. unit popview;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   ExtCtrls, StdCtrls, ComCtrls, msMsg, ShellAPI, Menus;
  8.  
  9. type
  10.   TMsgViewDlg = class(TForm)
  11.     ListView1: TListView;
  12.     Memo1: TMemo;
  13.     Panel1: TPanel;
  14.     ImageList1: TImageList;
  15.     PopupMenu1: TPopupMenu;
  16.     Open1: TMenuItem;
  17.     SaveAs1: TMenuItem;
  18.     Label1: TLabel;
  19.     Label2: TLabel;
  20.     FromLabel: TLabel;
  21.     DateLabel: TLabel;
  22.     SaveDialog1: TSaveDialog;
  23.     procedure ListView1DblClick(Sender: TObject);
  24.     procedure FormCreate(Sender: TObject);
  25.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  26.     procedure ListView1MouseDown(Sender: TObject; Button: TMouseButton;
  27.       Shift: TShiftState; X, Y: Integer);
  28.     procedure SaveAs1Click(Sender: TObject);
  29.   private
  30.     { Private declarations }
  31.     TempPath : string;
  32.     FMailMessage : TmsMessage;
  33.     procedure SetMailMessage(Value : TmsMessage);
  34.     procedure OpenAttachment(Index : Integer);
  35.     procedure SaveTheAttachment(Index : Integer);
  36.   public
  37.     { Public declarations }
  38.     property MailMessage : TmsMessage write SetMailMessage;
  39.   end;
  40.  
  41. var
  42.   MsgViewDlg: TMsgViewDlg;
  43.  
  44. implementation
  45.  
  46. {$R *.DFM}
  47.  
  48. procedure TMsgViewDlg.SetMailMessage(Value : TmsMessage);
  49. var
  50.   i : Integer;
  51.   Item : TListItem;
  52.   Icon : TIcon;
  53.   s : string;
  54.   j : word;
  55. begin
  56.   FMailMessage:=Value;
  57.   Memo1.Lines:=Value.Body;
  58.   Caption:=Value.Subject;
  59.   FromLabel.Caption:=Value.Sender.Name;
  60.   if FromLabel.Caption='' then
  61.     FromLabel.Caption:=Value.Sender.Address;
  62.   DateLabel.Caption:=Value.Headers.GetFieldBody('Date');
  63.   if Value.Attachments.Count>0 then
  64.   begin
  65.     ListView1.Visible:=true;
  66.     for i:=0 to Value.Attachments.Count-1 do
  67.     begin
  68.       Item:=ListView1.Items.Add;
  69.       Item.Caption:=Value.Attachments[i].FileName;
  70.       Value.SaveAttachment(i,TempPath);
  71.       Icon:=TIcon.Create;
  72.       s:=Concat(TempPath,Value.Attachments[i].FileName);
  73.       j:=0;
  74.       Icon.Handle:=ExtractAssociatedIcon(hInstance,PChar(s),j);
  75.       if Icon.Handle<>0 then
  76.         Item.ImageIndex:=ImageList1.AddIcon(Icon);
  77.     end;
  78.   end
  79.   else
  80.     ListView1.Visible:=false;
  81. end;
  82.  
  83. procedure TMsgViewDlg.OpenAttachment(Index : Integer);
  84. var
  85.   s : string;
  86.   TheHandle : THandle;
  87. begin
  88.   s:=Concat(TempPath,ListView1.Items[Index].Caption);
  89.   TheHandle:=ShellExecute(Application.Handle,'Open',PChar(s),nil,nil,SW_SHOW);
  90.   if TheHandle<=31 then
  91.     raise Exception.Create('Unable to run ShellExec. Error code='+IntToStr(TheHandle));
  92. end;
  93.  
  94. procedure TMsgViewDlg.SaveTheAttachment(Index : Integer);
  95. var
  96.   s : string;
  97. begin
  98.   s:=Concat(TempPath,ListView1.Items[Index].Caption);
  99.   SaveDialog1.DefaultExt:=ExtractFileExt(s);
  100.   SaveDialog1.FileName:=ExtractFileName(s);
  101.   if SaveDialog1.Execute then
  102.   begin
  103.     if not CopyFile(PChar(s),PChar(SaveDialog1.FileName),false) then
  104.       raise Exception.Create('Unable to save attachment');
  105.   end;
  106. end;
  107.  
  108. procedure TMsgViewDlg.ListView1DblClick(Sender: TObject);
  109. begin
  110.   if ListView1.Selected<>nil then
  111.     OpenAttachment(ListView1.Selected.Index);
  112. end;
  113.  
  114. procedure TMsgViewDlg.FormCreate(Sender: TObject);
  115. var
  116.   Buf : array[0..255] of Char;
  117. begin
  118.   GetTempPath(255,@Buf);
  119.   TempPath:=StrPas(@Buf);
  120. end;
  121.  
  122. procedure TMsgViewDlg.FormClose(Sender: TObject; var Action: TCloseAction);
  123. var
  124.   i : Integer;
  125.   f : file;
  126.   s : string;
  127. begin
  128.   for i:=0 to ListView1.Items.Count-1 do
  129.   begin
  130.     s:=Concat(TempPath,ListView1.Items[i].Caption);
  131.     AssignFile(f,s);
  132.     try
  133.       Erase(f);
  134.     except
  135.       //Do Nothing
  136.     end;
  137.   end;
  138. end;
  139.  
  140. procedure TMsgViewDlg.ListView1MouseDown(Sender: TObject;
  141.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  142. begin
  143.   if (Button=mbRight) and (ListView1.Selected<>nil) then
  144.     ListView1.PopUpMenu.PopUp(Left+ListView1.Left+X,
  145.       Top+ListView1.Top+Y);
  146. end;
  147.  
  148. procedure TMsgViewDlg.SaveAs1Click(Sender: TObject);
  149. begin
  150.   SaveTheAttachment(ListView1.Selected.Index);
  151. end;
  152.  
  153. end.
  154.