home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC Expert 29
/
Pce29cd.iso
/
RUNIMAGE
/
DELPHI40
/
DEMOS
/
COOLSTUF
/
MAIN.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1998-06-16
|
7KB
|
286 lines
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Menus, ComCtrls, OleCtrls, Buttons, ToolWin, Isp3,
NMHTML, ActnList, ImgList;
const
CM_HOMEPAGEREQUEST = WM_USER + $1000;
type
TMainForm = class(TForm)
StatusBar1: TStatusBar;
MainMenu1: TMainMenu;
File1: TMenuItem;
Exit1: TMenuItem;
View1: TMenuItem;
DocumentSource1: TMenuItem;
NavigatorImages: TImageList;
NavigatorHotImages: TImageList;
LinksImages: TImageList;
LinksHotImages: TImageList;
CoolBar1: TCoolBar;
ToolBar1: TToolBar;
BackBtn: TToolButton;
ForwardBtn: TToolButton;
StopBtn: TToolButton;
RefreshBtn: TToolButton;
ToolBar2: TToolBar;
ToolButton6: TToolButton;
ToolButton5: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
Animate1: TAnimate;
URLs: TComboBox;
HTML1: THTML;
Help1: TMenuItem;
About1: TMenuItem;
N1: TMenuItem;
Toolbar3: TMenuItem;
Statusbar2: TMenuItem;
Go1: TMenuItem;
Back1: TMenuItem;
Forward1: TMenuItem;
Stop1: TMenuItem;
Refresh1: TMenuItem;
N2: TMenuItem;
ActionList1: TActionList;
BackAction: TAction;
ForwardAction: TAction;
StopAction: TAction;
RefreshAction: TAction;
procedure Exit1Click(Sender: TObject);
procedure About1Click(Sender: TObject);
procedure DocumentSource1Click(Sender: TObject);
procedure StopClick(Sender: TObject);
procedure HTML1BeginRetrieval(Sender: TObject);
procedure HTML1EndRetrieval(Sender: TObject);
procedure URLsKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCreate(Sender: TObject);
procedure LinksClick(Sender: TObject);
procedure RefreshClick(Sender: TObject);
procedure BackClick(Sender: TObject);
procedure ForwardClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure URLsClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Toolbar3Click(Sender: TObject);
procedure Statusbar2Click(Sender: TObject);
procedure HTML1DoRequestDoc(Sender: TObject; const URL: WideString;
Element: HTMLElement; DocInput: DocInput;
var EnableDefault: WordBool);
procedure BackActionUpdate(Sender: TObject);
procedure ForwardActionUpdate(Sender: TObject);
private
HistoryIndex: Integer;
HistoryList: TStringList;
UpdateCombo: Boolean;
procedure FindAddress;
procedure HomePageRequest(var message: tmessage); message CM_HOMEPAGEREQUEST;
end;
var
MainForm: TMainForm;
implementation
uses DocSrc, About;
{$R *.DFM}
procedure TMainForm.Exit1Click(Sender: TObject);
begin
Close;
end;
procedure TMainForm.FindAddress;
begin
HTML1.RequestDoc(URLs.Text);
end;
procedure TMainForm.About1Click(Sender: TObject);
begin
ShowAboutBox;
end;
procedure TMainForm.DocumentSource1Click(Sender: TObject);
begin
with DocSourceFrm do
begin
Show;
Memo1.Lines.Clear;
Memo1.Lines.Add(AdjustLineBreaks(HTML1.SourceText));
Memo1.SelStart := 0;
SendMessage(Memo1.Handle, EM_ScrollCaret, 0, 0);
end;
end;
procedure TMainForm.StopClick(Sender: TObject);
begin
HTML1.Cancel('Cancel');
HTML1EndRetrieval(nil);
end;
procedure TMainForm.HTML1BeginRetrieval(Sender: TObject);
begin
{ Turn the stop button dark red }
StopBtn.ImageIndex := 4;
{ Play the avi from the first frame indefinitely }
Animate1.Active := True;
end;
procedure TMainForm.HTML1EndRetrieval(Sender: TObject);
begin
{ Turn the stop button grey }
StopBtn.ImageIndex := 2;
{ Stop the avi and show the first frame }
Animate1.Active := False;
end;
procedure TMainForm.URLsKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_Return then
begin
UpdateCombo := True;
FindAddress;
end;
end;
procedure TMainForm.URLsClick(Sender: TObject);
begin
UpdateCombo := True;
FindAddress;
end;
procedure TMainForm.LinksClick(Sender: TObject);
begin
if (Sender as TToolButton).Hint = '' then Exit;
URLs.Text := (Sender as TToolButton).Hint;
FindAddress;
end;
procedure TMainForm.RefreshClick(Sender: TObject);
begin
FindAddress;
end;
procedure TMainForm.BackClick(Sender: TObject);
begin
URLs.Text := HistoryList[HistoryIndex - 1];
FindAddress;
end;
procedure TMainForm.ForwardClick(Sender: TObject);
begin
URLs.Text := HistoryList[HistoryIndex + 1];
FindAddress;
end;
procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Shift = [ssAlt] then
if (Key = VK_RIGHT) and ForwardBtn.Enabled then
ForwardBtn.Click
else if (Key = VK_LEFT) and BackBtn.Enabled then
BackBtn.Click;
end;
procedure TMainForm.Toolbar3Click(Sender: TObject);
begin
with Sender as TMenuItem do
begin
Checked := not Checked;
Coolbar1.Visible := Checked;
end;
end;
procedure TMainForm.Statusbar2Click(Sender: TObject);
begin
with Sender as TMenuItem do
begin
Checked := not Checked;
StatusBar1.Visible := Checked;
end;
end;
procedure TMainForm.HomePageRequest(var Message: TMessage);
begin
URLs.Text := 'http://www.inprise.com';
UpdateCombo := True;
FindAddress;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
HistoryIndex := -1;
HistoryList := TStringList.Create;
{ Load the animation from the AVI file in the startup directory. An
alternative to this would be to create a .RES file including the cool.avi
as an AVI resource and use the ResName or ResId properties of Animate1 to
point to it. }
Animate1.FileName := ExtractFilePath(Application.ExeName) + 'cool.avi';
{ Find the home page - needs to be posted because HTML control hasn't been
registered yet. }
PostMessage(Handle, CM_HOMEPAGEREQUEST, 0, 0);
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
HistoryList.Free;
end;
procedure TMainForm.HTML1DoRequestDoc(Sender: TObject;
const URL: WideString; Element: HTMLElement; DocInput: DocInput;
var EnableDefault: WordBool);
var
NewIndex: Integer;
begin
NewIndex := HistoryList.IndexOf(URL);
if NewIndex = -1 then
begin
{ Remove entries in HistoryList between last address and current address }
if (HistoryIndex >= 0) and (HistoryIndex < HistoryList.Count - 1) then
while HistoryList.Count > HistoryIndex do
HistoryList.Delete(HistoryIndex);
HistoryIndex := HistoryList.Add(URL);
end
else
HistoryIndex := NewIndex;
if UpdateCombo then
begin
UpdateCombo := False;
NewIndex := URLs.Items.IndexOf(URL);
if NewIndex = -1 then
URLs.Items.Insert(0, URL)
else
URLs.Items.Move(NewIndex, 0);
end;
URLs.Text := URL;
Statusbar1.Panels[0].Text := URL;
end;
procedure TMainForm.BackActionUpdate(Sender: TObject);
begin
if HistoryList.Count > 0 then
BackAction.Enabled := HistoryIndex > 0
else
BackAction.Enabled := False;
end;
procedure TMainForm.ForwardActionUpdate(Sender: TObject);
begin
if HistoryList.Count > 0 then
ForwardAction.Enabled := HistoryIndex < HistoryList.Count - 1
else
ForwardAction.Enabled := False;
end;
end.