UpFileFrame.pas 8.8 KB

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