⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 childfrm.pas

📁 === === === MiniHex 1.61 源程序说明 ============================== “$(MiniHex)Source”目录中的所有
💻 PAS
📖 第 1 页 / 共 4 页
字号:
    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 + -