So there I was, thinking today, what can I do to once more save future time...
and I realised that something I would really like is to have a component that
can wrap around ipro and implement a simple file-based html viewer with image
support, jpeg loading and such built-in.
Easy right, after all just that exists in the example shipped for it, so all I
have to do is plagiarise the code a bit and create a component out of it.
So I created my component and added the bits I wanted, mostly just a property
for specifying an html file and a method for showing it.
And it works, even jpg's load fine.
But immediately after loading it throws an exception, ignore the exception and
it throws it again, and again and again (no idea is given of WHAT exception).
The frequency and timing does however suggest that the exception is thrown
during the onpaint event (though I never TOUCHED that :p )
Anyway, here is the code:
unit simple_html;
{A simple file based html viewer component based on ippro with image viewing
added}
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics,IPHtml,lazjpeg;
type
TSimpleIpHtml = class(TIpHtml)
public
property OnGetImageX;
end;
TSimpleHTML = class(TIpHtmlPanel)
private
FHtmlFile : String;
FNewHTML: TSimpleIpHtml;
public
{ public declarations }
procedure HTMLGetImageX(Sender: TIpHtmlNode; const URL: string; var
Picture: TPicture);
procedure ShowFile; {Loads a designtime set html file}
destructor destroy; override;
published
{ published properties }
constructor create(AOwner: TComponent); override;
property HTMLFile : String Write FHtmlFile;
end;
procedure register;
implementation
{TSImpleHTML}
procedure Register;
begin
RegisterComponents('OLPack',[TSimpleHTML]);
end;
procedure TSimpleHTML.HTMLGetImageX(Sender: TIpHtmlNode; const URL: string;
var Picture: TPicture);
var
PicCreated: boolean;
begin
try
if FileExists(URL) then begin
PicCreated := False;
if Picture=nil then begin
Picture:=TPicture.Create;
PicCreated := True;
end;
Picture.LoadFromFile(URL);
end;
except
if PicCreated then
Picture.Free;
Picture := nil;
end;
end;
procedure TSimpleHTML.ShowFile;
var
fs: TFileStream;
begin
if FileExists(FHtmlFile) then
try
fs:=TFileStream.Create(FHtmlFile,fmOpenRead);
try
FNewHTML.OnGetImageX:[EMAIL PROTECTED];
FNewHTML.LoadFromStream(fs);
finally
fs.Free;
end;
SetHtml(FNewHTML);
except
on E: Exception do begin
Writeln('Unable to open HTML file',FHtmlFile);
end;
end;
end;
destructor TSimpleHTML.destroy;
Begin
inherited;
end;
constructor TSimpleHTML.create(AOwner: TComponent);
begin
FNewHTML:=TSimpleIpHtml.Create;
inherited;
end;
end.
---------------
Here is the relevant parts from a simple demo program I did to test it:
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
OpenDialog1: TOpenDialog;
SimpleHTML1: TSimpleHTML;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure TForm1.Button2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Edit1.Text := OpenDialog1.Filename;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SimpleHTML1.HTMLFile := Edit1.Text;
SimpleHTML1.ShowFile;
end;
-----------------------
Anybody here familiar enough with ipro to know what I am doing wrong ?
Ciao
A.J.
--
A.J. Venter
Chief Software Architect
OpenLab International
www.getopenlab.com
www.silentcoder.co.za
+27 82 726 5103
_________________________________________________________________
To unsubscribe: mail [EMAIL PROTECTED] with
"unsubscribe" as the Subject
archives at http://www.lazarus.freepascal.org/mailarchives