???请问如何修改 const Signature = 'CRC TEST12 '这一句,我不想静态赋值,想取Edit2的值,该怎么改程序???

lantianhf 2010-11-08 05:18:46
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
btnVerify: TButton;
btnSignature: TButton;
SpeedButton1: TSpeedButton;
OpenDialog1: TOpenDialog;
Label1: TLabel;
procedure btnVerifyClick(Sender: TObject);
procedure btnSignatureClick(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
function VerifyStream(
FS: TStream;
const aSignature: string
): Boolean;
var
L: Integer;
Buf: string;
begin
Result := False;
L := Length(aSignature);
if (L > 0) and (FS.Size > L) then
begin
FS.Seek(-L, soFromEnd);
SetLength(Buf, L);
FS.ReadBuffer(Buf[1], L);
Result := CompareStr(Buf, aSignature) = 0;
end;
end;

procedure SignatureFile(const aFileName: string; const aSignature: string);
var
FS: TFileStream;
begin
Assert(aSignature <> ' ');

FS := TFileStream.Create(
aFileName,
fmOpenReadWrite or fmShareExclusive
);

with FS do
try
if not VerifyStream(FS, aSignature) then
begin
Seek(0, soFromEnd);
WriteBuffer(aSignature[1], Length(aSignature));
end;
finally
Destroy();
end;
end;

function VerifyFile(const aFileName, aSignature: string): Boolean;
var
FS: TFileStream;
begin
//FS := TFileStream.Create(aFileName, fmOpenRead or fmShareDenyWrite); 每次重复写,写的次数多
FS := TFileStream.Create(aFileName, fmOpenRead); //只写一次
try
Result := VerifyStream(FS, aSignature);
finally
FS.Destroy();
end;
end;

const
Signature = 'CRC TEST12 ';


procedure TForm1.btnVerifyClick(Sender: TObject);
begin
if not VerifyFile(Edit1.Text, Signature) then
raise Exception.Create( 'The file is not signatured ');


ShowMessage( 'ok ');
ShowMessage( Signature);
end;

procedure TForm1.btnSignatureClick(Sender: TObject);
begin
SignatureFile(Edit1.Text, Signature);

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Edit1.Text := OpenDialog1.FileName;

end;

end.


...全文
47 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
haitao 2010-11-08
  • 打赏
  • 举报
回复
好像是这个意思。。。。。。。
gobiz 2010-11-08
  • 打赏
  • 举报
回复
//const
// Signature = 'CRC TEST12 ';

procedure TForm1.btnVerifyClick(Sender: TObject);
begin
if not VerifyFile(Edit1.Text, Edit2.Text) then
raise Exception.Create('The file is not signatured ');
ShowMessage('ok');
ShowMessage(Edit2.Text);
end;

procedure TForm1.btnSignatureClick(Sender: TObject);
begin
SignatureFile(Edit1.Text, Edit2.Text);
end;
gobiz 2010-11-08
  • 打赏
  • 举报
回复
没明白问题的意思,你把所有需要使用Signature的地方都用Edit2.Text替换不行吗?

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