|
@@ -8,13 +8,15 @@ uses
|
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
|
Dialogs, sdIDTree, sdDB, ComCtrls, ExtCtrls, VirtualTrees, PrintCom,
|
|
|
PrintComXML, MScrollBox, StdCtrls, Buttons, PNGButton, ieview,
|
|
|
- imageenview, jpeg;
|
|
|
+ imageenview, jpeg, ConditionalDefines;
|
|
|
|
|
|
const
|
|
|
crNext = -25;
|
|
|
crPrevious = -26;
|
|
|
offset = 150;
|
|
|
type
|
|
|
+ TUploadType = (utSign, utEpure);
|
|
|
+
|
|
|
TSignOnlineReportsForm = class(TForm)
|
|
|
tvReports: TTreeView;
|
|
|
pnlBottom: TPanel;
|
|
@@ -29,6 +31,7 @@ type
|
|
|
lblPages: TLabel;
|
|
|
pbGenerate: TPNGButton;
|
|
|
ImageEnView1: TImageEnView;
|
|
|
+ lblEpureHint: TLabel;
|
|
|
procedure FormShow(Sender: TObject);
|
|
|
procedure tvReportsClick(Sender: TObject);
|
|
|
procedure PreviewComXMLContentDisplay(var contentFontRec: TFontRec;
|
|
@@ -67,6 +70,8 @@ type
|
|
|
|
|
|
FTempPath: string;
|
|
|
|
|
|
+ FUploadType: TUploadType;
|
|
|
+ FLoadListUrl: string;
|
|
|
FPostedSignReports: TSignReports;
|
|
|
|
|
|
procedure OnViewMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
|
|
@@ -74,9 +79,13 @@ type
|
|
|
|
|
|
function SafeReportName(var AName: string): Boolean;
|
|
|
|
|
|
+ procedure ExportReportPage(APage: Integer; const APageFileName: string);
|
|
|
procedure ExportReports(const AFileName: string);
|
|
|
procedure ExportPdfReports(const AFileName: string);
|
|
|
|
|
|
+ procedure GenerateSignReport;
|
|
|
+ procedure GenerateEpureReport;
|
|
|
+
|
|
|
procedure LoadReportTemplates;
|
|
|
|
|
|
procedure PreviewPage(AImage: TImage; APageIndex: Integer);
|
|
@@ -97,19 +106,25 @@ type
|
|
|
destructor Destroy; override;
|
|
|
|
|
|
procedure Init(AProjNode: TsdIDTreeNode; ASignPhase: Integer);
|
|
|
+ // 特性初始化
|
|
|
+ procedure InitForSign;
|
|
|
+ procedure InitForEpure;
|
|
|
|
|
|
property ProjectData: TProjectData read FProjectData;
|
|
|
property CurPage: Integer read FCurPage write SetCurPage;
|
|
|
end;
|
|
|
|
|
|
+// 在线签署
|
|
|
procedure SignOnline(AProjectNode: TsdIDTreeNode; ASignPhase: Integer);
|
|
|
+// 插入计量草图(中间计量)
|
|
|
+procedure EpureOnline(AProjectNode: TsdIDTreeNode; AEpurePhase: Integer);
|
|
|
|
|
|
implementation
|
|
|
|
|
|
uses
|
|
|
UtilMethods, TemplateManagerHelper, Globals, AuditSelectFrm,
|
|
|
ScFileArchiver, ZhAPI, PHPWebDm, imageenio, ReportPdfHelper,
|
|
|
- mProgressFrm, RenameSignReportFrm, Math;
|
|
|
+ mProgressFrm, RenameSignReportFrm, Math, superobject, ProgressHintFrm;
|
|
|
|
|
|
{$R *.dfm}
|
|
|
|
|
@@ -120,12 +135,27 @@ begin
|
|
|
vSignForm := TSignOnlineReportsForm.Create(nil);
|
|
|
try
|
|
|
vSignForm.Init(AProjectNode, ASignPhase);
|
|
|
+ vSignForm.InitForSign;
|
|
|
vSignForm.ShowModal;
|
|
|
finally
|
|
|
vSignForm.Free;
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
+procedure EpureOnline(AProjectNode: TsdIDTreeNode; AEpurePhase: Integer);
|
|
|
+var
|
|
|
+ vEpureForm: TSignOnlineReportsForm;
|
|
|
+begin
|
|
|
+ vEpureForm := TSignOnlineReportsForm.Create(nil);
|
|
|
+ try
|
|
|
+ vEpureForm.Init(AProjectNode, AEpurePhase);
|
|
|
+ vEpureForm.InitForEpure;
|
|
|
+ vEpureForm.ShowModal;
|
|
|
+ finally
|
|
|
+ vEpureForm.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
{ TSignOnlineReportsForm }
|
|
|
|
|
|
destructor TSignOnlineReportsForm.Destroy;
|
|
@@ -173,8 +203,6 @@ begin
|
|
|
|
|
|
FTempPath := GetAppTempPath + IntToStr(AProjNode.ID) + '\';
|
|
|
CreateDirectoryInDeep(FTempPath);
|
|
|
-
|
|
|
- FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + 'sign/list', FWebTenderID, FSignPhase);
|
|
|
end;
|
|
|
|
|
|
procedure TSignOnlineReportsForm.LoadReportTemplates;
|
|
@@ -214,7 +242,7 @@ begin
|
|
|
cbFillZero.Visible := Assigned(vTemplate);
|
|
|
pnlPageControl.Visible := Assigned(vTemplate);
|
|
|
|
|
|
- FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + 'sign/list', FWebTenderID, FSignPhase);
|
|
|
+ FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + FLoadListUrl, FWebTenderID, FSignPhase);
|
|
|
lblAlreadyUpload.Visible := Assigned(vTemplate) and Assigned(FPostedSignReports.FindSignReport(FSignPhase, vTemplate.TemplateName));
|
|
|
|
|
|
ReportTemplateManager.Current := vTemplate;
|
|
@@ -876,11 +904,26 @@ begin
|
|
|
contentFontRec.FontHeight := Round(ReportConfig.ContentFont.Size*4/3);
|
|
|
end else if (isPrinting) then
|
|
|
begin
|
|
|
- contentFontRec.FontName := 'Arial Narrow';
|
|
|
- contentFontRec.FontHeight := Round(ReportConfig.ContentFont.Size*4/3) * 7 div 6;
|
|
|
+ if (dataType = DATA_TYPE_DOUBLE) or (dataType = DATA_TYPE_FLOAT) then
|
|
|
+ begin
|
|
|
+ contentFontRec.FontName := 'Arial Narrow';
|
|
|
+ contentFontRec.FontHeight := Round(ReportConfig.ContentFont.Size*4/3) * 7 div 6;
|
|
|
+ end else
|
|
|
+ begin
|
|
|
+ contentFontRec.FontName := ReportConfig.ContentFont.Name;
|
|
|
+ contentFontRec.FontHeight := Round(ReportConfig.ContentFont.Size*4/3);
|
|
|
+ end;
|
|
|
end else
|
|
|
begin
|
|
|
- contentFontRec.FontHeight := Round(ReportConfig.ContentFont.Size*4/3) * 4 div 3;
|
|
|
+ if (dataType = DATA_TYPE_DOUBLE) or (dataType = DATA_TYPE_FLOAT) then
|
|
|
+ begin
|
|
|
+ contentFontRec.FontName := 'Arial Narrow';
|
|
|
+ contentFontRec.FontHeight := Round(ReportConfig.ContentFont.Size*4/3) * 4 div 3;
|
|
|
+ end else
|
|
|
+ begin
|
|
|
+ contentFontRec.FontName := ReportConfig.ContentFont.Name;
|
|
|
+ contentFontRec.FontHeight := Round(ReportConfig.ContentFont.Size*4/3);
|
|
|
+ end;
|
|
|
end;
|
|
|
end;
|
|
|
end;
|
|
@@ -997,29 +1040,6 @@ begin
|
|
|
end;
|
|
|
|
|
|
procedure TSignOnlineReportsForm.ExportReports(const AFileName: string);
|
|
|
-
|
|
|
- procedure ExportReportPage(APage: Integer; const APageFileName: string);
|
|
|
- var
|
|
|
- bmp: TBitmap;
|
|
|
- img: TJPEGImage;
|
|
|
- begin
|
|
|
- bmp := TBitmap.Create;
|
|
|
- img := TJPEGImage.Create;
|
|
|
- try
|
|
|
- bmp.Height := PreviewComXML.ReportSize.Y;
|
|
|
- bmp.Width := PreviewComXML.ReportSize.X;
|
|
|
- PreviewComXML.PrintPreviewCanvas(APage, 0, bmp.Canvas, False);
|
|
|
-
|
|
|
- img.Assign(bmp);
|
|
|
- img.CompressionQuality := 100;
|
|
|
- img.Compress;
|
|
|
- img.SaveToFile(APageFileName);
|
|
|
- finally
|
|
|
- bmp.Free;
|
|
|
- img.Free;
|
|
|
- end;
|
|
|
- end;
|
|
|
-
|
|
|
var
|
|
|
ATempFolder: String;
|
|
|
i: Integer;
|
|
@@ -1056,55 +1076,11 @@ begin
|
|
|
end;
|
|
|
|
|
|
procedure TSignOnlineReportsForm.pbGenerateClick(Sender: TObject);
|
|
|
-var
|
|
|
- sReportName, sZipFile, sPdfFile, sErrorMessage: string;
|
|
|
- vInFields, vInValues: array [0..5] of string;
|
|
|
- vUpFileFields, vUpFileNames: array [0..1] of string;
|
|
|
begin
|
|
|
- if PreviewComXML.TotalPages > 200 then
|
|
|
- begin
|
|
|
- TipMessage('该报表不支持在线签署功能。');
|
|
|
- Exit;
|
|
|
- end;
|
|
|
-
|
|
|
- sReportName := ReportTemplateManager.Current.TemplateName;
|
|
|
- if SafeReportName(sReportName) then
|
|
|
- begin
|
|
|
- CreateProgress('上传中,请等待...');
|
|
|
- vInFields[0] := 'project';
|
|
|
- vInValues[0] := IntToStr(FWebProjectID);
|
|
|
- vInFields[1] := 'tender';
|
|
|
- vInValues[1] := IntToStr(FWebTenderID);
|
|
|
- vInFields[2] := 'phaseno';
|
|
|
- vInValues[2] := IntToStr(FSignPhase);
|
|
|
- vInFields[3] := 'name';
|
|
|
- vInValues[3] := sReportName;
|
|
|
- vInFields[4] := 'ownuid';
|
|
|
- vInValues[4] := IntToStr(PHPWeb.UserID);
|
|
|
- vInFields[5] := 'widhei';
|
|
|
- vInValues[5] := Format('%d_%d', [Round(PreviewComXML.ReportSizeDou.X * 10), Round(PreviewComXML.ReportSizeDou.Y * 10)]);
|
|
|
-
|
|
|
- vUpFileFields[0] := 'upfile';
|
|
|
- vUpFileNames[0] := GetTempFileName(FTempPath, '.zip');
|
|
|
- ExportReports(vUpFileNames[0]);
|
|
|
- vUpFileFields[1] := 'upspdf';
|
|
|
- vUpFileNames[1] := GetTempFileName(FTempPath, '.pdf');
|
|
|
- PdfHelper.ExportAllPages(PreviewComXML, vUpFileNames[1]);
|
|
|
-
|
|
|
- if PHPWeb.UploadFiles('sign/create', vInFields, vInValues, vUpFileFields, vUpFileNames, sErrorMessage) then
|
|
|
- begin
|
|
|
- FPostedSignReports.AddSignReport(FSignPhase, ReportTemplateManager.Current.TemplateName, 234);
|
|
|
- lblAlreadyUpload.Visible := True;
|
|
|
-
|
|
|
- CloseProgress;
|
|
|
- TipMessage('上传完成。');
|
|
|
- end
|
|
|
- else
|
|
|
- begin
|
|
|
- CloseProgress;
|
|
|
- WarningMessage(Format('%s, 上传数据失败,请重试。', [sErrorMessage]));
|
|
|
- end;
|
|
|
- end;
|
|
|
+ if FUploadType = utSign then
|
|
|
+ GenerateSignReport
|
|
|
+ else if FUploadType = utEpure then
|
|
|
+ GenerateEpureReport;
|
|
|
end;
|
|
|
|
|
|
procedure TSignOnlineReportsForm.OnViewMouseMove(Sender: TObject;
|
|
@@ -1178,7 +1154,7 @@ begin
|
|
|
Result := False;
|
|
|
sOrgName := AName;
|
|
|
iCount := 0;
|
|
|
- FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + 'sign/list', FWebTenderID, FSignPhase);
|
|
|
+ FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + FLoadListUrl, FWebTenderID, FSignPhase);
|
|
|
while Assigned(FPostedSignReports.FindSignReport(FSignPhase, AName)) do
|
|
|
begin
|
|
|
Inc(iCount);
|
|
@@ -1192,7 +1168,201 @@ end;
|
|
|
procedure TSignOnlineReportsForm.cbFillZeroClick(Sender: TObject);
|
|
|
begin
|
|
|
PreviewComXML.FillZero := cbFillZero.Checked;
|
|
|
- PreviewPage(TImage(FPreviewList.Items[0]), FCurPage);
|
|
|
+ if Assigned(FPreviewList) and (FPreviewList.Count > 0) then
|
|
|
+ PreviewPage(TImage(FPreviewList.Items[0]), FCurPage);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSignOnlineReportsForm.InitForEpure;
|
|
|
+begin
|
|
|
+ Caption := '插入计量草图';
|
|
|
+ FUploadType := utEpure;
|
|
|
+ lblEpureHint.Visible := True;
|
|
|
+
|
|
|
+ FLoadListUrl := 'sign/list';
|
|
|
+ FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + FLoadListUrl, FWebTenderID, FSignPhase);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSignOnlineReportsForm.InitForSign;
|
|
|
+begin
|
|
|
+ Caption := '在线签署';
|
|
|
+ FUploadType := utSign;
|
|
|
+ lblEpureHint.Visible := False;
|
|
|
+
|
|
|
+ FLoadListUrl := 'sign/list';
|
|
|
+ FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + FLoadListUrl, FWebTenderID, FSignPhase);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSignOnlineReportsForm.GenerateEpureReport;
|
|
|
+
|
|
|
+ function CreateOnlineEpureReport(const AReportName: string; var AResult: string): Boolean;
|
|
|
+ var
|
|
|
+ sgsParam: TStrings;
|
|
|
+ sMessage: string;
|
|
|
+ iResult: Integer;
|
|
|
+ begin
|
|
|
+ Result := False;
|
|
|
+ sgsParam := TStringList.Create;
|
|
|
+ try
|
|
|
+ sgsParam.Add(Format('project=%d', [FWebProjectID]));
|
|
|
+ sgsParam.Add(Format('tender=%d', [FWebTenderID]));
|
|
|
+ sgsParam.Add(Format('phaseno=%d', [FSignPhase]));
|
|
|
+ sgsParam.Add(Format('name=%s', [AReportName]));
|
|
|
+ sgsParam.Add(Format('ownuid=%d', [PHPWeb.UserID]));
|
|
|
+ sgsParam.Add(Format('widhei=%d_%d', [Round(PreviewComXML.ReportSizeDou.X * 10), Round(PreviewComXML.ReportSizeDou.Y * 10)]));
|
|
|
+ sgsParam.Add(Format('totalnum=%d', [PreviewComXML.TotalPages]));
|
|
|
+
|
|
|
+ iResult := PHPWeb.UrlGet(PHPWeb.MeasureURL + 'intermediate/create', sgsParam, AResult);
|
|
|
+ case iResult of
|
|
|
+ 0: WarningMessage('网络错误:' + AResult);
|
|
|
+ -1: WarningMessage('网络错误:无法连接到云端');
|
|
|
+ end;
|
|
|
+ Result := (iResult = 1) and (AResult <> '');
|
|
|
+ finally
|
|
|
+ sgsParam.Free;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+ function UploadEpureReport(const ASignid, AMd5_sign: string): Boolean;
|
|
|
+ var
|
|
|
+ ATempFolder, sFileName, sMessage: String;
|
|
|
+ vInFields, vInValues: array [0..1] of string;
|
|
|
+ vUpFileFields, vUpFileNames: array [0..0] of string;
|
|
|
+ i: Integer;
|
|
|
+ begin
|
|
|
+ Result := False;
|
|
|
+ ATempFolder := GenerateTempFolder(GetTempFilePath);
|
|
|
+ vInFields[0] := 'signid';
|
|
|
+ vInValues[0] := ASignid;
|
|
|
+ vInFields[1] := 'md5_sign';
|
|
|
+ vInValues[1] := AMd5_sign;
|
|
|
+ ShowProgressHint('正在上传数据...', PreviewComXML.TotalPages);
|
|
|
+ try
|
|
|
+ for i := 1 to PreviewComXML.TotalPages do
|
|
|
+ begin
|
|
|
+ sFileName := Format('%s\%d.jpg', [ATempFolder, i]);
|
|
|
+ ExportReportPage(i, sFileName);
|
|
|
+
|
|
|
+ vUpFileFields[0] := 'imediate';
|
|
|
+ vUpFileNames[0] := sFileName;
|
|
|
+
|
|
|
+ if not PHPWeb.UploadFiles('intermediate/upload', vInFields, vInValues, vUpFileFields, vUpFileNames, sMessage) then
|
|
|
+ begin
|
|
|
+ WarningMessage(sMessage);
|
|
|
+ Abort;
|
|
|
+ end;
|
|
|
+ UpdateProgressPosition(i);
|
|
|
+ end;
|
|
|
+ Result := True;
|
|
|
+ finally
|
|
|
+ CloseProgressHint;
|
|
|
+ DeleteFileOrFolder(ATempFolder);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ sReportName, sResult: string;
|
|
|
+ vJ: ISuperObject;
|
|
|
+begin
|
|
|
+ sReportName := ReportTemplateManager.Current.TemplateName;
|
|
|
+ if SafeReportName(sReportName) then
|
|
|
+ begin
|
|
|
+ if CreateOnlineEpureReport(sReportName, sResult) then
|
|
|
+ begin
|
|
|
+ try
|
|
|
+ vJ := SO(sResult);
|
|
|
+ if UploadEpureReport(vJ['signid'].AsString, vJ['md5_sign'].AsString) then
|
|
|
+ TipMessage('上传完成。');
|
|
|
+ finally
|
|
|
+ FPostedSignReports.AddSignReport(FSignPhase, ReportTemplateManager.Current.TemplateName, PHPWeb.UserID);
|
|
|
+ lblAlreadyUpload.Visible := True;
|
|
|
+ vJ := nil;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSignOnlineReportsForm.GenerateSignReport;
|
|
|
+var
|
|
|
+ sReportName, sZipFile, sPdfFile, sErrorMessage: string;
|
|
|
+ vInFields, vInValues: array [0..5] of string;
|
|
|
+ vUpFileFields, vUpFileNames: array [0..1] of string;
|
|
|
+begin
|
|
|
+ if not _IsDebugView and (PreviewComXML.TotalPages > 200) then
|
|
|
+ begin
|
|
|
+ TipMessage('该报表不支持在线签署功能。');
|
|
|
+ Exit;
|
|
|
+ end;
|
|
|
+
|
|
|
+ sReportName := ReportTemplateManager.Current.TemplateName;
|
|
|
+ if SafeReportName(sReportName) then
|
|
|
+ begin
|
|
|
+ CreateProgress('上传中,请等待...');
|
|
|
+ vInFields[0] := 'project';
|
|
|
+ vInValues[0] := IntToStr(FWebProjectID);
|
|
|
+ vInFields[1] := 'tender';
|
|
|
+ vInValues[1] := IntToStr(FWebTenderID);
|
|
|
+ vInFields[2] := 'phaseno';
|
|
|
+ vInValues[2] := IntToStr(FSignPhase);
|
|
|
+ vInFields[3] := 'name';
|
|
|
+ vInValues[3] := sReportName;
|
|
|
+ vInFields[4] := 'ownuid';
|
|
|
+ vInValues[4] := IntToStr(PHPWeb.UserID);
|
|
|
+ vInFields[5] := 'widhei';
|
|
|
+ vInValues[5] := Format('%d_%d', [Round(PreviewComXML.ReportSizeDou.X * 10), Round(PreviewComXML.ReportSizeDou.Y * 10)]);
|
|
|
+
|
|
|
+ vUpFileFields[0] := 'upfile';
|
|
|
+ vUpFileNames[0] := GetTempFileName(FTempPath, '.zip');
|
|
|
+ ExportReports(vUpFileNames[0]);
|
|
|
+ vUpFileFields[1] := 'upspdf';
|
|
|
+ vUpFileNames[1] := GetTempFileName(FTempPath, '.pdf');
|
|
|
+ PdfHelper.ExportAllPages(PreviewComXML, vUpFileNames[1]);
|
|
|
+
|
|
|
+ if PHPWeb.UploadFiles('sign/create', vInFields, vInValues, vUpFileFields, vUpFileNames, sErrorMessage) then
|
|
|
+ begin
|
|
|
+ FPostedSignReports.AddSignReport(FSignPhase, ReportTemplateManager.Current.TemplateName, PHPWeb.UserID);
|
|
|
+ lblAlreadyUpload.Visible := True;
|
|
|
+
|
|
|
+ CloseProgress;
|
|
|
+ TipMessage('上传完成。');
|
|
|
+ end
|
|
|
+ else
|
|
|
+ begin
|
|
|
+ CloseProgress;
|
|
|
+ WarningMessage(Format('%s, 上传数据失败,请重试。', [sErrorMessage]));
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSignOnlineReportsForm.ExportReportPage(APage: Integer;
|
|
|
+ const APageFileName: string);
|
|
|
+var
|
|
|
+ bmp, bmpCut: TBitmap;
|
|
|
+ img: TJPEGImage;
|
|
|
+ iCutHeight, iCutWidth, iCutTop, iCutLeft, iCutRight, iCutBottom: Integer;
|
|
|
+begin
|
|
|
+ bmp := TBitmap.Create;
|
|
|
+ bmpCut := TBitmap.Create;
|
|
|
+ img := TJPEGImage.Create;
|
|
|
+ try
|
|
|
+ bmp.Height := PreviewComXML.ReportSize.Y;
|
|
|
+ bmp.Width := PreviewComXML.ReportSize.X;
|
|
|
+ PreviewComXML.PrintPreviewCanvas(APage, 0, bmp.Canvas, False);
|
|
|
+
|
|
|
+ iCutHeight := Round(PreviewComXML.ReportSize.Y / 200);
|
|
|
+ iCutWidth := Round(PreviewComXML.ReportSize.X / 200);
|
|
|
+ bmpCut.Height := PreviewComXML.ReportSize.Y - iCutHeight * 2;
|
|
|
+ bmpCut.Width := PreviewComXML.ReportSize.X - iCutWidth * 2;
|
|
|
+ bmpCut.Canvas.CopyRect(Rect(0, 0, bmpCut.Width, bmpCut.Height), bmp.Canvas, Rect(iCutWidth, iCutHeight, bmp.Width - iCutWidth, bmp.Height - iCutHeight));
|
|
|
+
|
|
|
+ img.Assign(bmpCut);
|
|
|
+ img.CompressionQuality := 100;
|
|
|
+ img.Compress;
|
|
|
+ img.SaveToFile(APageFileName);
|
|
|
+ finally
|
|
|
+ bmpCut.Free;
|
|
|
+ bmp.Free;
|
|
|
+ img.Free;
|
|
|
+ end;
|
|
|
end;
|
|
|
|
|
|
end.
|