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

📄 atviewer.pas

📁 ATViewer is a component for Delphi/C++Builder, which allows to view files of various types. There is
💻 PAS
📖 第 1 页 / 共 5 页
字号:

    Show;
    if CanSetFocus then
      SetFocus;
  end;
end;

procedure TATViewer.LoadRTF;
begin
  FreeData;
  if FFileName = '' then Exit;

  InitEdit;
  if Assigned(FEdit) then
    with FEdit do
    begin
      //work around RichEdit bug, reset font
      Font.Name := 'Webdings';
      Font.Size := 8;
      Font.Color := clWhite;
      Font := GetTextFont;

      //RichEdit bug: WordWrap assignment must be after Font assignment, or font will be broken
      Color := FTextColor;
      WordWrap := FTextWrap;
      BorderStyle := FBorderStyleInner;
      
      try
        try
          DoCursorHours;
          RE_LoadFile(FEdit, FFileName, 0, 0);
        finally
          DoCursorDefault;
        end;
      except
        MsgError(SFormatW(MsgViewerErrCannotLoadFile, [FFileName]));
      end;

      if Assigned(OnSelectionChange) then
        OnSelectionChange(Self);
    
      Show;
      if CanSetFocus then
        SetFocus;
    end;
end;

procedure TATViewer.LoadWeb;
begin
  FreeData;
  if FFileName = '' then Exit;
  InitWeb;
  if Assigned(FBrowser) then
    try
      if WebBrowserSafe then
        if FBorderStyleInner = bsNone then
          WB_Set3DBorderStyle(FBrowser, FBorderStyleInner <> bsNone);
      FBrowser.Show;
      {$ifdef OFFLINE}
      WB_SetGlobalOffline(FWebOffline);
      {$endif}
      WB_NavigateFilename(FBrowser, FFileName, FWebWaitForNavigate);
    except
    end;
end;

procedure TATViewer.SetMode(AValue: TATViewerMode);
begin
  DoFileUnload;

  FMode := AValue;
  HideAll;

  if FFileName <> '' then
  begin
    case FMode of
      vmodeText,
      vmodeBinary,
      vmodeHex,
      vmodeUnicode:
        LoadBinary;
      vmodeRTF:
        LoadRTF;
      vmodeMedia:
        LoadMedia;
      vmodeWeb:
        LoadWeb;
      {$ifdef WLX}
      vmodeWLX:
        LoadWLX;
      {$endif}
    end;

    DoFileLoad;
  end;
end;

procedure TATViewer.SetMediaMode(AValue: TATViewerMediaMode);
begin
  if FMediaMode <> AValue then
  begin
    FreeData;
    //FreeMedia; //FreeMedia commented: causes strange AV
    FMediaMode := AValue;
  end;
end;

function TATViewer.GetTextEncoding: TATEncoding;
begin
  case FMode of
    vmodeText,
    vmodeBinary,
    vmodeHex,
    vmodeUnicode:
      FTextEncoding := FBinHex.TextEncoding;
  end;
  Result := FTextEncoding;
end;

procedure TATViewer.SetTextEncoding(AValue: TATEncoding);
begin
  if FTextEncoding <> AValue then
  begin
    FTextEncoding := AValue;

    case FMode of
      vmodeText,
      vmodeBinary,
      vmodeHex,
      vmodeUnicode:
        FBinHex.TextEncoding := FTextEncoding;

      {$ifdef WLX}
      vmodeWLX:
        SendWLXParams;
      {$endif}
    end;
  end;
end;

procedure TATViewer.SetTextWrap(AValue: Boolean);
begin
  if FTextWrap <> AValue then
  begin
    FTextWrap := AValue;

    FBinHex.TextWrap := FTextWrap;

    if Assigned(FEdit) then
      FEdit.WordWrap := FTextWrap;

    {$ifdef WLX}
    if FMode = vmodeWLX then
      SendWLXParams;
    {$endif}
  end;
end;

function TATViewer.GetTextWidth: Integer;
begin
  Result := FBinHex.TextWidth;
end;

function TATViewer.GetTextWidthHex: Integer;
begin
  Result := FBinHex.TextWidthHex;
