demounit.pas
来自「查看html文件的控件」· PAS 代码 · 共 914 行 · 第 1/2 页
PAS
914 行
{$ifdef ver140}
{$warn Symbol_Platform Off}
{$endif}
{$ifdef ver150}
{$warn Symbol_Platform Off}
{$Define UseXpMan}
{$endif}
{$ifdef ver170}
{$warn Symbol_Platform Off}
{$Define UseXpMan}
{$endif}
unit demounit;
{A program to demonstrate the ThtmlViewer component}
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, ExtCtrls, Menus, Htmlview, StdCtrls,
Clipbrd, HTMLsubs, ShellAPI, MMSystem, MPlayer, ComCtrls,
{$ifdef UseXpMan} XpMan, {$endif} Gauges;
const
MaxHistories = 6; {size of History list}
type
TForm1 = class(TForm)
OpenDialog: TOpenDialog;
MainMenu: TMainMenu;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
File1: TMenuItem;
Open: TMenuItem;
options1: TMenuItem;
ShowImages: TMenuItem;
Fonts: TMenuItem;
Edit1: TEdit;
ReloadButton: TButton;
BackButton: TButton;
FwdButton: TButton;
HistoryMenuItem: TMenuItem;
Exit1: TMenuItem;
PrintDialog: TPrintDialog;
About1: TMenuItem;
Edit2: TMenuItem;
Find1: TMenuItem;
FindDialog: TFindDialog;
Viewer: THTMLViewer;
CopyItem: TMenuItem;
N2: TMenuItem;
SelectAllItem: TMenuItem;
OpenTextFile: TMenuItem;
OpenImageFile: TMenuItem;
MediaPlayer: TMediaPlayer;
PopupMenu: TPopupMenu;
CopyImageToClipboard: TMenuItem;
Viewimage: TMenuItem;
N3: TMenuItem;
OpenInNewWindow: TMenuItem;
MetaTimer: TTimer;
Print1: TMenuItem;
Printpreview: TMenuItem;
Timer1: TTimer;
ProgressBar: TProgressBar;
procedure OpenFileClick(Sender: TObject);
procedure HotSpotChange(Sender: TObject; const URL: string);
procedure HotSpotClick(Sender: TObject; const URL: string;
var Handled: boolean);
procedure ShowImagesClick(Sender: TObject);
procedure ReloadButtonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FwdBackClick(Sender: TObject);
procedure HistoryClick(Sender: TObject);
procedure HistoryChange(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure FontColorsClick(Sender: TObject);
procedure Print1Click(Sender: TObject);
procedure About1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure SubmitEvent(Sender: TObject; Const AnAction, Target, EncType, Method: String;
Results: TStringList);
procedure Find1Click(Sender: TObject);
procedure FindDialogFind(Sender: TObject);
procedure ProcessingHandler(Sender: TObject; ProcessingOn: Boolean);
procedure CopyItemClick(Sender: TObject);
procedure Edit2Click(Sender: TObject);
procedure SelectAllItemClick(Sender: TObject);
procedure OpenTextFileClick(Sender: TObject);
procedure OpenImageFileClick(Sender: TObject);
procedure MediaPlayerNotify(Sender: TObject);
procedure SoundRequest(Sender: TObject; const SRC: String;
Loop: Integer; Terminate: Boolean);
procedure CopyImageToClipboardClick(Sender: TObject);
procedure ObjectClick(Sender, Obj: TObject; const OnClick: String);
procedure ViewimageClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ViewerInclude(Sender: TObject; const Command: String;
Params: TStrings; var S: string);
procedure RightClick(Sender: TObject;
Parameters: TRightClickParameters);
procedure OpenInNewWindowClick(Sender: TObject);
procedure MetaTimerTimer(Sender: TObject);
procedure MetaRefreshEvent(Sender: TObject; Delay: Integer;
const URL: String);
procedure PrintpreviewClick(Sender: TObject);
procedure ViewerMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Timer1Timer(Sender: TObject);
procedure ViewerProgress(Sender: TObject; Stage: TProgressStage;
PercentDone: Integer);
procedure ViewerPrintHTMLFooter(Sender: TObject; HFViewer: THTMLViewer;
NumPage: Integer; LastPage: Boolean; var XL, XR: Integer;
var StopPrinting: Boolean);
procedure ViewerPrintHTMLHeader(Sender: TObject; HFViewer: THTMLViewer;
NumPage: Integer; LastPage: Boolean; var XL, XR: Integer;
var StopPrinting: Boolean);
private
{ Private declarations }
Histories: array[0..MaxHistories-1] of TMenuItem;
MediaCount: integer;
FoundObject: TImageObj;
NewWindowFile: string;
NextFile, PresentFile: string;
TimerCount: integer;
OldTitle: string;
HintWindow: THintWindow;
HintVisible: boolean;
procedure wmDropFiles(var Message: TMessage); message wm_DropFiles;
procedure CloseAll;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
PreviewForm, HTMLun2, HTMLabt, Submit, ImgForm, FontDlg;
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
I: integer;
begin
if Screen.Width <= 640 then
Position := poDefault; {keeps form on screen better}
OpenDialog.InitialDir := ExtractFilePath(ParamStr(0));
Caption := 'HTML Demo, Version '+HTMLAbt.Version;
ShowImages.Checked := Viewer.ViewImages;
Viewer.HistoryMaxCount := MaxHistories; {defines size of history list}
for I := 0 to MaxHistories-1 do
begin {create the MenuItems for the history list}
Histories[I] := TMenuItem.Create(HistoryMenuItem);
HistoryMenuItem.Insert(I, Histories[I]);
with Histories[I] do
begin
Visible := False;
OnClick := HistoryClick;
Tag := I;
end;
end;
DragAcceptFiles(Handle, True);
HintWindow := THintWindow.Create(Self);
HintWindow.Color := $C0FFFF;
end;
procedure TForm1.FormShow(Sender: TObject);
var
S: string;
I: integer;
begin
if (ParamCount >= 1) then
begin {Parameter is file to load}
S := CmdLine;
I := Pos('" ', S);
if I > 0 then
Delete(S, 1, I+1) {delete EXE name in quotes}
else Delete(S, 1, Length(ParamStr(0))); {in case no quote marks}
I := Pos('"', S);
while I > 0 do {remove any quotes from parameter}
begin
Delete(S, I, 1);
I := Pos('"', S);
end;
Viewer.LoadFromFile(HtmlToDos(Trim(S)));
end;
end;
procedure TForm1.OpenFileClick(Sender: TObject);
begin
if Viewer.CurrentFile <> '' then
OpenDialog.InitialDir := ExtractFilePath(Viewer.CurrentFile);
if OpenDialog.Execute then
begin
Update;
Viewer.LoadFromFile(OpenDialog.Filename);
Caption := Viewer.DocumentTitle;
end;
end;
procedure TForm1.HotSpotChange(Sender: TObject; const URL: string);
{mouse moved over or away from a hot spot. Change the status line}
var
Caption: string;
begin
Caption := '';
if URL <> '' then
Caption := Caption+'URL: '+URL+' ';
if Viewer.TitleAttr <> '' then
Caption := Caption+'Title: '+Viewer.TitleAttr;
Panel1.Caption := Caption;
end;
procedure TForm1.HotSpotClick(Sender: TObject; const URL: string;
var Handled: boolean);
{This routine handles what happens when a hot spot is clicked. The assumption
is made that DOS filenames are being used. .EXE, .WAV, .MID, and .AVI files are
handled here, but other file types could be easily added.
If the URL is handled here, set Handled to True. If not handled here, set it
to False and ThtmlViewer will handle it.}
const
snd_Async = $0001; { play asynchronously }
var
PC: array[0..255] of char;
S, Params: string[255];
Ext: string[5];
ID: string;
I, J, K: integer;
begin
Handled := False;
{The following looks for a link of the form, "IDExpand_XXX". This is interpreted
as meaning a block with an ID="XXXPlus" or ID="XXXMinus" attribute should
have its Display property toggled.
}
I := Pos('IDEXPAND_', Uppercase(URL));
if I=1 then
begin
ID := Copy(URL, 10, Length(URL)-9);
Viewer.IDDisplay[ID+'Plus'] := not Viewer.IDDisplay[ID+'Plus'];
Viewer.IDDisplay[ID+'Minus'] := not Viewer.IDDisplay[ID+'Minus'];
Viewer.Reformat;
Handled := True;
Exit;
end;
I := Pos(':', URL);
J := Pos('FILE:', UpperCase(URL));
if (I <= 2) or (J > 0) then
begin {apparently the URL is a filename}
S := URL;
K := Pos(' ', S); {look for parameters}
if K = 0 then K := Pos('?', S); {could be '?x,y' , etc}
if K > 0 then
begin
Params := Copy(S, K+1, 255); {save any parameters}
S[0] := chr(K-1); {truncate S}
end
else Params := '';
S := Viewer.HTMLExpandFileName(S);
Ext := Uppercase(ExtractFileExt(S));
if Ext = '.WAV' then
begin
Handled := True;
sndPlaySound(StrPCopy(PC, S), snd_ASync);
end
else if Ext = '.EXE' then
begin
Handled := True;
WinExec(StrPCopy(PC, S+' '+Params), sw_Show);
end
else if (Ext = '.MID') or (Ext = '.AVI') then
begin
Handled := True;
WinExec(StrPCopy(PC, 'MPlayer.exe /play /close '+S), sw_Show);
end;
{else ignore other extensions}
Edit1.Text := URL;
Exit;
end;
I := Pos('MAILTO:', UpperCase(URL));
J := Pos('HTTP:', UpperCase(URL));
if (I > 0) or (J > 0) then
begin
ShellExecute(0, nil, pchar(URL), nil, nil, SW_SHOWNORMAL);
Handled := True;
Exit;
end;
Edit1.Text := URL; {other protocall}
end;
procedure TForm1.ShowImagesClick(Sender: TObject);
{The Show Images menu item was clicked}
begin
With Viewer do
begin
ViewImages := not ViewImages;
(Sender as TMenuItem).Checked := ViewImages;
end;
end;
procedure TForm1.ReloadButtonClick(Sender: TObject);
{the Reload button was clicked}
begin
with Viewer do
begin
ReLoadButton.Enabled := False;
ReLoad;
ReLoadButton.Enabled := CurrentFile <> '';
Viewer.SetFocus;
end;
end;
procedure TForm1.FwdBackClick(Sender: TObject);
{Either the Forward or Back button was clicked}
begin
with Viewer do
begin
if Sender = BackButton then
HistoryIndex := HistoryIndex +1
else
HistoryIndex := HistoryIndex -1;
Self.Caption := DocumentTitle;
end;
end;
procedure TForm1.HistoryChange(Sender: TObject);
{This event occurs when something changes history list}
var
I: integer;
Cap: string[80];
begin
with Sender as ThtmlViewer do
begin
{check to see which buttons are to be enabled}
FwdButton.Enabled := HistoryIndex > 0;
BackButton.Enabled := HistoryIndex < History.Count-1;
{Enable and caption the appropriate history menuitems}
HistoryMenuItem.Visible := History.Count > 0;
for I := 0 to MaxHistories-1 do
with Histories[I] do
if I < History.Count then
Begin
Cap := History.Strings[I];
if TitleHistory[I] <> '' then
Cap := Cap + '--' + TitleHistory[I];
Caption := Cap; {Cap limits string to 80 char}
Visible := True;
Checked := I = HistoryIndex;
end
else Histories[I].Visible := False;
Caption := DocumentTitle; {keep the caption updated}
Viewer.SetFocus;
end;
end;
procedure TForm1.HistoryClick(Sender: TObject);
{A history list menuitem got clicked on}
begin
{Changing the HistoryIndex loads and positions the appropriate document}
Viewer.HistoryIndex := (Sender as TMenuItem).Tag;
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.FontColorsClick(Sender: TObject);
var
FontForm: TFontForm;
begin
FontForm := TFontForm.Create(Self);
try
with FontForm do
begin
FontName := Viewer.DefFontName;
FontColor := Viewer.DefFontColor;
FontSize := Viewer.DefFontSize;
HotSpotColor := Viewer.DefHotSpotColor;
Background := Viewer.DefBackground;
if ShowModal = mrOK then
begin
Viewer.DefFontName := FontName;
Viewer.DefFontColor := FontColor;
Viewer.DefFontSize := FontSize;
Viewer.DefHotSpotColor := HotSpotColor;
Viewer.DefBackground := Background;
ReloadButtonClick(Self); {reload to see how it looks}
end;
end;
finally
FontForm.Free;
end;
end;
procedure TForm1.Print1Click(Sender: TObject);
begin
with PrintDialog do
if Execute then
if PrintRange = prAllPages then
viewer.Print(1, 9999)
else
Viewer.Print(FromPage, ToPage);
end;
procedure TForm1.About1Click(Sender: TObject);
begin
AboutBox := TAboutBox.CreateIt(Self, 'HTMLDemo', 'ThtmlViewer');
try
AboutBox.ShowModal;
finally
AboutBox.Free;
end;
end;
procedure TForm1.SubmitEvent(Sender: TObject; const AnAction, Target, EncType, Method: String;
Results: TStringList);
begin
with SubmitForm do
begin
ActionText.Text := AnAction;
MethodText.Text := Method;
ResultBox.Items := Results;
Results.Free;
Show;
end;
end;
procedure TForm1.Find1Click(Sender: TObject);
begin
FindDialog.Execute;
end;
procedure TForm1.FindDialogFind(Sender: TObject);
begin
with FindDialog do
begin
if not Viewer.FindEx(FindText, frMatchCase in Options, not (frDown in Options)) then
MessageDlg('No further occurances of "'+FindText+'"', mtInformation, [mbOK], 0);
end;
end;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?