【delphi开源代码栏目提醒】:网学会员--在 delphi开源代码编辑为广大网友搜集整理了:DocThread.pas绩等信息,祝愿广大网友取得需要的信息,参考学习。
unit DocThread;
interface
uses
Classes, SysUtils, StdCtrls, ComCtrls, ComObj, ActiveX, Dialogs, DB, ADODB;
type
TDocRecord = record
FileName: string;
FilePath: string;
WordNo: string;
end;
TDocOperThread = class(TThread)
private
ADODataSet: TADODataSet;
{ Private declarations }
protected
procedure Execute; override;
function ReadDocText(FileName: string): string;
function ReadDocFile(FileName: string): TMemoryStream;
// procedure Refresh;
public
RefreshADO: TADODataSet;
DocRecord: TDocRecord;
procedure InitADO;
procedure Save;
procedure SetDocRecord(FName: string; FPath: string; WNo: string);
destructor Destroy; override;
end;
implementation
uses DataModu;
{ Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure DocThread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
{ DocThread }
procedure TDocOperThread.Execute;
begin
{ Place thread code here }
Synchronize(InitADO);
Save;
end;
{-------------------------------------------------------------------------------
过程名: DocOperThread.ReadDocText
作者: ZhangYan
日期: 2007.03.30
参数: FileName: string
返回值: 无
功能: 通过OLE读取WORD文档文本
-------------------------------------------------------------------------------}
function TDocOperThread.ReadDocText(FileName: string): string;
var
WordApp, WordDoc: OleVariant;
begin
if FileExists(FileName) then
begin
try
CoInitialize(nil);
WordApp := CreateOleObject('Word.application');
WordDoc := WordApp.Documents.Open(FileName);
Result := WordDoc.Range.text;
finally
WordDoc.Close;
WordApp.Quit;
CoUninitialize;
end;
end;
end;
{-------------------------------------------------------------------------------
过程名: DocOperThread.ReadDocFile
作者: ZhangYan
日期: 2007.03.30
参数: FileName: string
返回值: 无
功能: 通过内存流读取WORD文件
-------------------------------------------------------------------------------}
function TDocOperThread.ReadDocFile(FileName: string): TMemoryStream;
var
MStream: TMemoryStream;
begin
Result := nil;
if FileExists(FileName) then
begin
MStream := TMemoryStream.Create;
MStream.LoadFromFile(FileName);
Result := MStream;
end;
end;
{-------------------------------------------------------------------------------
过程名: TDocOperThread.InitADO
作者: ZhangYan
日期: 2007.03.30
参数: 无
返回值: 无
功能: 初始化记录集
-------------------------------------------------------------------------------}
procedure TDocOperThread.InitADO;
begin
ADODataSet := TADODataSet.Create(nil);
with ADODataSet do
begin
Active := False;
Connection := DataModuForm.ADOCon;
CommandText := 'Select * From MR_Tab_WordSub Where 1=2';
CacheSize := 1000;
CursorType := ctStatic;
LockType := ltBatchOptimistic;
Prepared := True;
Active := True;
end;
end;
destructor TDocOperThread.Destroy;
begin
ADODataSet.Free;
ADODataSet := nil;
inherited;
end;
procedure TDocOperThread.SetDocRecord(FName, FPath, WNo: string);
begin
with DocRecord do
begin
FileName := FName;
FilePath := FPath;
WordNo := WNo;
end;
end;
procedure TDocOperThread.Save;
var
Stream: TMemoryStream;
begin
try
Stream := TMemoryStream.Create;
with ADODataSet do
begin
Append;
FieldByName('FileName').AsString := DocRecord.FileName;
FieldByName('FilePath').AsString := DocRecord.FilePath;
FieldByName('WordNo').AsString := DocRecord.WordNo;
FieldByName('UseFlg').AsBoolean := True;
FieldByName('WordText').AsString := ReadDocText(DocRecord.FilePath);
Stream := ReadDocFile(DocRecord.FilePath);
if Assigned(Stream) then
TBlobField(FieldByName('WordFile')).LoadFromStream(Stream);
UpdateBatch;
end;
finally
FreeAndNil(Stream);
Suspend;
Free;
end;
end;
//procedure TDocOperThread.Refresh;
//begin
//end;
end.
上一篇:
DockForm.pas
下一篇:
汝康皮肤护理液医治烧伤的可行性和效果分析