end;

function TATViewer.GetTextWidthFit: Boolean;
begin
  Result := FBinHex.TextWidthFit;
end;

function TATViewer.GetTextWidthFitHex: Boolean;
begin
  Result := FBinHex.TextWidthFitHex;
end;

function TATViewer.GetTextWidthFitUHex: Boolean;
begin
  Result := FBinHex.TextWidthFitUHex;
end;

function TATViewer.GetTextOemSpecial: Boolean;
begin
  Result := FBinHex.TextOemSpecial;
end;

function TATViewer.GetTextGutter: Boolean;
begin
  Result := FBinHex.TextGutter;
end;

function TATViewer.GetTextGutterWidth: Integer;
begin
  Result := FBinHex.TextGutterWidth;
end;

function TATViewer.GetTextNonPrintable: Boolean;
begin
  Result := FBinHex.TextNonPrintable;
end;

procedure TATViewer.SetTextWidth(AValue: Integer);
begin
  FBinHex.TextWidth := AValue;
end;

procedure TATViewer.SetTextWidthHex(AValue: Integer);
begin
  FBinHex.TextWidthHex := AValue;
end;

procedure TATViewer.SetTextWidthFit(AValue: Boolean);
begin
  FBinHex.TextWidthFit := AValue;
end;

procedure TATViewer.SetTextWidthFitHex(AValue: Boolean);
begin
  FBinHex.TextWidthFitHex := AValue;
end;

procedure TATViewer.SetTextWidthFitUHex(AValue: Boolean);
begin
  FBinHex.TextWidthFitUHex := AValue;
end;

procedure TATViewer.SetTextOemSpecial(AValue: Boolean);
begin
  FBinHex.TextOemSpecial := AValue;
end;

procedure TATViewer.SetTextGutter(AValue: Boolean);
begin
  FBinHex.TextGutter:= AValue;
end;

procedure TATViewer.SetTextGutterWidth(AValue: Integer);
begin
  FBinHex.TextGutterWidth:= AValue;
end;

procedure TATViewer.SetTextNonPrintable(AValue: Boolean);
begin
  FBinHex.TextNonPrintable:= AValue;
end;

procedure TATViewer.SetSearchIndentVert(AValue: Integer);
const
  cMaxIndent = 80;
begin
  if FSearchIndentVert <> AValue then
  begin
    FSearchIndentVert := AValue;
    ILimitMin(FSearchIndentVert, 0);
    ILimitMax(FSearchIndentVert, cMaxIndent);
    FBinHex.TextSearchIndentVert := FSearchIndentVert;
  end;
end;

procedure TATViewer.SetSearchIndentHorz(AValue: Integer);
const
  cMaxIndent = 80;
begin
  if FSearchIndentHorz <> AValue then
  begin
    FSearchIndentHorz := AValue;
    ILimitMin(FSearchIndentHorz, 0);
    ILimitMax(FSearchIndentHorz, cMaxIndent);
    FBinHex.TextSearchIndentHorz := FSearchIndentHorz;
  end;
end;

procedure TATViewer.SetMediaPosition;
begin
  {$ifdef MEDIA_PLAYER}
  if (FMediaMode = vmmodeMCI) and Assigned(FMedia) then
    with FMediaBar do
      Width := Self.Width - Left;
  {$endif}

  {$ifdef MEDIA_WMP64}
  if (FMediaMode = vmmodeWMP64) and Assigned(FWMP6) then
    try
      with FWMP6 do 
        (IDispatch(OleObject) as IOleInPlaceObject).SetObjectRects(BoundsRect, Rect(0, 0, 32767, 32767)); 
    except
    end;
  {$endif}

  {$ifdef MEDIA_WMP9}
  if (FMediaMode = vmmodeWMP9) and Assigned(FWMP9) then
    try
      with FWMP9 do 
        (IDispatch(OleObject) as IOleInPlaceObject).SetObjectRects(BoundsRect, Rect(0, 0, 32767, 32767)); 
    except
    end;
  {$endif}
end;

procedure TATViewer.SetMediaFit(AValue: Boolean);
begin
  if GetMediaFit <> AValue then
  begin
    FMediaFit := AValue;
    case FMode of
      vmodeMedia:
        begin
          if Assigned(FImageBox) then
            FImageBox.ImageFitToWindow := FMediaFit;

          {$ifdef MEDIA_WMP64}
          if (FMediaMode = vmmodeWMP64) and Assigned(FWMP6) then
            SetMediaFit_WMP6(FWMP6);
          {$endif}

          {$ifdef MEDIA_WMP9}
          if (FMediaMode = vmmodeWMP9) and Assigned(FWMP9) then
            SetMediaFit_WMP9(FWMP9);
          {$endif}
        end;

      {$ifdef WLX}
      vmodeWLX:
        SendWLXParams;
      {$endif}
    end;
  end;
end;

procedure TATViewer.SetMediaFitOnlyBig(AValue: Boolean);
begin
  if GetMediaFitOnlyBig <> AValue then
  begin
    FMediaFitOnlyBig := AValue;

    case FMode of
      vmodeMedia:
        if Assigned(FImageBox) then
          FImageBox.ImageFitOnlyBig := FMediaFitOnlyBig;

      {$ifdef WLX}
      vmodeWLX:
        SendWLXParams;
      {$endif}
    end;
  end;
end;

procedure TATViewer.SetMediaCenter(AValue: Boolean);
begin
  if GetMediaCenter <> AValue then
  begin
    FMediaCenter := AValue;

    case FMode of 
      vmodeMedia:
        if Assigned(FImageBox) then
          FImageBox.ImageCenter := FMediaCenter;

      {$ifdef WLX}
      vmodeWLX:
        SendWLXParams;
      {$endif}
    end;
  end;
end;

{$ifdef OFFLINE}
procedure TATViewer.SetWebOffline(AValue: Boolean);
begin
  if FWebOffline <> AValue then
  begin
    FWebOffline := AValue;
    if Assigned(FBrowser) then
    begin
      WB_SetGlobalOffline(FWebOffline);
      if (FMode = vmodeWeb) and (FBrowser.Visible) then
        WB_NavigateFilename(FBrowser, FFileName, FWebWaitForNavigate);
    end;
  end;
end;
{$endif}

procedure TATViewer.SetTextColor(AValue: TColor);
begin
  if FTextColor <> AValue then
  begin
    FTextColor := AValue;
    FBinHex.Color := FTextColor;
    if Assigned(FEdit) then
      FEdit.Color := FTextColor;
  end;
end;

function TATViewer.GetTextFont: TFont;
begin
  Result := FBinHex.Font;
end;

procedure TATViewer.SetTextFont(AValue: TFont);
begin
  FBinHex.Font := AValue;

  if Assigned(FEdit) then
    FEdit.Font := AValue;
end;

function TATViewer.GetTextFontOEM: TFont;
begin
  Result := FBinHex.FontOEM;
end;

procedure TATViewer.SetTextFontOEM(AValue: TFont);
begin
  FBinHex.FontOEM := AValue;
end;

function TATViewer.GetTextFontFooter: TFont;
begin
  Result := FBinHex.FontFooter;
end;

procedure TATViewer.SetTextFontFooter(AValue: TFont);
begin
  FBinHex.FontFooter := AValue;
end;

function TATViewer.GetTextColorHex: TColor;
begin
  Result := FBinHex.TextColorHex;
end;

function TATViewer.GetTextColorHex2: TColor;
begin
  Result := FBinHex.TextColorHex2;
end;

function TATViewer.GetTextColorHexBack: TColor;
begin
  Result := FBinHex.TextColorHexBack;
end;

function TATViewer.GetTextColorLines: TColor;
begin
  Result := FBinHex.TextColorLines;
end;

function TATViewer.GetTextColorError: TColor;
begin
  Result := FBinHex.TextColorError;
end;

function TATViewer.GetTextColorGutter: TColor;
begin
  Result := FBinHex.TextColorGutter;
end;

procedure TATViewer.SetTextColorHex(AValue: TColor);
begin
  FBinHex.TextColorHex := AValue;
end;

procedure TATViewer.SetTextColorHex2(AValue: TColor);
begin
  FBinHex.TextColorHex2 := AValue;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -