📄 atviewer.pas
字号:
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 + -