UpFileFrame.pas 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. {*******************************************************************************
  2. 单元名称: UpFileFrame.pas
  3. 单元说明: 计量支付附件,每个小文件。
  4. 作者时间: Chenshilong, 2015-01-13
  5. *******************************************************************************}
  6. unit UpFileFrame;
  7. interface
  8. uses
  9. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  10. Dialogs, cxHint, ExtCtrls, PNGButton, StdCtrls, Buttons, UpFileManageUnit;
  11. type
  12. TUpFileView = class(TFrame)
  13. lblInfo: TLabel;
  14. shpBottom: TShape;
  15. imgFile: TImage;
  16. lblFile: TLabel;
  17. cxHintStyleController1: TcxHintStyleController;
  18. pnlPlay: TPanel;
  19. btnPlay: TPNGButton;
  20. btnDelete: TPNGButton;
  21. pnlOrder: TPanel;
  22. btnUp: TSpeedButton;
  23. btnCancel: TSpeedButton;
  24. procedure btnCancelClick(Sender: TObject);
  25. procedure btnUpClick(Sender: TObject);
  26. procedure btnPlayClick(Sender: TObject);
  27. procedure lblFileClick(Sender: TObject);
  28. procedure FrameClick(Sender: TObject);
  29. procedure btnDeleteClick(Sender: TObject);
  30. private
  31. FOwner: TObject;
  32. FData: TUpFile;
  33. FProjectData: TObject;
  34. procedure SetData(const Value: TUpFile);
  35. procedure SetOwner(const Value: TObject);
  36. procedure SetProjectData(const Value: TObject);
  37. { Private declarations }
  38. public
  39. { Public declarations }
  40. property Owner: TObject read FOwner write SetOwner;
  41. property Data: TUpFile read FData write SetData;
  42. property ProjectData: TObject read FProjectData write SetProjectData;
  43. procedure ShowNormal;
  44. procedure ShowSelected;
  45. procedure UpProgress(APos: Integer);
  46. procedure RefreshStatus(AStatus: TUpFileStatus);
  47. procedure DoOnStatusChange(AStatus: TUpFileStatus);
  48. procedure Refresh;
  49. constructor Create(AOwner: TComponent); override;
  50. end;
  51. implementation
  52. uses ShellAPI, UpFileManageFrame, UtilMethods, Math, PHPWebDm, ProjectData,
  53. ConstUnit;
  54. var G_Pos: Integer;
  55. {$R *.dfm}
  56. { TUpFileView }
  57. procedure TUpFileView.SetData(const Value: TUpFile);
  58. var iW: Integer;
  59. begin
  60. FData := Value;
  61. imgFile.Picture.Graphic := Data.Icon;
  62. iW := lblInfo.Left - lblFile.Left - 20;
  63. // lblFile.AutoSize := True;
  64. lblFile.Caption := Data.DisplayName;
  65. lblFile.Hint := Data.DisplayName;
  66. lblFile.Width := Min(lblFile.Width, iW);
  67. lblFile.AutoSize := False; // 防止选中后自动变为实际长度
  68. lblFile.Width := lblFile.Width + 5;
  69. lblFile.Update;
  70. RefreshStatus(Data.Status);
  71. Data.OnStatusChange := DoOnStatusChange;
  72. end;
  73. procedure TUpFileView.SetOwner(const Value: TObject);
  74. begin
  75. FOwner := Value;
  76. end;
  77. procedure TUpFileView.ShowNormal;
  78. begin
  79. Color := clWindow;
  80. lblFile.Font.Style := lblFile.Font.Style - [fsBold];
  81. lblInfo.Font.Style := lblInfo.Font.Style - [fsBold];
  82. end;
  83. procedure TUpFileView.ShowSelected;
  84. begin
  85. Color := $00FFD7D7;
  86. lblFile.Font.Style := lblFile.Font.Style + [fsBold];
  87. lblInfo.Font.Style := lblInfo.Font.Style + [fsBold];
  88. end;
  89. procedure TUpFileView.UpProgress(APos: Integer);
  90. begin
  91. if APos = 100 then
  92. begin
  93. lblInfo.Caption := '上传成功!';
  94. lblInfo.Font.Color := $0000B500;
  95. G_Pos := 0;
  96. end
  97. else
  98. lblInfo.Caption := '上传中 ' + IntToStr(APos) + '%';
  99. lblInfo.Update;
  100. end;
  101. procedure TUpFileView.btnCancelClick(Sender: TObject);
  102. begin
  103. TUpFileManageView(Owner).DeleteViewAndData(Self, False);
  104. end;
  105. procedure TUpFileView.btnUpClick(Sender: TObject);
  106. var sWebName, sPhase, sID, sDownURL: string;
  107. begin
  108. Screen.Cursor := crHourGlass;
  109. try
  110. Data.Status := ufsUping;
  111. G_Pos := 0; // 刷新本地
  112. Data.Phase := TProjectData(FProjectData).PhaseIndex;
  113. // case iPhase of
  114. // 0: sPhase := '台账'
  115. // else sPhase := IntToStr(iPhase) + '期';
  116. // end;
  117. if G_IsCloud then
  118. begin
  119. if PHPWeb.UpAttachment(PHPWeb.UserID, TProjectData(FProjectData).WebID, Data.BillID, Data.Phase,
  120. Data.OrgFile, Data.Category, Data.Memo, sWebName, sID, sDownURL) then
  121. begin
  122. // TUpFileManageView(Owner).Rec.ValueByName('HasAttachment').AsBoolean := True;
  123. CopyFile(PChar(Data.OrgFile), PChar(Data.LocalFile), False);
  124. Data.Status := ufsNormal;
  125. Data.ID := StrToInt(sID);
  126. Data.DownURL := sDownURL;
  127. FrameClick(Sender);
  128. end
  129. else
  130. begin
  131. Application.MessageBox('当前附件上传失败,请重试!', '系统提示', MB_OK);
  132. Data.Status := ufsNeedUp;
  133. end;
  134. end;
  135. // else
  136. // begin
  137. // if FileExists(Data.LocalFile) then
  138. // if Application.MessageBox('已存在同名的本地附件,该附件将会被覆盖,是否继续?', '询问', MB_YESNO + MB_ICONQUESTION) = ID_No then
  139. // begin
  140. // Data.Status := ufsNeedUp;
  141. // Exit;
  142. // end;
  143. //
  144. // if Data.Owner.LocalSaveToDB(Data) > -1 then
  145. // begin
  146. // CopyFile(PChar(Data.OrgFile), PChar(Data.LocalFile), False);
  147. // Data.Status := ufsNormal;
  148. // end
  149. // else
  150. // begin
  151. // Application.MessageBox('当前附件保存失败,请重试!', '系统提示', MB_OK);
  152. // Data.Status := ufsNeedUp;
  153. // end;
  154. // end;
  155. finally
  156. Screen.Cursor := crDefault;
  157. end;
  158. end;
  159. procedure TUpFileView.btnPlayClick(Sender: TObject);
  160. var sName, sPath: string;
  161. begin
  162. sName := ExtractFileName(Data.LocalFile);
  163. sPath := ExtractFilePath(Data.LocalFile);
  164. FrameClick(Sender);
  165. ShellExecute(Handle, 'open', pchar(sName), nil, pchar(sPath), SW_SHOWNORMAL);
  166. end;
  167. procedure TUpFileView.lblFileClick(Sender: TObject);
  168. begin
  169. FrameClick(Sender);
  170. end;
  171. procedure TUpFileView.FrameClick(Sender: TObject);
  172. begin
  173. ShowSelected;
  174. TUpFileManageView(Owner).Selected := Self;
  175. end;
  176. procedure TUpFileView.RefreshStatus(AStatus: TUpFileStatus);
  177. begin
  178. case Data.Status of
  179. ufsNeedUp:
  180. begin
  181. pnlOrder.Visible := True;
  182. pnlPlay.Visible := False;
  183. lblInfo.Visible := False;
  184. end;
  185. ufsNormal:
  186. begin
  187. pnlOrder.Visible := False;
  188. pnlPlay.Visible := True;
  189. lblInfo.Visible := True;
  190. lblInfo.Font.Color := clBlack;
  191. lblInfo.Caption := Data.UperName;
  192. lblInfo.Update;
  193. end;
  194. ufsUping:
  195. begin
  196. pnlOrder.Visible := False;
  197. pnlPlay.Visible := False;
  198. lblInfo.Visible := True;
  199. lblInfo.Font.Color := clRed;
  200. if G_IsCloud then
  201. lblInfo.Caption := '上传中...'
  202. else
  203. lblInfo.Caption := '保存中...';
  204. lblInfo.Update;
  205. end;
  206. ufsDowning:
  207. begin
  208. pnlOrder.Visible := False;
  209. pnlPlay.Visible := False;
  210. lblInfo.Visible := True;
  211. lblInfo.Font.Color := clRed;
  212. lblInfo.Caption := '下载中...';
  213. lblInfo.Update;
  214. end;
  215. ufsDownFail:
  216. begin
  217. pnlOrder.Visible := False;
  218. pnlPlay.Visible := False;
  219. lblInfo.Visible := True;
  220. lblInfo.Font.Color := clRed;
  221. lblInfo.Caption := '下载失败!';
  222. lblInfo.Update;
  223. end;
  224. end;
  225. Application.ProcessMessages;
  226. end;
  227. procedure TUpFileView.btnDeleteClick(Sender: TObject);
  228. begin
  229. if Application.MessageBox('确定要在线上移除该附件吗?', '询问', MB_YESNO + MB_ICONQUESTION) = ID_No then
  230. Exit;
  231. TUpFileManageView(Owner).DeleteViewAndData(Self, True);
  232. //ShellExecute(Handle, nil, PChar('explorer.exe'), PChar('/e,/select,' + Data.LocalFile), nil, SW_Show);
  233. end;
  234. procedure TUpFileView.SetProjectData(const Value: TObject);
  235. begin
  236. FProjectData := Value;
  237. end;
  238. procedure TUpFileView.DoOnStatusChange(AStatus: TUpFileStatus);
  239. begin
  240. RefreshStatus(AStatus);
  241. end;
  242. constructor TUpFileView.Create(AOwner: TComponent);
  243. const
  244. G_Left = 268;
  245. G_Top = 12;
  246. begin
  247. inherited;
  248. lblInfo.Left := G_Left;
  249. pnlPlay.ParentColor := True;
  250. pnlPlay.BevelOuter := bvNone;
  251. pnlPlay.Left := G_Left + 45;
  252. pnlPlay.Top := G_Top;
  253. pnlOrder.ParentColor := True;
  254. pnlOrder.BevelOuter := bvNone;
  255. pnlOrder.Left := G_Left;
  256. pnlPlay.Top := G_Top;
  257. if G_IsCloud then
  258. btnUp.Caption := '上传'
  259. else
  260. btnUp.Caption := '保存';
  261. end;
  262. procedure TUpFileView.Refresh;
  263. var iW: Integer;
  264. begin
  265. lblFile.Caption := Data.DisplayName;
  266. lblFile.Hint := Data.DisplayName;
  267. RefreshStatus(Data.Status);
  268. end;
  269. end.