📄 gateset.pas
字号:
unit GateSet;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, Buttons;
type
TFrmGateSetting = class(TForm)
BtnOk: TBitBtn;
BtnClose: TBitBtn;
GroupBox1: TGroupBox;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
CkGate1: TCheckBox;
EdGate1: TEdit;
CkGate2: TCheckBox;
EdGate2: TEdit;
CkGate3: TCheckBox;
EdGate3: TEdit;
CkGate4: TCheckBox;
EdGate4: TEdit;
CkGate5: TCheckBox;
EdGate5: TEdit;
CkGate6: TCheckBox;
EdGate6: TEdit;
CkGate7: TCheckBox;
EdGate7: TEdit;
CkGate8: TCheckBox;
EdGate8: TEdit;
CkGate9: TCheckBox;
EdGate9: TEdit;
CkGate10: TCheckBox;
EdGate10: TEdit;
GroupBox2: TGroupBox;
EdPublicAddr: TEdit;
Label4: TLabel;
Label3: TLabel;
EdPrivateAddr: TEdit;
GroupBox3: TGroupBox;
CbGateList: TComboBox;
Label2: TLabel;
Label1: TLabel;
CbServerList: TComboBox;
EdTitle: TEdit;
BtnChangeTitle: TSpeedButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure CbGateListChange(Sender: TObject);
procedure BtnOkClick(Sender: TObject);
procedure BtnChangeTitleClick(Sender: TObject);
procedure CbServerListChange(Sender: TObject);
private
EdGate: array[0..9] of TEdit;
CkGate: array[0..9] of TCheckBox;
procedure RefRouteList();
{ Private declarations }
public
function Open(): boolean;
{ Public declarations }
end;
var
FrmGateSetting: TFrmGateSetting;
implementation
uses LSShare, HUtil32;
{$R *.DFM}
//00464B28
procedure TFrmGateSetting.FormCreate(Sender: TObject);
begin
EdGate[0] := EdGate1;
EdGate[1] := EdGate2;
EdGate[2] := EdGate3;
EdGate[3] := EdGate4;
EdGate[4] := EdGate5;
EdGate[5] := EdGate6;
EdGate[6] := EdGate7;
EdGate[7] := EdGate8;
EdGate[8] := EdGate9;
EdGate[9] := EdGate10;
CkGate[0] := CkGate1;
CkGate[1] := CkGate2;
CkGate[2] := CkGate3;
CkGate[3] := CkGate4;
CkGate[4] := CkGate5;
CkGate[5] := CkGate6;
CkGate[6] := CkGate7;
CkGate[7] := CkGate8;
CkGate[8] := CkGate9;
CkGate[9] := CkGate10;
end;
procedure TFrmGateSetting.FormDestroy(Sender: TObject);
begin
end;
//00464EEC
procedure TFrmGateSetting.CbGateListChange(Sender: TObject);
var
I: integer;
nGateIdx: integer;
nSelTitlIdx: integer;
nSelRouteIdx: integer;
nSelServerIdx: integer;
sTitle: string;
sServerName: string;
Config: pTConfig;
begin
Config := @g_Config;
nSelServerIdx := CbServerList.ItemIndex;
if nSelServerIdx < 0 then exit;
sServerName := CbServerList.Items.Strings[nSelServerIdx];
nSelTitlIdx := CbGateList.ItemIndex;
if nSelTitlIdx < 0 then exit;
sTitle := CbGateList.Items.Strings[nSelTitlIdx];
EdTitle.Text := sTitle;
nSelRouteIdx := -1;
for I := Low(Config.GateRoute) to High(Config.GateRoute) do begin
if Config.GateRoute[I].sTitle = sTitle then begin
nSelRouteIdx := I;
break;
end;
end;
if nSelRouteIdx < 0 then exit;
EdPrivateAddr.Text := Config.GateRoute[nSelRouteIdx].sRemoteAddr;
EdPublicAddr.Text := Config.GateRoute[nSelRouteIdx].sPublicAddr;
nGateIdx := 0;
while (True) do begin
if Config.GateRoute[nSelRouteIdx].Gate[nGateIdx].sIPaddr <> '' then begin
EdGate[nGateIdx].Text :=
Config.GateRoute[nSelRouteIdx].Gate[nGateIdx].sIPaddr + ':' +
IntToStr(Config.GateRoute[nSelRouteIdx].Gate[nGateIdx].nPort);
end else
EdGate[nGateIdx].Text := '';
CkGate[nGateIdx].Checked :=
Config.GateRoute[nSelRouteIdx].Gate[nGateIdx].boEnable;
Inc(nGateIdx);
if nGateIdx >= 10 then break;
end;
end;
//00465118
procedure TFrmGateSetting.BtnOkClick(Sender: TObject);
var
nGateIdx: integer;
nTitleIdx: integer;
nRouteIdx: integer;
sTitle: string;
sIPaddr: string;
sPort: string;
sGateAddr: string;
Config: pTConfig;
begin
Config := @g_Config;
nTitleIdx := CbGateList.ItemIndex;
if nTitleIdx < 0 then exit;
nGateIdx := 0;
while (True) do begin
sGateAddr := Trim(EdGate[nGateIdx].Text);
if sGateAddr <> '' then begin
sPort := GetValidStr3(sGateAddr, sIPaddr, [':']);
end;
if (sIPaddr = '') or (Str_ToInt(sPort, 0) = 0) then begin
Beep;
exit;
end;
Inc(nGateIdx);
if nGateIdx >= 10 then break;
end;
sTitle := CbGateList.Items.Strings[nTitleIdx];
nRouteIdx := -1;
nGateIdx := 0;
while (True) do begin
if Config.GateRoute[nGateIdx].sTitle = sTitle then begin
nRouteIdx := nGateIdx;
break;
end;
Inc(nGateIdx);
if nGateIdx >= 59 then break;
end;
if nRouteIdx < 0 then exit;
Config.GateRoute[nRouteIdx].sRemoteAddr := EdPrivateAddr.Text;
Config.GateRoute[nRouteIdx].sPublicAddr := EdPublicAddr.Text;
nGateIdx := 0;
while (True) do begin
sPort := GetValidStr3(Trim(EdGate[nGateIdx].Text), sIPaddr, [':']);
if sIPaddr <> '' then begin
Config.GateRoute[nRouteIdx].Gate[nGateIdx].sIPaddr := sIPaddr;
Config.GateRoute[nRouteIdx].Gate[nGateIdx].nPort := Str_ToInt(sPort, 0);
Config.GateRoute[nRouteIdx].Gate[nGateIdx].boEnable := CkGate[nGateIdx].Checked;
end else begin
Config.GateRoute[nRouteIdx].Gate[nGateIdx].sIPaddr := '';
Config.GateRoute[nRouteIdx].Gate[nGateIdx].nPort := 0;
Config.GateRoute[nRouteIdx].Gate[nGateIdx].boEnable := False;
end;
Inc(nGateIdx);
if nGateIdx >= 10 then break;
end;
SaveGateConfig(Config);
end;
//004653B8
procedure TFrmGateSetting.BtnChangeTitleClick(Sender: TObject);
var
nTitleIdx: integer;
sTitle: string;
sEdTitle: string;
Config: pTConfig;
begin
Config := @g_Config;
nTitleIdx := CbGateList.ItemIndex;
if nTitleIdx < 0 then exit;
sEdTitle := Trim(EdTitle.Text);
sTitle := ReplaceChar(sEdTitle, ' ', '_');
CbGateList.Items.Strings[nTitleIdx] := sTitle;
Config.GateRoute[nTitleIdx].sTitle := sTitle;
CbGateList.ItemIndex := nTitleIdx;
end;
//00464DEC
procedure TFrmGateSetting.CbServerListChange(Sender: TObject);
var
I: integer;
nSelIdx: integer;
sServerName: string;
Config: pTConfig;
begin
Config := @g_Config;
nSelIdx := CbServerList.ItemIndex;
if nSelIdx < 0 then exit;
sServerName := CbServerList.Items.Strings[nSelIdx];
CbGateList.Clear;
for I := 0 to Config.nRouteCount - 1 do begin
if Config.GateRoute[I].sServerName = sServerName then
CbGateList.Items.Add(Config.GateRoute[I].sTitle);
end;
CbGateList.ItemIndex := 0;
CbGateListChange(Self);
end;
procedure TFrmGateSetting.RefRouteList;
var
I, II: integer;
boAdded: boolean;
Config: pTConfig;
begin
Config := @g_Config;
if Config.nRouteCount <= 0 then exit;
CbServerList.Clear;
for I := 0 to Config.nRouteCount - 1 do begin
boAdded := True;
for II := 0 to CbServerList.Items.Count - 1 do begin
if Config.GateRoute[I].sServerName = CbServerList.Items.Strings[II] then
boAdded := False;
end;
if boAdded then CbServerList.Items.Add(Config.GateRoute[I].sServerName);
end;
CbServerList.ItemIndex := 0;
CbServerListChange(Self);
end;
//00464CB0
function TFrmGateSetting.Open(): boolean;
begin
RefRouteList();
Result := False;
if Self.ShowModal = mrOk then Result := True;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -