📄 childfrm.pas
字号:
HexEdit.ModifyData(Offset, S[1], Count, True);
end;
var
FormData: TConvCryptData;
StartOffset, Count: Integer;
begin
if ShowConvCryptForm(FormData) then
begin
if FormData.OnlyBlock then
begin
if not CheckSelExists then Exit;
StartOffset := HexEdit.SelStart;
Count := HexEdit.SelLength;
end else
begin
StartOffset := 0;
Count := HexEdit.DataSize;
end;
TransCryptRange(StartOffset, Count, FormData.Key, FormData.Encrypt);
ShowStatusInfo;
FillDataInspector;
end;
end;
procedure TChildForm.EditConvCaseItemClick(Sender: TObject);
procedure TransCaseRange(Offset, Count: Integer; LowerToUpper: Boolean);
var
CurPtr: PChar;
I: Integer;
S: string;
begin
CurPtr := HexEdit.DataAddr + Offset;
SetLength(S, Count);
Move(CurPtr^, S[1], Count);
for I := 1 to Count do
begin
if LowerToUpper then
begin
if (S[I] <= 'z') and (S[I] >= 'a') then Dec(S[I], 32);
end else
if (S[I] <= 'Z') and (S[I] >= 'A') then Inc(S[I], 32);
end;
HexEdit.ModifyData(Offset, S[1], Count, True);
end;
var
FormData: TConvCaseData;
StartOffset, Count: Integer;
begin
if ShowConvCaseForm(FormData) then
begin
if FormData.OnlyBlock then
begin
if not CheckSelExists then Exit;
StartOffset := HexEdit.SelStart;
Count := HexEdit.SelLength;
end else
begin
StartOffset := 0;
Count := HexEdit.DataSize;
end;
TransCaseRange(StartOffset, Count, FormData.LowerToUpper);
ShowStatusInfo;
FillDataInspector;
end;
end;
procedure TChildForm.SearchTextItemClick(Sender: TObject);
var
FormData: TSearchTextData;
begin
if ShowSearchTextForm(FormData) then
begin
SearchMgr.SearchKind := skSearchText;
SearchMgr.SearchTextData := FormData;
SearchMgr.SearchFirst;
end;
end;
procedure TChildForm.SearchHexItemClick(Sender: TObject);
var
FormData: TSearchHexData;
begin
if ShowSearchHexForm(FormData) then
begin
SearchMgr.SearchKind := skSearchHex;
SearchMgr.SearchHexData := FormData;
SearchMgr.SearchFirst;
end;
end;
procedure TChildForm.SearchIntegerItemClick(Sender: TObject);
var
FormData: TSearchIntData;
begin
if ShowSearchIntForm(FormData) then
begin
SearchMgr.SearchKind := skSearchInt;
SearchMgr.SearchIntData := FormData;
SearchMgr.SearchFirst;
end;
end;
procedure TChildForm.SearchFloatItemClick(Sender: TObject);
var
FormData: TSearchFloatData;
begin
if ShowSearchFloatForm(FormData) then
begin
SearchMgr.SearchKind := skSearchFloat;
SearchMgr.SearchFloatData := FormData;
SearchMgr.SearchFirst;
end;
end;
procedure TChildForm.SearchReplaceTextItemClick(Sender: TObject);
var
FormData: TReplaceTextData;
R: Integer;
begin
R := ShowReplaceTextForm(FormData);
if R = mrOk then
begin
SearchMgr.SearchKind := skReplaceText;
SearchMgr.ReplaceTextData := FormData;
SearchMgr.ReplaceFirst;
end;
if R = mrReplaceAll then
begin
SearchMgr.SearchKind := skReplaceText;
SearchMgr.ReplaceTextData := FormData;
SearchMgr.ReplaceAll;
end;
end;
procedure TChildForm.SearchReplaceHexItemClick(Sender: TObject);
var
FormData: TReplaceHexData;
R: Integer;
begin
R := ShowReplaceHexForm(FormData);
if R = mrOk then
begin
SearchMgr.SearchKind := skReplaceHex;
SearchMgr.ReplaceHexData := FormData;
SearchMgr.ReplaceFirst;
end;
if R = mrReplaceAll then
begin
SearchMgr.SearchKind := skReplaceHex;
SearchMgr.ReplaceHexData := FormData;
SearchMgr.ReplaceAll;
end;
end;
procedure TChildForm.SearchNextItemClick(Sender: TObject);
begin
case SearchMgr.SearchKind of
skNone:
SearchTextItemClick(nil);
skSearchText, skSearchHex, skSearchInt, skSearchFloat:
SearchMgr.SearchNext;
skReplaceText, skReplaceHex:
SearchMgr.ReplaceNext;
end;
end;
procedure TChildForm.SearchFirstItemClick(Sender: TObject);
begin
case SearchMgr.SearchKind of
skNone:
SearchTextItemClick(nil);
skSearchText, skSearchHex, skSearchInt, skSearchFloat:
SearchMgr.SearchFirst;
skReplaceText, skReplaceHex:
SearchMgr.ReplaceFirst;
end;
end;
procedure TChildForm.SearchCompareItemClick(Sender: TObject);
var
Data: TDataCompData;
begin
if ShowDataCompForm(Data) then
begin
MainForm.ArrangeForCompare(Data.Para.Form1, Data.Para.Form2);
CompareMgr.Para := Data.Para;
CompareMgr.CompareFirst;
end;
end;
procedure TChildForm.SearchCompareNextItemClick(Sender: TObject);
begin
if not CompareMgr.FormExists then
SearchCompareItemClick(nil)
else
CompareMgr.CompareNext;
end;
procedure TChildForm.HexEditCaretMove(Sender: TObject);
begin
ShowStatusInfo;
FillDataInspector;
end;
procedure TChildForm.HexEditSelectionChange(Sender: TObject);
begin
ShowStatusInfo;
AdjustClipboardEnabled;
AdjustBlockEnabled;
end;
procedure TChildForm.HexEditChange(Sender: TObject);
begin
AdjustUndoRedoEnabled;
end;
procedure TChildForm.HexEditDblClick(Sender: TObject);
begin
case TDblClickAct(OptMgr.Values[SOptDblClickAct]) of
daNumBaseConv:
ShowNumBaseConvForm(Integer((HexEdit.DataAddr + HexEdit.Offset)^));
daBkmkMgr:
ShowBkmkMgrForm;
end;
end;
procedure TChildForm.StatusBarMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
P: TPoint;
W0, W1, W2, W3: Integer;
begin
P := StatusBar.ClientToScreen(Point(X, Y));
W0 := StatusBar.Panels[0].Width;
W1 := StatusBar.Panels[1].Width;
W2 := StatusBar.Panels[2].Width;
W3 := StatusBar.Panels[3].Width;
if (X >= 0) and (X <= W0) then
LengthPopupMenu.Popup(P.x, P.y)
else if X <= W0 + W1 then
OffsetPopupMenu.Popup(P.x, P.y)
else if X <= W0 + W1 + W2 then
BlockInfoPopupMenu.Popup(P.x, P.y)
else if X <= W0 + W1 + W2 + W3 then
CurValuePopupMenu.Popup(P.x, P.y);
end;
procedure TChildForm.StatusBarResize(Sender: TObject);
var
Index, I, W: Integer;
begin
Index := StatusBar.Panels.Count - 2;
W := 0;
for I := 0 to StatusBar.Panels.Count - 1 do
begin
if I <> Index then
Inc(W, StatusBar.Panels[I].Width);
end;
StatusBar.Panels[Index].Width := StatusBar.ClientWidth - W;
end;
procedure TChildForm.CurValPopup8sItemClick(Sender: TObject);
begin
SetCurValueType(vt8s);
end;
procedure TChildForm.CurValPopup8uItemClick(Sender: TObject);
begin
SetCurValueType(vt8u);
end;
procedure TChildForm.CurValPopup16sItemClick(Sender: TObject);
begin
SetCurValueType(vt16s);
end;
procedure TChildForm.CurValPopup16uItemClick(Sender: TObject);
begin
SetCurValueType(vt16u);
end;
procedure TChildForm.CurValPopup32sItemClick(Sender: TObject);
begin
SetCurValueType(vt32s);
end;
procedure TChildForm.CurValPopup32uItemClick(Sender: TObject);
begin
SetCurValueType(vt32u);
end;
procedure TChildForm.CurValPopupSingleItemClick(Sender: TObject);
begin
SetCurValueType(vtSingle);
end;
procedure TChildForm.CurValPopupDoubleItemClick(Sender: TObject);
begin
SetCurValueType(vtDouble);
end;
procedure TChildForm.LenPopupDecItemClick(Sender: TObject);
begin
SetLengthNumBase(raDec);
end;
procedure TChildForm.LenPopupHexItemClick(Sender: TObject);
begin
SetLengthNumBase(raHex);
end;
procedure TChildForm.OffPopupDecItemClick(Sender: TObject);
begin
SetOffsetNumBase(raDec);
end;
procedure TChildForm.OffPopupHexItemClick(Sender: TObject);
begin
SetOffsetNumBase(raHex);
end;
procedure TChildForm.BlkPopupDecItemClick(Sender: TObject);
begin
SetBlockInfoNumBase(raDec);
end;
procedure TChildForm.BlkPopupHexItemClick(Sender: TObject);
begin
SetBlockInfoNumBase(raHex);
end;
procedure TChildForm.BlockInfoPopupMenuPopup(Sender: TObject);
var
Len: Integer;
begin
Len := HexEdit.SelLength;
if Len < 0 then Len := 0;
BlkPopupBlockLenItem.Caption := '块长:' + IntToStr(Len);
end;
procedure TChildForm.PosGotoFirstItemClick(Sender: TObject);
begin
HexEdit.MoveCaret(mcStart);
end;
procedure TChildForm.PosGotoEndItemClick(Sender: TObject);
begin
HexEdit.MoveCaret(mcEnd);
end;
procedure TChildForm.PosGotoBlockStartItemClick(Sender: TObject);
begin
HexEdit.MoveCaret(mcSelStart);
end;
procedure TChildForm.PosGotoBlockEndItemClick(Sender: TObject);
begin
HexEdit.MoveCaret(mcSelEnd);
end;
procedure TChildForm.PosGotoLineFirstItemClick(Sender: TObject);
begin
HexEdit.MoveCaret(mcLineStart);
end;
procedure TChildForm.PosGotoLineEndItemClick(Sender: TObject);
begin
HexEdit.MoveCaret(mcLineEnd);
end;
procedure TChildForm.PosDefBkItemClick(Sender: TObject);
begin
HexEdit.SetBookmark((Sender as TMenuItem).Tag);
end;
procedure TChildForm.PosGotoBkItemClick(Sender: TObject);
begin
HexEdit.GotoBookmark((Sender as TMenuItem).Tag);
end;
procedure TChildForm.PosDefBookmarkItemClick(Sender: TObject);
var
I: Integer;
begin
for I := 0 to 9 do
(FindComponent('PosDefBk'+IntToStr(I)+'Item') as TMenuItem).Checked := HexEdit.BookmarkExists(I);
end;
procedure TChildForm.PosGotoBookmarkItemClick(Sender: TObject);
var
I: Integer;
begin
for I := 0 to 9 do
(FindComponent('PosGotoBk'+IntToStr(I)+'Item') as TMenuItem).Checked := HexEdit.BookmarkExists(I);
end;
procedure TChildForm.PopupShowNumBaseItemClick(Sender: TObject);
begin
ShowNumBaseConvForm(Integer((HexEdit.DataAddr + HexEdit.Offset)^));
end;
procedure TChildForm.PopupShowBkmkMgrItemClick(Sender: TObject);
begin
ShowBkmkMgrForm;
end;
initialization
SearchMgr := TSearchMgr.Create;
CompareMgr := TCompareMgr.Create;
finalization
SearchMgr.Free;
CompareMgr.Free;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -