首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

TMemo控件的有关问题

2012-04-05 
TMemo控件的问题Delphi(Pascal) codeunit Unit1interfaceusesWindows, Messages, SysUtils, Variants, Cl

TMemo控件的问题

Delphi(Pascal) code
unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls;type  TForm1 = class(TForm)    Edit1: TEdit;    Edit2: TEdit;    Edit3: TEdit;    Button1: TButton;    Button2: TButton;    Memo1: TMemo;    Button3: TButton;    Button4: TButton;    procedure Button1Click(Sender: TObject);    procedure Button2Click(Sender: TObject);    procedure Button3Click(Sender: TObject);    procedure Button4Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;var  Form1: TForm1;implementation{$R *.dfm} function EncryptString(Source, Key: string): string;// 对字符串加密(Source:源 Key:密匙)var KeyLen: integer; KeyPos: integer; Offset: integer; Dest: string; SrcPos: integer; SrcAsc: integer; Range: integer;begin KeyLen := Length(Key); if KeyLen = 0 then Key := 'delphi'; KeyPos := 0; Range := 256; randomize; Offset := random(Range); Dest := format('%1.2x', [Offset]); for SrcPos := 1 to Length(Source) do begin SrcAsc := (Ord(Source[SrcPos]) + Offset) mod 255; if KeyPos < KeyLen then KeyPos := KeyPos + 1 else KeyPos := 1; SrcAsc := SrcAsc xor Ord(Key[KeyPos]); Dest := Dest + format('%1.2x', [SrcAsc]); Offset := SrcAsc; end; result := Dest;end; function UnEncryptString(Source, Key: string): string;// 对字符串解密(Src:源 Key:密匙)var KeyLen: integer; KeyPos: integer; Offset: integer; Dest: string; SrcPos: integer; SrcAsc: integer; TmpSrcAsc: integer;begin KeyLen := Length(Key); if KeyLen = 0 then Key := 'delphi'; KeyPos := 0; Offset := strtoint('$' + copy(Source, 1, 2)); SrcPos := 3; repeat SrcAsc := strtoint('$' + copy(Source, SrcPos, 2)); if KeyPos < KeyLen then KeyPos := KeyPos + 1 else KeyPos := 1; TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]); if TmpSrcAsc <= Offset then TmpSrcAsc := 255 + TmpSrcAsc - Offset else TmpSrcAsc := TmpSrcAsc - Offset; Dest := Dest + chr(TmpSrcAsc); Offset := SrcAsc; SrcPos := SrcPos + 2; until SrcPos >= Length(Source); result := Dest;end;procedure TForm1.Button1Click(Sender: TObject);begin   edit2.Text := EncryptString(edit1.Text,'1');end;procedure TForm1.Button2Click(Sender: TObject);begin   edit3.Text := UnEncryptString(edit2.Text,'1');end;procedure TForm1.Button3Click(Sender: TObject);begin  Memo1.Lines.Clear;  Memo1.Lines.Add(EncryptString(edit1.Text,'1'));  Memo1.Lines.SaveToFile('c:\1.txt');  edit2.Text := Memo1.Text;end;procedure TForm1.Button4Click(Sender: TObject);begin  Memo1.Lines.Clear;  Memo1.Lines.LoadFromFile('c:\1.txt');  edit3.Text := UnEncryptString(Memo1.Text,'1');end;end.

在网上找了一个加密解密的函数
1.如果直接加密文本到文本框,然后再把文本框内容解密是可以的

2.但是如果把加密后的内容通过Memo存入到文件中,再将文件里的内容解密就会报错 
'$' is not a valid integer value 

我看过了通过1方法和通过2方法加密的结果是一样的

[解决办法]
SaveToFile函数会在后面加上回车和换行符,所以txt文件中内容会多出2个字符
解密时要把后面的回车换行去掉就行了

热点排行