📄 searchhexfrm.pas
字号:
unit SearchHexFrm;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
StdCtrls, Search;
type
TSearchHexData = record
Para: TSearchHexPara;
end;
TSearchHexForm = class(TForm)
Label1: TLabel;
TextComboBox: TComboBox;
GroupBox1: TGroupBox;
Label2: TLabel;
Label3: TLabel;
UseWildCheckBox: TCheckBox;
WildCharEdit: TEdit;
WildCountEdit: TEdit;
GroupBox2: TGroupBox;
OnlyBlockCheckBox: TCheckBox;
AllDocCheckBox: TCheckBox;
SearchButton: TButton;
CancelButton: TButton;
HelpButton: TButton;
DefaultButton: TButton;
procedure SearchButtonClick(Sender: TObject);
procedure CancelButtonClick(Sender: TObject);
procedure HelpButtonClick(Sender: TObject);
procedure DefaultButtonClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
function CheckValid: Boolean;
public
{ Public declarations }
procedure GetData(var Value: TSearchHexData);
end;
var
SearchHexForm: TSearchHexForm;
function ShowSearchHexForm(var Value: TSearchHexData): Boolean;
implementation
{$R *.DFM}
uses
Radix;
function ShowSearchHexForm(var Value: TSearchHexData): Boolean;
begin
Result := (SearchHexForm.ShowModal = mrOk);
if Result then SearchHexForm.GetData(Value);
end;
procedure TSearchHexForm.GetData(var Value: TSearchHexData);
var
WildValue: Cardinal;
begin
Value.Para.Text := TextComboBox.Text;
Value.Para.OnlyBlock := OnlyBlockCheckBox.Checked;
Value.Para.AllDoc := AllDocCheckBox.Checked;
Value.Para.UseWild := UseWildCheckBox.Checked;
StrToIntAsHex(WildValue, WildCharEdit.Text);
Value.Para.WildChar := Chr(WildValue);
Value.Para.WildCount := StrToIntDef(WildCountEdit.Text, 1);
end;
function TSearchHexForm.CheckValid: Boolean;
begin
Result := True;
if TextComboBox.Text = '' then
begin
Result := False;
TextComboBox.SetFocus;
Exit;
end;
if not IsHexStr(TextComboBox.Text) then
begin
Result := False;
MessageBox(Handle, '十六进制串非法。示范:FFAB1200DE。', '提示', 48);
TextComboBox.SetFocus;
Exit;
end;
if Length(TextComboBox.Text) = 1 then
begin
TextComboBox.Text := '0' + TextComboBox.Text;
end;
if not IsHexStr(WildCharEdit.Text) then
begin
Result := False;
MessageBox(Handle, '通配符非法。', '提示', 48);
WildCharEdit.SetFocus;
Exit;
end;
if not IsDecStr(WildCountEdit.Text) then
begin
Result := False;
MessageBox(Handle, '通配符代表字节数非法。', '提示', 48);
WildCountEdit.SetFocus;
Exit;
end;
end;
procedure TSearchHexForm.SearchButtonClick(Sender: TObject);
begin
if CheckValid then
begin
TextComboBox.Items.Insert(0, TextComboBox.Text);
ModalResult := mrOk;
end;
end;
procedure TSearchHexForm.CancelButtonClick(Sender: TObject);
begin
ModalResult := mrCancel;
end;
procedure TSearchHexForm.HelpButtonClick(Sender: TObject);
begin
//
end;
procedure TSearchHexForm.DefaultButtonClick(Sender: TObject);
begin
TextComboBox.Text := '';
OnlyBlockCheckBox.Checked := False;
AllDocCheckBox.Checked := False;
UseWildCheckBox.Checked := False;
WildCharEdit.Text := '3F';
WildCountEdit.Text := '1';
end;
procedure TSearchHexForm.FormActivate(Sender: TObject);
begin
TextComboBox.SetFocus;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -