问题说明:
把网页内容(webbrowser1中的内容)以流的方式写入数据库中,然后再以流的方式读出来.
问题描述:数据库表中同时有rtf文件流和html文件流.根据表中html标示来判断是rth文件流还是html文件流.
再读文件流的时候,根据是rtf文件流则加载frmrtf窗体,显示rtf文件;
如果是html文件流则加载frmHTML窗体.
出现的问题.
从主窗体如果先读取一个html文件流也就是先加载frmhtml窗体然后再加载一个rtf文件流即使frmrtf窗体加载.然后再加载一个html文件流,就是frmhtml再次加载,那么问题出现了webbrowser1的没有内容空白.若再接着加载另外一个html文件流有正常.
从主窗体另外如果先加载rtf文件,然后再加载html文件则正常.
部分代码如下:
if frmRTF.Visible then frmRTF.Close ;
if not frmHTML.Visible then
begin
frmHTML.Parent:=frmMain.Panel1 ;
URL := 'about:blank';
frmHTML.WebBrowser1.Navigate(URL);
// frmHTML.WebBrowser1.Navigate('about:blank'
frmHTML.Show ;
frmHTML.Visible:=true; ; //浏览器工具栏可用
frmMain.ToolBar3.Enabled :=true;
end;
*****读取html文件流重数据库中
另外再frmHTML关闭的时候没有做任何处理.另外一个问题,如果webbrowser1的内容是直接输入网址打开则可以编辑如果从数据库读入则不能编辑(空白)不能得到HTML代码.
这两个问题可以总共给分500分.解决后另外开贴给分.
把网页内容(webbrowser1中的内容)以流的方式写入数据库中,然后再以流的方式读出来.
问题描述:数据库表中同时有rtf文件流和html文件流.根据表中html标示来判断是rth文件流还是html文件流.
再读文件流的时候,根据是rtf文件流则加载frmrtf窗体,显示rtf文件;
如果是html文件流则加载frmHTML窗体.
出现的问题.
从主窗体如果先读取一个html文件流也就是先加载frmhtml窗体然后再加载一个rtf文件流即使frmrtf窗体加载.然后再加载一个html文件流,就是frmhtml再次加载,那么问题出现了webbrowser1的没有内容空白.若再接着加载另外一个html文件流有正常.
从主窗体另外如果先加载rtf文件,然后再加载html文件则正常.
部分代码如下:
if frmRTF.Visible then frmRTF.Close ;
if not frmHTML.Visible then
begin
frmHTML.Parent:=frmMain.Panel1 ;
URL := 'about:blank';
frmHTML.WebBrowser1.Navigate(URL);
// frmHTML.WebBrowser1.Navigate('about:blank'
frmHTML.Show ;
frmHTML.Visible:=true; ; //浏览器工具栏可用
frmMain.ToolBar3.Enabled :=true;
end;
*****读取html文件流重数据库中
另外再frmHTML关闭的时候没有做任何处理.另外一个问题,如果webbrowser1的内容是直接输入网址打开则可以编辑如果从数据库读入则不能编辑(空白)不能得到HTML代码.
这两个问题可以总共给分500分.解决后另外开贴给分.
解决方案 »
- 今天被老板叼了,出来散一下分
- 模拟发送WM_DROPFILES消息出现异常......
- 如何将一个程序的各个模块拆分成DLL又能保持逻辑上的可访问性
- 关于fastreport的主从报表的打印,小弟是生手,帮帮忙,在线待,只有一天时间了。
- 请教我一步一步设置Dbchart的柱型图,我搞了很多次没成功!?
- 我MM摔伤了,希望她早日恢复!~~~~散分~~~~(四)
- DELPHI程序的入口在什么地方,怎么看啊?
- 谁有CRM软件的原代码,本人急需!! 200分相送
- IndyTCPClient如何接收服务端发送的数据啊
- 与SQL SERVER 长时间连结会出现变慢或死机,如何解决?
- 关于Canvas
- 在程序中怎么才能改系统的IP地址,掩码和默认网关??
var
Ms:TStream;
ps: IPersistStreamInit;
sa: IStream;
URL:string;
begin
Table.TableName :='file';
Table.Filtered :=false;
table.Filter :='DirID=' +intTostr(currID);
// showmessage(table.Filter );
table.Filtered :=true;
try
Table.Open ;
if Table.Recordset.RecordCount >0 then //如果记录存在
begin
if Table.FieldByName('html').AsBoolean=false then
//读取rtf文档
begin
Ms:=Table.CreateBlobStream(Table.FieldByName('FileContent'),bmRead);
if frmHTML.Visible then
begin
frmHTML.Close ;
frmMain.ToolBar3.Enabled :=false;
end;
if not frmRTF.Visible then frmRTF.Visible:=true;
frmRTF.Show;
frmRTF.Visible :=true;
frmRTF.RichEdit21.Lines.LoadFromStream(Ms);
ms.Free ;
//frmHTML.Hide ;
table.Close ;
if frmHTML.Visible then showmessage('HTML is show now');
result:=true;
exit;
end
else //如果是Html文档
begin
Ms:=TStream.create;
Ms:=Table.CreateBlobStream(Table.FieldByName('FileContent'),bmRead);
Ms.Position :=0;
if frmRTF.Visible then frmRTF.Close ;
if not frmHTML.Visible then
begin
frmHTML.Parent:=frmMain.Panel1 ;
URL := 'about:blank';
frmHTML.WebBrowser1.Navigate(URL);
// frmHTML.WebBrowser1.Navigate('about:blank'
frmHTML.Show ;
frmHTML.Visible:=true; ; //浏览器工具栏可用
frmMain.ToolBar3.Enabled :=true;
end;
*****读取html文件流*****
frmHTML.WebBrowser1.Update ;
frmHTML.Update ;
ms.Free ;
Table.Close ;
if frmRTF.Visible then showMEssage('frmRTR is show now');
result:=true;
exit;
end;
end
else
table.Close ;
exit;
result:=false;
except
Table.Close ;
result:=false;
end;
end;
这里的代码就是显示啊不过我没有写出来而已.
另外其实那个问题是内容闪一下变空白而已.
我现在贴完整大代码
如下:
function TFrmMain.LoadFileFormTable(var Table:TAdoTable;pDirID:longint):Boolean;
var
Ms:TStream;
ps: IPersistStreamInit;
sa: IStream;
URL:string;
begin
Table.TableName :='file';
Table.Filtered :=false;
table.Filter :='DirID=' +intTostr(currID);
// showmessage(table.Filter );
table.Filtered :=true;
try
Table.Open ;
if Table.Recordset.RecordCount >0 then //如果记录存在
begin
if Table.FieldByName('html').AsBoolean=false then
//读取rtf文档
begin
Ms:=Table.CreateBlobStream(Table.FieldByName('FileContent'),bmRead);
if frmHTML.Visible then
begin
frmHTML.Close ;
frmMain.ToolBar3.Enabled :=false;
end;
if not frmRTF.Visible then frmRTF.Visible:=true;
frmRTF.Show;
frmRTF.Visible :=true;
frmRTF.RichEdit21.Lines.LoadFromStream(Ms);
ms.Free ;
//frmHTML.Hide ;
table.Close ;
if frmHTML.Visible then showmessage('HTML is show now');
result:=true;
exit;
end
else //如果是Html文档
begin
Ms:=TStream.create;
Ms:=Table.CreateBlobStream(Table.FieldByName('FileContent'),bmRead);
Ms.Position :=0;
if frmRTF.Visible then frmRTF.Close ;
if not frmHTML.Visible then
begin
frmHTML.Parent:=frmMain.Panel1 ;
URL := 'about:blank';
frmHTML.WebBrowser1.Navigate(URL);
// frmHTML.WebBrowser1.Navigate('about:blank'
frmHTML.Show ;
frmHTML.Visible:=true; ; //浏览器工具栏可用
frmMain.ToolBar3.Enabled :=true;
end;
ps := frmHTML.WebBrowser1.Document as IPersistStreamInit;
sa:=TStreamAdapter.Create(Ms,soReference)as IStream;
ps.Load(sa);
frmHTML.WebBrowser1.Update ;
frmHTML.Update ;
ms.Free ;
Table.Close ;
if frmRTF.Visible then showMEssage('frmRTR is show now');
result:=true;
exit;
end;
end
else
table.Close ;
exit;
result:=false;
except
Table.Close ;
result:=false;
end;
end;
因为只有在frmhtml窗体关闭frmHTML.close一次后,再次加载,frmhtml.show的时候才会时读取的html流在webbrowser1中闪一下.其他都正常.