📄 unit_main.pas
字号:
unit Unit_Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, SUISkinForm, ExtCtrls, SUIForm, StdCtrls, Mask, SUIEdit,
SUIButton, SUIURLLabel, jpeg, SUIImagePanel, SUIDlg, ExtDlgs,
SUISideChannel, SUIPageControl, SUITabControl, SUITitleBar,
SUIComboBox, SUIListBox,SUIThemes,Unit_RcFile, ImgList, ComCtrls,
SUIListView;
type
TExeInfo=packed record
ip:String[15];
Port:integer;
Caption:String[40];
Web:String[40];
ExeName:String[20];
end;
TFrmMain = class(TForm)
suiForm1: TsuiForm;
OpenPictureDialog: TOpenPictureDialog;
suiMessageDialog1: TsuiMessageDialog;
suiImagePanel1: TsuiImagePanel;
suiButton1: TsuiButton;
suiButton2: TsuiButton;
suiButton3: TsuiButton;
suiPageControl1: TsuiPageControl;
suiTabSheet1: TsuiTabSheet;
suiTabSheet2: TsuiTabSheet;
suiImagePanel2: TsuiImagePanel;
Label3: TLabel;
Label8: TLabel;
Label4: TLabel;
Label6: TLabel;
Label1: TLabel;
Label11: TLabel;
Label9: TLabel;
Label10: TLabel;
Edit_ServerName: TsuiEdit;
Edit_ServerPort: TsuiEdit;
Edit_RegSvrPort: TsuiEdit;
Edit_ServerCaption: TsuiEdit;
Edit_ServerIp: TsuiMaskEdit;
Edit_RegSvrIp: TsuiMaskEdit;
Edit_ServerAddres: TsuiEdit;
suiPanel1: TsuiPanel;
List_Server: TsuiListBox;
Bt_Add: TsuiButton;
Bt_Del: TsuiButton;
Bt_Edit: TsuiButton;
Bt_Up: TsuiButton;
Bt_Down: TsuiButton;
Panel1: TPanel;
Image_exe: TImage;
suiButton4: TsuiButton;
suiButton5: TsuiButton;
Label5: TLabel;
Edit_ExeTitle: TsuiEdit;
Combo_ExeType: TsuiComboBox;
Label12: TLabel;
suiTabSheet3: TsuiTabSheet;
suiPanel2: TsuiPanel;
List_UpdateServer: TsuiListBox;
suiImagePanel3: TsuiImagePanel;
suiImagePanel4: TsuiImagePanel;
Label13: TLabel;
Edit_ExeVer: TsuiEdit;
suiPanel3: TsuiPanel;
Label14: TLabel;
Edit_UpdateServerName: TsuiEdit;
Label15: TLabel;
Edit_UpdateServerUrl: TsuiEdit;
Bt_AddUpdate: TsuiButton;
Bt_DelUpdate: TsuiButton;
Bt_EditUpdate: TsuiButton;
suiTitleBar_DEMO: TsuiTitleBar;
Image_Default: TImage;
suiTabSheet4: TsuiTabSheet;
suiPanel4: TsuiPanel;
Edit_notice: TsuiEdit;
List_Notice: TsuiListBox;
suiButton6: TsuiButton;
Label16: TLabel;
Label17: TLabel;
Panel2: TPanel;
Radio1: TRadioButton;
Radio2: TRadioButton;
Radio3: TRadioButton;
Radio4: TRadioButton;
Radio5: TRadioButton;
Radio6: TRadioButton;
Radio7: TRadioButton;
suiButton7: TsuiButton;
suiButton8: TsuiButton;
Edit_ChekVer: TsuiEdit;
Label18: TLabel;
Edit_ExeName: TsuiEdit;
Label2: TLabel;
Check_Exit: TsuiCheckBox;
Edit_Mir3ExitUrl: TsuiEdit;
ImageList1: TImageList;
List_CMList: TListBox;
procedure suiButton1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
Function AddtoFile(NewFile:String):Boolean;
procedure suiButton3Click(Sender: TObject);
procedure ReadExe(DestMemo:TMemoryStream);
procedure Edit_ServerIpExit(Sender: TObject);
procedure Edit_RegSvrIpExit(Sender: TObject);
procedure Bt_AddClick(Sender: TObject);
procedure Bt_DelClick(Sender: TObject);
procedure Bt_EditClick(Sender: TObject);
procedure Bt_UpClick(Sender: TObject);
procedure Bt_DownClick(Sender: TObject);
procedure Combo_ExeTypeChange(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure List_ServerClick(Sender: TObject);
procedure List_ServerKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure suiButton5Click(Sender: TObject);
procedure suiButton4Click(Sender: TObject);
procedure Bt_AddUpdateClick(Sender: TObject);
procedure Bt_DelUpdateClick(Sender: TObject);
procedure Bt_EditUpdateClick(Sender: TObject);
procedure List_UpdateServerClick(Sender: TObject);
procedure List_UpdateServerKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure List_NoticeDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure suiButton6Click(Sender: TObject);
procedure suiButton7Click(Sender: TObject);
procedure suiButton8Click(Sender: TObject);
procedure List_NoticeClick(Sender: TObject);
procedure Check_ExitClick(Sender: TObject);
private
{ Private declarations }
public
procedure Show_Message(text:String;Icon:TsuiIconType);
{ Public declarations }
end;
var
FrmMain: TFrmMain;
ExeStream:TMemoryStream;
Server_Info,Update_Info:TList;
AppPath:String;
implementation
{$R *.dfm}
procedure encodetxttoMemo(sourceMemo:TMemoryStream;key0,key1,key2,key3,keycrc:integer;var DestMemo:TMemoryStream);
type
top_key=record
case integer of
0:(i:integer);
1:(b:array[0..3] of byte);
end;
var
topkey:top_key;
j,k,i:integer;
bufs:array[0..3] of byte;
buf,dbuf:byte;
begin
topkey.i:=sourceMemo.Size;
k:=0;
destmemo.SetSize(topkey.i+8);
bufs[0]:=topkey.b[3] xor key0;
bufs[1]:=topkey.b[2] xor key1;
bufs[2]:=topkey.b[1] xor key2;
bufs[3]:=topkey.b[0] xor key3;
destmemo.Position:=0;
destmemo.Write(bufs,4);
destmemo.Write(k,4);
sourceMemo.Position:=0;
for i:=0 to sourceMemo.Size-1 do
begin
sourceMemo.Read(buf,1);
dbuf:=buf xor (bufs[0]+i) xor (bufs[1]+i) xor (bufs[2]+i) xor (bufs[3]+i);
destmemo.Write(dbuf,1);
k:=k+(dbuf+1)*i;
end;
k:=k xor keycrc;
destmemo.Position:=4;
destmemo.Write(k,4);
DestMemo.Position:=0;
end;
procedure TFrmMain.suiButton1Click(Sender: TObject);
var
Rc:TRcFile;
SourceFileName,NewFileName:String;
ServerIp,RegSvrIp:String;
NoticeMemo,CMlistMemo:TMemoryStream;
i:integer;
begin
for i:=0 to List_CMList.Items.Count-1 do
begin
if copy(List_CMList.Items[i],1,5)='#1412' then List_CMList.Items[i]:='#1412 '+Edit_ChekVer.Text;
if Check_Exit.Checked then if copy(List_CMList.Items[i],1,5)='#1077' then List_CMList.Items[i]:='#1077 '+Edit_Mir3ExitUrl.Text;
end;
NoticeMemo:=TMemoryStream.create;
CMlistMemo:=TMemoryStream.create;
List_Notice.Items.SaveToStream(NoticeMemo);
List_CMList.Items.SaveToStream(CMlistMemo);
ServerIp:=StrToIp(Edit_ServerIp.Text);
RegSvrIp:=StrToIp(Edit_RegSvrIp.Text);
NewFileName:=ExtractFilePath(Application.ExeName)+Edit_ExeName.Text+'.exe';
Rc:=TRcFile.Create;
Rc.FileName:=AppPath+'LoginManger.Rc';
Rc.CreateRc(Edit_ExeTitle.Text,Edit_ExeVer.Text,Combo_ExeType.ItemIndex,Server_Info,Update_Info,Image_exe.Picture,NoticeMemo,CMlistMemo);
Rc.Free;
NoticeMemo.Free;
CMlistMemo.Free;
AddtoFile(NewFileName);
suiMessageDialog1.Caption:='系统信息';
suiMessageDialog1.Text:='生成完毕,请发布给玩家使用!';
suiMessageDialog1.IconType:=suiInformation;
suiMessageDialog1.ShowModal;
end;
procedure TFrmMain.FormCreate(Sender: TObject);
var
Rc:TRcFile;
Exe_Title,Exe_Ver:string;
Exe_type:word;
i:integer;
Pic_Memo:TMemoryStream;
NoticeMemo,CMlistMemo:TMemoryStream;
begin
Pic_Memo:=TMemoryStream.Create;
NoticeMemo:=TMemoryStream.create;
CMlistMemo:=TMemoryStream.create;
Combo_ExeType.ItemIndex:=0;
Server_Info:=TList.Create;
Update_Info:=TList.Create;
AppPath:=ExtractFilePath(Application.ExeName);
Rc:=TRcFile.Create;
Rc.FileName:=AppPath+'LoginManger.Rc';
if Rc.ReadRc(Exe_Title,Exe_Ver,Exe_type,Server_Info,Update_Info,Pic_Memo,NoticeMemo,CMlistMemo) then
begin
Edit_ExeTitle.Text:=Exe_Title;
Edit_ExeVer.Text:=Exe_Ver;
Combo_ExeType.ItemIndex:=Exe_type;
case Combo_ExeType.ItemIndex of
0:suiTitleBar_DEMO.UIStyle:=MacOS;
1:suiTitleBar_DEMO.UIStyle:=WinXP;
2:suiTitleBar_DEMO.UIStyle:=Protein;
3:suiTitleBar_DEMO.UIStyle:=FromThemeFile;
4:suiTitleBar_DEMO.UIStyle:=BlueGlass;
end;
suiTitleBar_DEMO.Buttons.Items[0].ButtonType:=suiClose;
suiTitleBar_DEMO.Buttons.Items[0].ButtonType:=suiCustom;
Pic_Memo.Position:=0;
Image_exe.Picture.Graphic.LoadFromStream(Pic_Memo);
NoticeMemo.Position:=0;
List_Notice.Items.LoadFromStream(NoticeMemo);
end;
Pic_Memo.Free;
NoticeMemo.Free;
CMlistMemo.Free;
for i:=0 to Server_Info.Count-1 do
begin
List_Server.Items.Add(PServerInfo(Server_Info[i]).ServerName);
end;
for i:=0 to Update_Info.Count-1 do
begin
List_UpdateServer.Items.Add(PUpdateInfo(Update_Info[i]).ServerName);
end;
suiPageControl1.ActivePageIndex:=0;
end;
Function TFrmMain.AddtoFile(NewFile:String):Boolean;
var
Source_Memo,Rc_Memo,New_Memo:TMemoryStream;
SourceSize,RcSize,NewFileSize:integer;
Rc:TRcFile;
NoticeMemo,CMlistMemo:TMemoryStream;
E_NoticeMemo,E_CMlistMemo:TMemoryStream;
begin
NoticeMemo:=TMemoryStream.create;
CMlistMemo:=TMemoryStream.create;
E_NoticeMemo:=TMemoryStream.create;
E_CMlistMemo:=TMemoryStream.create;
List_Notice.Items.SaveToStream(NoticeMemo);
List_CMList.Items.SaveToStream(CMlistMemo);
encodetxttoMemo(NoticeMemo,$F0,$39,$AB,$8E,$9FDE1A93,E_NoticeMemo);
encodetxttoMemo(CMlistMemo,$F0,$39,$AB,$8E,$9FDE1A93,E_CMlistMemo);
NoticeMemo.Free;
CMlistMemo.Free;
try
Rc_Memo:=TMemoryStream.create;
New_Memo:=TMemoryStream.create;
Rc:=TRcFile.Create;
Rc.FileName:=AppPath+'LoginManger.Rc';
Source_Memo:=TMemoryStream.create;
Rc.EncodetoMem(Edit_ExeTitle.Text,Edit_ExeVer.Text,Combo_ExeType.ItemIndex,Server_Info,Update_Info,Image_exe.Picture,E_NoticeMemo,E_CMlistMemo,Rc_Memo);
Rc.Free;
ReadExe(Source_Memo);
SourceSize:=Source_Memo.Size;
RcSize:=Rc_Memo.Size;
NewFileSize:=SourceSize+RcSize;//计算资源大小,并写入辅程尾部
Source_Memo.Position:=0;
Rc_Memo.Position:=0;
New_Memo.SetSize(NewFileSize);
New_Memo.Position:=0;
New_Memo.CopyFrom(Source_Memo,SourceSize);
New_Memo.Seek(sourceSize,soFromBeginning);
New_Memo.CopyFrom(Rc_Memo,RcSize);
New_Memo.SaveToFile(NewFile);
Source_Memo.Free;
Rc_Memo.Free;
New_Memo.Free;
E_NoticeMemo.Free;
E_CMlistMemo.Free;
except
Result:=False;
Exit;
end;
Result:=True;
end;
procedure TFrmMain.suiButton3Click(Sender: TObject);
begin
Close;
end;
procedure TFrmMain.ReadExe(DestMemo:TMemoryStream);
var
Source:TMemoryStream;
SourceSize,exeSize:integer;
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -