
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2153 8e941d3f-bd1b-0410-a28a-d453659cc2b4
245 lines
6.4 KiB
ObjectPascal
245 lines
6.4 KiB
ObjectPascal
unit viewer_ipro;
|
|
|
|
{$mode delphi}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils,
|
|
//
|
|
fpreadgif, fpimage, fpwritebmp,
|
|
// LCL
|
|
Graphics, Forms, Controls, LCLProc,
|
|
//
|
|
browserviewer,
|
|
IPHtml, Ipfilebroker, IpMsg;
|
|
|
|
type
|
|
{ TMyIpHtmlDataProvider }
|
|
|
|
TMyIpHtmlDataProvider = class(TIpHtmlDataProvider)
|
|
protected
|
|
function DoGetStream(const URL: string): TStream; override;
|
|
end;
|
|
|
|
{ TiProViewer }
|
|
|
|
TiProViewer = class(TBrowserViewer)
|
|
private
|
|
IpHtmlPanel1: TIpHtmlPanel;
|
|
DataProvider1: TMyIpHtmlDataProvider;
|
|
function DataProvider1CanHandle(Sender: TObject; const URL: string
|
|
): Boolean;
|
|
procedure DataProvider1CheckURL(Sender: TObject; const URL: string;
|
|
var Available: Boolean; var ContentType: string);
|
|
procedure DataProvider1GetHtml(Sender: TObject; const URL: string;
|
|
const PostData: TIpFormDataEntity; var Stream: TStream);
|
|
procedure DataProvider1GetImage(Sender: TIpHtmlNode; const URL: string;
|
|
var Picture: TPicture);
|
|
procedure DataProvider1Leave(Sender: TIpHtml);
|
|
procedure DataProvider1ReportReference(Sender: TObject; const URL: string);
|
|
procedure ShowHTML(Src: string);
|
|
public
|
|
procedure CreateViewer(AParent, AOwner: TWinControl); override;
|
|
procedure LoadFromFile(AFilename: string); override;
|
|
// procedure LoadFromURL(AURL: string); override;
|
|
function GetDocumentTitle: string; override;
|
|
procedure SetShowImages(AValue: Boolean); override;
|
|
procedure HandlePageLoaderTerminated(Sender: TObject); override;
|
|
procedure Reload; override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
function TMyIpHtmlDataProvider.DoGetStream(const URL: string): TStream;
|
|
var
|
|
ms: TMemoryStream;
|
|
begin
|
|
Result:=nil;
|
|
DebugLn('TMyIpHtmlDataProvider.DoGetStream '+URL);
|
|
|
|
if URL='fpdoc.css' then begin
|
|
//debugln(['TMyIpHtmlDataProvider.DoGetStream ',FileExists(URL)]);
|
|
ms:=TMemoryStream.Create;
|
|
try
|
|
ms.LoadFromFile(URL);
|
|
ms.Position:=0;
|
|
except
|
|
ms.Free;
|
|
end;
|
|
Result:=ms;
|
|
end;
|
|
end;
|
|
|
|
function TiProViewer.DataProvider1CanHandle(Sender: TObject; const URL: string
|
|
): Boolean;
|
|
begin
|
|
DebugLn('TformBrowser.DataProvider1CanHandle ',URL);
|
|
Result:=True;
|
|
end;
|
|
|
|
procedure TiProViewer.DataProvider1CheckURL(Sender: TObject; const URL: string;
|
|
var Available: Boolean; var ContentType: string);
|
|
begin
|
|
DebugLn('TformBrowser.DataProvider1CheckURL ',URL);
|
|
Available:=True;
|
|
ContentType:='text/html';
|
|
end;
|
|
|
|
procedure TiProViewer.DataProvider1GetHtml(Sender: TObject; const URL: string;
|
|
const PostData: TIpFormDataEntity; var Stream: TStream);
|
|
var
|
|
lStream: TMemoryStream;
|
|
begin
|
|
DebugLn('TformBrowser.DataProvider1GetHtml ',URL);
|
|
{ MyPageLoader.LoadBinaryResource(URL, lStream);
|
|
Stream := lStream;
|
|
lStream.Position := 0;}
|
|
Stream := nil;
|
|
LoadFromURL(URL);
|
|
end;
|
|
|
|
procedure TiProViewer.DataProvider1GetImage(Sender: TIpHtmlNode; const URL: string;
|
|
var Picture: TPicture);
|
|
var
|
|
lStream: TMemoryStream = nil;
|
|
lConvertedStream: TMemoryStream = nil;
|
|
lStr: String;
|
|
//
|
|
image: TFPCustomImage;
|
|
reader: TFPCustomImageReader;
|
|
writer: TFPCustomImageWriter;
|
|
lAbsURL: String;
|
|
begin
|
|
DebugLn('TformBrowser.DataProvider1GetImage URL=', URL);
|
|
|
|
// Corrections of the URL
|
|
if (URL[1] = '/') and (URL[2] = '/') then lAbsURL := 'http:' + URL;
|
|
|
|
DebugLn('TformBrowser.DataProvider1GetImage Corrected URL=', lAbsURL);
|
|
|
|
lStr := ExtractFileExt(lAbsURL);
|
|
if (lStr = '.jpeg') or (lStr = '.jpg') then
|
|
begin
|
|
try
|
|
MyPageLoader.LoadBinaryResource(lAbsURL, lStream);
|
|
lStream.Position := 0;
|
|
Picture := TPicture.Create;
|
|
Picture.Jpeg.LoadFromStream(lStream);
|
|
finally
|
|
lStream.Free
|
|
end;
|
|
end
|
|
else if (lStr = '.gif') then
|
|
begin
|
|
DebugLn('TformBrowser.DataProvider1GetImage Processing GIF');
|
|
try
|
|
MyPageLoader.LoadBinaryResource(lAbsURL, lStream);
|
|
lStream.Position := 0;
|
|
Picture := TPicture.Create;
|
|
Image := TFPMemoryImage.Create(10, 10);
|
|
Reader := TFPReaderGIF.Create;
|
|
Image.LoadFromStream(lStream, Reader);
|
|
Writer := TFPWriterBMP.Create;
|
|
lConvertedStream := TMemoryStream.Create;
|
|
Image.SaveToStream(lConvertedStream, Writer);
|
|
lConvertedStream.Position:=0;
|
|
Picture.Bitmap.LoadFromStream(lConvertedStream);
|
|
finally
|
|
lStream.Free;
|
|
image.Free;
|
|
reader.Free;
|
|
writer.Free;
|
|
lConvertedStream.Free;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
DebugLn('TformBrowser.DataProvider1GetImage Unsupported format: ', lStr);
|
|
Picture := nil;
|
|
Exit;
|
|
end;
|
|
// and (lStr <> '.bmp') and (lStr <> '.png')
|
|
end;
|
|
|
|
procedure TiProViewer.DataProvider1Leave(Sender: TIpHtml);
|
|
begin
|
|
|
|
end;
|
|
|
|
procedure TiProViewer.DataProvider1ReportReference(Sender: TObject; const URL: string
|
|
);
|
|
begin
|
|
//debugln(['TForm1.DataProvider1ReportReference ',URL]);
|
|
end;
|
|
|
|
procedure TiProViewer.ShowHTML(Src: string);
|
|
var
|
|
ss: TStringStream;
|
|
NewHTML: TIpHtml;
|
|
begin
|
|
ss := TStringStream.Create(Src);
|
|
try
|
|
NewHTML := TIpHtml.Create; // Beware: Will be freed automatically by IpHtmlPanel1
|
|
//debugln(['TForm1.ShowHTML BEFORE SETHTML']);
|
|
IpHtmlPanel1.SetHtml(NewHTML);
|
|
//debugln(['TForm1.ShowHTML BEFORE LOADFROMSTREAM']);
|
|
NewHTML.LoadFromStream(ss);
|
|
//if Anchor <> '' then IpHtmlPanel1.MakeAnchorVisible(Anchor);
|
|
finally
|
|
ss.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TiProViewer.CreateViewer(AParent, AOwner: TWinControl);
|
|
begin
|
|
ViewerName := 'Turbo Power iPro HTML viewer written in Pascal';
|
|
|
|
DataProvider1:=TMyIpHtmlDataProvider.Create(AOwner);
|
|
//DataProvider1.Name:='DataProvider1';
|
|
DataProvider1.OnCanHandle:=DataProvider1CanHandle;
|
|
DataProvider1.OnGetHtml:=DataProvider1GetHtml;
|
|
DataProvider1.OnGetImage:=DataProvider1GetImage;
|
|
DataProvider1.OnLeave:=DataProvider1Leave;
|
|
DataProvider1.OnCheckURL:=DataProvider1CheckURL;
|
|
DataProvider1.OnReportReference:=DataProvider1ReportReference;
|
|
|
|
IpHtmlPanel1:=TIpHtmlPanel.Create(AOwner);
|
|
//IpHtmlPanel1.Name:='IpHtmlPanel1';
|
|
IpHtmlPanel1.Parent:=AParent;
|
|
IpHtmlPanel1.Align:=alClient;
|
|
IpHtmlPanel1.DefaultFontSize:=10;
|
|
IpHtmlPanel1.DataProvider:=DataProvider1;
|
|
end;
|
|
|
|
procedure TiProViewer.LoadFromFile(AFilename: string);
|
|
begin
|
|
|
|
end;
|
|
|
|
function TiProViewer.GetDocumentTitle: string;
|
|
begin
|
|
Result:='';
|
|
end;
|
|
|
|
procedure TiProViewer.SetShowImages(AValue: Boolean);
|
|
begin
|
|
|
|
end;
|
|
|
|
procedure TiProViewer.HandlePageLoaderTerminated(Sender: TObject);
|
|
begin
|
|
inherited HandlePageLoaderTerminated(Sender);
|
|
|
|
ShowHTML(MyPageLoader.Contents);
|
|
end;
|
|
|
|
procedure TiProViewer.Reload;
|
|
begin
|
|
end;
|
|
|
|
initialization
|
|
SetBrowserViewerClass(TiProViewer);
|
|
end.
|
|
|