Main.pas 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. { $HDR$}
  2. {**********************************************************************}
  3. { Unit archived using Team Coherence }
  4. { Team Coherence is Copyright 2002 by Quality Software Components }
  5. { }
  6. { For further information / comments, visit our WEB site at }
  7. { http://www.TeamCoherence.com }
  8. {**********************************************************************}
  9. {}
  10. { $Log: 20159: Main.pas
  11. {
  12. { Rev 1.0 2003.06.12 1:01:36 PM czhower
  13. { Recheckin
  14. }
  15. unit Main;
  16. interface
  17. uses
  18. DecoderBox,
  19. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  20. Dialogs, ComCtrls, Menus, ActnList, ImgList, ToolWin, ExtCtrls, StdCtrls;
  21. type
  22. TformMain = class(TForm)
  23. lboxMessages: TListBox;
  24. Splitter1: TSplitter;
  25. alstMain: TActionList;
  26. MainMenu1: TMainMenu;
  27. PopupMenu1: TPopupMenu;
  28. ToolBar1: TToolBar;
  29. ImageList1: TImageList;
  30. actnFile_Exit: TAction;
  31. actnTest_Test: TAction;
  32. File1: TMenuItem;
  33. actnFileTest1: TMenuItem;
  34. Exit1: TMenuItem;
  35. ToolButton1: TToolButton;
  36. Panel2: TPanel;
  37. Panel1: TPanel;
  38. Label1: TLabel;
  39. Label2: TLabel;
  40. Label3: TLabel;
  41. lablFilename: TLabel;
  42. lablAttachments: TLabel;
  43. lablTextParts: TLabel;
  44. pctlMessage: TPageControl;
  45. tshtBody: TTabSheet;
  46. memoBody: TMemo;
  47. TabSheet2: TTabSheet;
  48. TabSheet3: TTabSheet;
  49. lboxAttachments: TListBox;
  50. lboxTextParts: TListBox;
  51. Splitter2: TSplitter;
  52. Splitter3: TSplitter;
  53. actnTest_Emit: TAction;
  54. Exit2: TMenuItem;
  55. Emit1: TMenuItem;
  56. Emit2: TMenuItem;
  57. TabSheet1: TTabSheet;
  58. memoRaw: TMemo;
  59. actnTest_Verify: TAction;
  60. estandVerify1: TMenuItem;
  61. estandVerify2: TMenuItem;
  62. eset1: TMenuItem;
  63. Panel3: TPanel;
  64. memoTextPart: TMemo;
  65. memoTextPartHeader: TMemo;
  66. Splitter4: TSplitter;
  67. Panel4: TPanel;
  68. Splitter5: TSplitter;
  69. memoAttachment: TMemo;
  70. memoAttachmentHeader: TMemo;
  71. Label4: TLabel;
  72. lablErrors: TLabel;
  73. N1: TMenuItem;
  74. actnTest_VerifyAll: TAction;
  75. VerifyAll1: TMenuItem;
  76. procedure actnFile_ExitExecute(Sender: TObject);
  77. procedure actnTest_TestExecute(Sender: TObject);
  78. procedure alstMainUpdate(Action: TBasicAction; var Handled: Boolean);
  79. procedure lboxMessagesDblClick(Sender: TObject);
  80. procedure FormCreate(Sender: TObject);
  81. procedure lboxTextPartsDblClick(Sender: TObject);
  82. procedure lboxAttachmentsDblClick(Sender: TObject);
  83. procedure actnTest_VerifyAllExecute(Sender: TObject);
  84. private
  85. protected
  86. FDataPath: string;
  87. FDecoderBox: TDecoderBox;
  88. public
  89. end;
  90. var
  91. formMain: TformMain;
  92. implementation
  93. {$R *.dfm}
  94. uses
  95. IdGlobal, IdMessage;
  96. procedure TformMain.actnFile_ExitExecute(Sender: TObject);
  97. begin
  98. Close;
  99. end;
  100. procedure TformMain.actnTest_TestExecute(Sender: TObject);
  101. var
  102. i: Integer;
  103. LFilename: string;
  104. begin
  105. Screen.Cursor := crHourglass; try
  106. try
  107. if Assigned(FDecoderBox) then begin
  108. FreeAndNil(FDecoderBox);
  109. end;
  110. lablErrors.Caption := '';
  111. LFilename := Copy(lboxMessages.Items[lboxMessages.ItemIndex], 3, MaxInt);
  112. FDecoderBox := TDecoderBox.Create(Self);
  113. memoRaw.Lines.LoadFromFile(FDataPath + LFilename);
  114. with FDecoderBox do begin
  115. TestMessage(FDataPath + LFilename, Sender = actnTest_Verify, Sender = actnTest_Emit);
  116. //
  117. lablFilename.Caption := LFilename;
  118. lablAttachments.Caption := IntToStr(AttCount) + ' / ' + IntToStr(AttCountExpected);
  119. lablTextParts.Caption := IntToStr(TextCount) + ' / ' + IntToStr(TextCountExpected);;
  120. memoBody.Lines.Assign(Msg.Body);
  121. //
  122. lboxAttachments.Clear;
  123. memoAttachment.Clear;
  124. lboxTextParts.Clear;
  125. memoTextPart.Clear;
  126. for i := 0 to Msg.MessageParts.Count - 1 do begin
  127. if Msg.MessageParts[i] is TIdText then begin
  128. lboxTextParts.Items.AddObject(IntToStr(i), TIdText(Msg.MessageParts[i]));
  129. end else if Msg.MessageParts[i] is TIdAttachment then begin
  130. lboxAttachments.Items.AddObject(TIdAttachment(
  131. Msg.MessageParts[i]).Filename, Msg.MessageParts[i]);
  132. end else begin
  133. raise Exception.Create('Unknown message part type.');
  134. end;
  135. end;
  136. end;
  137. lboxMessages.Items[lboxMessages.ItemIndex] := '+'
  138. + Copy(lboxMessages.Items[lboxMessages.ItemIndex], 2, MaxInt);
  139. except
  140. on E: Exception do begin
  141. lablErrors.Caption := E.Message;
  142. lboxMessages.Items[lboxMessages.ItemIndex] := '-'
  143. + Copy(lboxMessages.Items[lboxMessages.ItemIndex], 2, MaxInt);
  144. end;
  145. end;
  146. finally Screen.Cursor := crDefault; end;
  147. end;
  148. procedure TformMain.alstMainUpdate(Action: TBasicAction; var Handled: Boolean);
  149. begin
  150. actnTest_Test.Enabled := lboxMessages.ItemIndex > -1;
  151. Handled := True;
  152. end;
  153. procedure TformMain.lboxMessagesDblClick(Sender: TObject);
  154. begin
  155. // Here instead of linked at design because of .Enabled
  156. actnTest_Verify.Execute;
  157. end;
  158. procedure TformMain.FormCreate(Sender: TObject);
  159. var
  160. i: integer;
  161. LRec: TSearchRec;
  162. begin
  163. pctlMessage.ActivePage := tshtBody;
  164. FDataPath := ExtractFilePath(ParamStr(0)) + 'DecoderBox' + GPathDelim;
  165. i := FindFirst(FDataPath + '*.msg', faAnyFile, LRec); try
  166. while i = 0 do begin
  167. lboxMessages.Items.Add(' ' + LRec.Name);
  168. i := FindNext(LRec);
  169. end;
  170. finally FindClose(LRec); end;
  171. end;
  172. procedure TformMain.lboxTextPartsDblClick(Sender: TObject);
  173. var
  174. LText: TIdText;
  175. begin
  176. if lboxTextParts.ItemIndex > -1 then begin
  177. LText := TIdText(lboxTextParts.Items.Objects[lboxTextParts.ItemIndex]);
  178. memoTextPartHeader.Lines.Assign(LText.Headers);
  179. memoTextPart.Lines.Assign(LText.Body);
  180. end;
  181. end;
  182. procedure TformMain.lboxAttachmentsDblClick(Sender: TObject);
  183. var
  184. LAttachment: TIdAttachment;
  185. begin
  186. if lboxAttachments.ItemIndex > -1 then begin
  187. LAttachment := TIdAttachment(lboxAttachments.Items.Objects[lboxAttachments.ItemIndex]);
  188. memoAttachmentHeader.Lines.Assign(LAttachment.Headers);
  189. memoAttachment.Lines.LoadFromFile(LAttachment.StoredPathname);
  190. end;
  191. end;
  192. procedure TformMain.actnTest_VerifyAllExecute(Sender: TObject);
  193. var
  194. i: Integer;
  195. begin
  196. for i := 0 to lboxMessages.Items.Count - 1 do begin
  197. lboxMessages.ItemIndex := i;
  198. actnTest_Verify.Execute;
  199. end;
  200. end;
  201. end.