📄 replacehexfrm.pas
字号:
unit ReplaceHexFrm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, HexEdit;
const
mrReplaceAll = 10;
type
TReplaceHexData = record
FromText: string;
ToText: string;
AllDoc: Boolean;
AskRep: Boolean;
Opt: TSearchHexOptions;
end;
TReplaceHexForm = class(TForm)
Label1: TLabel;
FromComboBox: TComboBox;
GroupBox1: TGroupBox;
Label2: TLabel;
Label3: TLabel;
UseWildCheckBox: TCheckBox;
WildCharEdit: TEdit;
WildCountEdit: TEdit;
GroupBox2: TGroupBox;
OnlyBlockCheckBox: TCheckBox;
AllDocCheckBox: TCheckBox;
AskCheckBox: TCheckBox;
ReplaceButton: TButton;
CancelButton: TButton;
HelpButton: TButton;
DefaultButton: TButton;
Label4: TLabel;
ToComboBox: TComboBox;
ReplaceAllButton: TButton;
procedure ReplaceButtonClick(Sender: TObject);
procedure ReplaceAllButtonClick(Sender: TObject);
procedure CancelButtonClick(Sender: TObject);
procedure HelpButtonClick(Sender: TObject);
procedure DefaultButtonClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure UseWildCheckBoxClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
function CheckValid: Boolean;
public
{ Public declarations }
procedure GetData(var Value: TReplaceHexData);
end;
var
ReplaceHexForm: TReplaceHexForm;
function ShowReplaceHexForm(var Value: TReplaceHexData): Integer;
implementation
uses Misc, NumBase;
{$R *.DFM}
function ShowReplaceHexForm(var Value: TReplaceHexData): Integer;
begin
Result := ReplaceHexForm.ShowModal;
if Result <> mrCancel then ReplaceHexForm.GetData(Value);
end;
procedure TReplaceHexForm.GetData(var Value: TReplaceHexData);
var
WildValue: Integer;
begin
Value.FromText := FromComboBox.Text;
Value.ToText := ToComboBox.Text;
Value.AllDoc := AllDocCheckBox.Checked;
Value.AskRep := AskCheckBox.Checked;
Value.Opt.OnlyBlock := OnlyBlockCheckBox.Checked;
Value.Opt.UseWild := UseWildCheckBox.Checked;
StrToIntAsHex(WildValue, WildCharEdit.Text);
Value.Opt.WildChar := Chr(Cardinal(WildValue));
Value.Opt.WildCount := StrToIntDef(WildCountEdit.Text, 1);
end;
function TReplaceHexForm.CheckValid: Boolean;
var
R: Integer;
begin
Result := True;
if FromComboBox.Text = '' then
begin
Result := False;
FromComboBox.SetFocus;
Exit;
end;
if not IsHexStr(FromComboBox.Text) then
begin
Result := False;
MsgBox('十六进制串不正确。示范:FFAB1200DE。');
FromComboBox.SetFocus;
Exit;
end;
if not IsHexStr(ToComboBox.Text) then
begin
Result := False;
MsgBox('十六进制串不正确。示范:FFAB1200DE。');
ToComboBox.SetFocus;
Exit;
end;
if Length(FromComboBox.Text) <> Length(ToComboBox.Text) then
begin
R := MsgBox('查找串和替换串的长度不一致,继续吗?', MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2);
if R = ID_NO then
begin
Result := False;
Exit;
end;
end;
if not IsHexStr(WildCharEdit.Text) then
begin
Result := False;
MsgBox('通配符不正确。');
WildCharEdit.SetFocus;
Exit;
end;
if not IsDecStr(WildCountEdit.Text) then
begin
Result := False;
MsgBox('通配符代表字节数不正确。');
WildCountEdit.SetFocus;
Exit;
end;
end;
procedure TReplaceHexForm.FormCreate(Sender: TObject);
begin
UseWildCheckBoxClick(nil);
end;
procedure TReplaceHexForm.ReplaceButtonClick(Sender: TObject);
begin
if CheckValid then
begin
FromComboBox.Items.Insert(0, FromComboBox.Text);
ToComboBox.Items.Insert(0, ToComboBox.Text);
ModalResult := mrOk;
end;
end;
procedure TReplaceHexForm.ReplaceAllButtonClick(Sender: TObject);
begin
if CheckValid then
begin
FromComboBox.Items.Insert(0, FromComboBox.Text);
ToComboBox.Items.Insert(0, ToComboBox.Text);
ModalResult := mrReplaceAll;
end;
end;
procedure TReplaceHexForm.CancelButtonClick(Sender: TObject);
begin
ModalResult := mrCancel;
end;
procedure TReplaceHexForm.HelpButtonClick(Sender: TObject);
begin
//
end;
procedure TReplaceHexForm.DefaultButtonClick(Sender: TObject);
begin
FromComboBox.Text := '';
ToComboBox.Text := '';
OnlyBlockCheckBox.Checked := False;
AllDocCheckBox.Checked := False;
AskCheckBox.Checked := False;
UseWildCheckBox.Checked := False;
WildCharEdit.Text := '3F';
WildCountEdit.Text := '1';
end;
procedure TReplaceHexForm.FormActivate(Sender: TObject);
begin
FromComboBox.SetFocus;
end;
procedure TReplaceHexForm.UseWildCheckBoxClick(Sender: TObject);
begin
if UseWildCheckBox.Checked then
begin
WildCharEdit.Enabled := True;
WildCountEdit.Enabled := True;
WildCharEdit.Color := clWindow;
WildCountEdit.Color := clWindow;
end else
begin
WildCharEdit.Enabled := False;
WildCountEdit.Enabled := False;
WildCharEdit.Color := clBtnFace;
WildCountEdit.Color := clBtnFace;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -