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

📄 atviewer.pas

📁 支持版本:Delphi 5-2009, C++Builder 5-2009 ATViewer特性: Text, Binary, Hex, Unicode:所有文件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  FSearchIndentVert := 5;
  FSearchIndentHorz := 5;

  FFocused := False;
  FBorderStyleInner := bsSingle;

  FIsImage := False;
  FIsImageBefore := False;
  FIsImageIView := False;
  FIsImageIJL := False;
  FIsIcon := False;
  FIsMetafile := False;
  FIsMedia := False;

  FImageBPP := 0;
  FImageColor := clDkGray;
  FImageTransparent := False;
  FImageResample:= False;
  FImageKeepPosition := True;
  FImageDrag := True;
  FImageCursor := crDefault;
  FImageDragCursor := crSizeAll;
  FImageError := False;
  FImageErrorMessage := '';
  FImageErrorMessageBox := True;

  //Init event handlers
  OnEnter := Enter;

  //Init objects
  FBinHex := TATBinHex.Create(Self);
  with FBinHex do
  begin
    Width := 1; //To "hide" control initially during text loading
    Height := 1;
    Parent := Self;
    Align := alClient;
    Color := FTextColor;
    OnSelectionChange := TextSelectionChange;
    OnClickURL := TextURLClick;
  end;

  FImageBox := nil;

  FEdit := nil;
  FEditMenuItemCopy := nil;
  FEditMenuItemSelectAll := nil;
  FEditMenuItemSep := nil;
  FEditMenu := nil;

  {$ifdef MEDIA_PLAYER}
  FMedia := nil;
  FMediaPanel := nil;
  FMediaPanel1 := nil;
  FMediaPanel2 := nil;
  FMediaBar := nil;
  FMediaTimer := nil;
  FMediaTimerBusy := False;
  {$endif}

  {$ifdef MEDIA_WMP64}
  FWMP6 := nil;
  FWMP6Controls := True;
  FWMP6Tracker := True;
  {$endif}

  {$ifdef MEDIA_WMP9}
  FWMP9 := nil;
  {$endif}

  FMediaEndTimer := nil;

  FBrowser := nil;

  {$ifdef WLX}
  FPlugins := TWlxPlugins.Create;
  FPluginsHighPriority := True;
  {$endif}

  {$ifdef PRINT}
  FPrintDialog := nil;
  FPageSetupDialog := nil;
  {$endif}

  {$ifdef IVIEW}
  with FIViewIntegration do
  begin
    Enabled := False;
    ExeName := '';
    ExtList := cIViewDefaultExtensions;
    HighPriority := False;
  end;
  FIViewObject := nil;
  {$endif}

  {$ifdef IJL}
  with FIJLIntegration do
  begin
    Enabled := True;
    ExtList := cIJLDefaultExtensions;
  end;
  {$endif}

  //Init events
  FOnMediaPlaybackEnd := nil;
  FOnWebDocumentComplete := nil;
  FOnWebNavigateComplete := nil;
  FOnWebStatusTextChange := nil;
  FOnWebTitleChange := nil;

  FOnFileUnload := nil;
  FOnFileLoad := nil;
  FOnOptionsChange := nil;

  //Hide all
  HideAll;
end;

destructor TATViewer.Destroy;
begin
  FreeData;

  {$ifdef IVIEW}
  if Assigned(FIViewObject) then
    FIViewObject.Free;
  {$endif}

  {$ifdef WLX}
  FPlugins.Free;
  {$endif}

  FreeMedia;

  inherited Destroy;
end;

{$ifdef PRINT}
procedure TATViewer.InitDialogs;
begin
  if not Assigned(FPrintDialog) then
  begin
    FPrintDialog := TPrintDialog.Create(Self);
  end;

  {$ifdef COMPILER_7_UP}
  if not Assigned(FPageSetupDialog) then
  begin
    FPageSetupDialog := TPageSetupDialog.Create(Self);
    FPageSetupDialog.Units := pmMillimeters;
  end;
  {$endif};
end;
{$endif}

procedure TATViewer.InitEdit;
begin
  if not Assigned(FEdit) then
  begin
    FEdit := TRichEditURL.Create(Self);
    with FEdit do
    begin
      Parent := Self;
      Align := alClient;
      ReadOnly := True;
      ScrollBars := ssBoth;
      HideSelection := False;
      OnSelectionChange := TextSelectionChange;
      TRichEditURL(FEdit).OnURLClick := TextURLClick;
    end;

    FEditMenuItemCopy := TMenuItem.Create(Self);
    with FEditMenuItemCopy do
    begin
      Caption := 'Copy';
      OnClick := EditMenuItemCopyClick;
    end;

    FEditMenuItemSelectAll := TMenuItem.Create(Self);
    with FEditMenuItemSelectAll do
    begin
      Caption := 'Select all';
      OnClick := EditMenuItemSelectAllClick;
    end;

    FEditMenuItemSep := TMenuItem.Create(Self);
    with FEditMenuItemSep do
    begin
      Caption := '-';
    end;

    FEditMenu := TPopupMenu.Create(Self);
    with FEditMenu do
    begin
      Items.Add(FEditMenuItemCopy);
      Items.Add(FEditMenuItemSep);
      Items.Add(FEditMenuItemSelectAll);
    end;

    FEdit.PopupMenu := FEditMenu;
  end;
end;

procedure TATViewer.InitImage;
begin
  if not Assigned(FImageBox) then
  begin
    FImageBox := TATImageBox.Create(Self);
    with FImageBox do
    begin
      Width := 1; //To "hide" control initially during image loading
      Height := 1;
      Parent := Self;
      Align := alClient;
      OnOptionsChange := Self.FOnOptionsChange;
    end;
  end;
end;

procedure TATViewer.InitMediaEndTimer;
begin
  if not Assigned(FMediaEndTimer) then
  begin
    FMediaEndTimer := TTimer.Create(Self);
    with FMediaEndTimer do
    begin
      Enabled := False;
      Interval := 500;
      OnTimer := MediaEndTimerTimer;
    end;
  end;
end;

procedure TATViewer.InitMedia;
begin
  InitMediaEndTimer;

  {$ifdef MEDIA_PLAYER}
  if (FMediaMode = vmmodeMCI) and not Assigned(FMedia) then
  begin
    FMediaPanel := TPanel.Create(Self);
    with FMediaPanel do
    begin
      Caption := '';
      BevelOuter := bvNone;
      Parent := Self;
      Align := alClient;
    end;

    FMediaPanel1 := TPanel.Create(Self);
    with FMediaPanel1 do
    begin
      Caption := '';
      BevelOuter := bvNone;
      Parent := FMediaPanel;
      Align := alBottom;
      Height := 30;
    end;

    FMediaPanel2 := TPanel.Create(Self);
    with FMediaPanel2 do
    begin
      Caption := '';
      BevelOuter := bvNone;
      Parent := FMediaPanel;
      Align := alClient;
    end;

    FMedia := TMediaPlayer.Create(Self);
    with FMedia do
    begin
      Parent := FMediaPanel1;
      Height := FMediaPanel1.Height;
      Display := FMediaPanel2;
      VisibleButtons := [btPlay, btPause, btStop];
      AutoRewind := True;
      Shareable := False;
      TimeFormat := tfMilliseconds;
      Notify := True;
      OnNotify := MediaNotify;
    end;

    FMediaBar := TTrackBar.Create(Self);
    with FMediaBar do
    begin
      Parent := FMediaPanel1;
      Left := 90;
      Top := 2;
      Width := 100;
      Height := FMediaPanel1.Height - 2 * Top;
      PageSize := 10; 
      TickMarks := tmBoth;
      TickStyle := tsNone;
      ThumbLength := 18;
      OnChange := MediaBarChange;
    end;

    FMediaTimer := TTimer.Create(Self);
    with FMediaTimer do
    begin
      OnTimer := MediaTimerTimer;
    end;
  end;
  {$endif}

  {$ifdef MEDIA_WMP64}
  if (FMediaMode = vmmodeWMP64) and not Assigned(FWMP6) then
    try
      FWMP6 := TWMP.Create(Self);
      with FWMP6 do
      begin
        Align := alClient;
        Parent := Self;
        //Parent assignment must be after Align assignment!
        AutoStart := False;
        AutoRewind := True;
        OnPlayStateChange := PlayStateChange_WMP6;
      end;
    except
      MsgError(Format(MsgViewerErrInitControl, ['Windows Media Player 6.4 ActiveX']));
    end;
  {$endif}

  {$ifdef MEDIA_WMP9}
  if (FMediaMode = vmmodeWMP9) and not Assigned(FWMP9) then
    try
      FWMP9 := TWMP9.Create(Self);
      with FWMP9 do
      begin
        Align := alClient;
        Parent := Self;
        //Parent assignment must be after Align assignment!
        Settings.AutoStart := False;
        OnPlayStateChange := PlayStateChange_WMP9;
      end;
    except
      MsgError(Format(MsgViewerErrInitControl, ['Windows Media Player 9 ActiveX']));
    end;
  {$endif}

  HideMedia;
end;

procedure TATViewer.InitWeb;
begin
  if not Assigned(FBrowser) then
  begin
    FBrowser := TWebBrowser.Create(Self);
    with FBrowser do
    begin
      TControl(FBrowser).Parent := Self;
      Align := alClient;
      Silent := True;
      //Workaround for WebBrowser bug: it first opens BMP files
      //in a new window:
      Navigate('about:blank');
      OnDocumentComplete := WebBrowserDocumentComplete;
      OnNavigateComplete2 := WebBrowserNavigateComplete2;
      OnStatusTextChange := WebBrowserStatusTextChange;
      OnTitleChange := WebBrowserTitleChange;
      {$ifdef IE4X}
      OnFileDownload := WebBrowserFileDownload;
      {$endif}
    end;
    HideWeb;
  end;
end;

procedure TATViewer.FreeMedia;
begin
  {$ifdef MEDIA_PLAYER}
  if Assigned(FMedia) then
  begin
    FMediaTimer.Free;
    FMediaBar.Free;
    FMedia.Free;
    FMediaPanel1.Free;
    FMediaPanel2.Free;
    FMediaPanel.Free;

    FMediaTimer := nil;
    FMediaBar := nil;
    FMedia := nil;
    FMediaPanel1 := nil;
    FMediaPanel2 := nil;
    FMediaPanel := nil;
  end;
  {$endif}
    
  {$ifdef MEDIA_WMP64}
  if Assigned(FWMP6) then
  begin
    FWMP6.Parent := nil;
    FWMP6.Free;
    FWMP6 := nil;
  end;
  {$endif}

  {$ifdef MEDIA_WMP9}
  if Assigned(FWMP9) then
  begin
    FWMP9.Parent := nil;
    FWMP9.Free;
    FWMP9 := nil;
  end;
  {$endif}
end;

procedure TATViewer.HideAll;
var
  IsEmpty, IsImage: Boolean;
begin
  IsEmpty := (FFileName = '');
  IsImage := (FFileName <> '') and SFileExtensionMatch(FFileName, ActualExtImages);

  //Hide Edit/BinHex/Browser controls when different mode is set
  if IsEmpty or not (FMode in [vmodeText, vmodeBinary, vmodeHex, vmodeUnicode]) then
    FBinHex.Hide;

  if IsEmpty or (FMode <> vmodeRTF) then
    HideEdit;

  if IsEmpty or (FMode <> vmodeWeb) then
    HideWeb;

  //Hide image control when non-image is to be loaded
  if IsEmpty or (FMode <> vmodeMedia) or (not IsImage) then
    HideImage;

  //Hide media control when non-media is to be loaded
  if IsEmpty or (FMode <> vmodeMedia) or IsImage then
    HideMedia;

  //Hide plugins when different mode is set
  {$ifdef WLX}
  if IsEmpty or (FMode <> vmodeWLX) then
    HideWLX;
  {$endif}
end;

procedure TATViewer.HideMedia;

⌨️ 快捷键说明

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