🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.language
Article #22

��Dephi��ʹ��TStream��д��ݵļ���

#22
From: �Ϲ⡤��������
Date: Wed, 13 Mar 2002 18:18
122 lines
7228 bytes
��Dephi���ṩ��һ��������������TStream��֧�ֶ���ʽ��ݵIJ�������Щ���ͨ��
�����ļ�����ݿ⡢�ڴ����OLE����ȣ�TStream�ṩ��ͳһ�����ķ�����������
�ݵĶ�д����ͨ������£����Dz�����Ҫֱ��ʹ��TStream�࣬����ʽ��ݵĶ�д��װ��
VCL�ؼ��ķ����С����������Щ�����޷��������ǵ�Ҫ�󣬾���Ҫ�Լ��ֶ�������ݵ�
���
һ�� TStream�ij��õķ��������ԣ�
1. function Read(var Buffer; Count: Longint): Longint; virtual; abstract
2. function Write(const Buffer; Count: Longint): Longint; virtual; abstract;

3. function Seek(Offset: Longint; Origin: Word): Longint; virtual; abstract;

4. property Position: Longint;
5. property Size: Longint
Read��Write��Seek���Ǵ��麯���ṩ����ݶ�д�Ͷ�λ�ij���ķ�����Read��������
�ݴ�Stream�ж���Buffer�������У�Write��ʵ���෴�IJ���������ֵ��ʾʵ�ʶ�д���
�Ĵ�С��Seek�ṩ����Stream���ƶ����ָ��ķ���������Origin����ȡsoFromBeginn
ing��soFromCurrent��soFromEnd ���ֵ��Offset��ƫ����������ֵ�ǵ�ǰStream���
ָ���λ�á�
Position��ʾ�����ָ����Stream�е�λ�á���������ǿɶ�д�ģ���ʵ���Ͼ���ͨ��
����Seek����ʵ�ֵģ�����ʵ��ʹ��ʱʹ��������Ը�Ϊ����һЩ��Size���Ա�ʾ��ǰ
Stream�Ĵ�С�����ڲ�ͬ��Stream����Щʱ����ֻ���ġ�
���� Stream��ݵĶ�д��
1. SaveToStream(Stream: TStream ); file://�����е����д��Stream�ĵ�ǰλ����

2. LoadFromStream(Stream: TStream); file://�ӵ�ǰλ�ö���Stream������
ʵ��ʹ��ʱ���ǻ���ֻҪʹ��������������Ϳ����ˡ�
�� ����
TStream�ļ̳���ͼ��ͼ1��ʾ(��)��ʵ��ʹ��ʱ�Ƚϳ��õ���TFileStream��TMemorySt
ream��TblobStream����������������һ��˵�������÷���
����һ������Form1�����������ťbtnRead��btnInvert��btnSave��һ���ļ��򿪶Ի�
��OpenDialog1�Լ���ݿؼ�DataSource1��Table1��test.
ʹ��Dephi�ṩ��Database Desktop����һ����test��������һ���ֶ���Image����ݿ�
�ļ����Ϊtest.db���ڴ����Ϸ���һ��TDatabase�ؼ�dbTest��һ��TTable�ؼ�Table1
,һ��DataSource�ؼ�DataSource1,һ��TDBNavigator�ؼ�DBNavigator1����dbTest���
��Desktop��������ݿ�������Table1��TableName������Ϊtest.db��DataSource1��Da
taSet������ΪTable1��DBNavigator1��DataSource������ΪDataSource1��VisibleBut
tons����ǰ�ĸ���ΪTRUE�����⣬��dbtest��Connected��ΪTRUE��Table1��Active����
��ΪTRUE��ʹ����ݿ�һ��ʼ�ʹ��ڴ�״̬��
�¼������д���£�
1. btnRead��Click�¼���������ʾ��TFileStream���÷���
var
��MS: TFileStream;
begin
��if OpenDialog1.Execute then
��begin
MS:=TFileStream.Create
(OpenDialog1.FileName, fmOpenRead);
����Image1.Picture.Bitmap.LoadFromStream(MS);
����MS.Free;
��end;
end;
2. btnInvert��Click�¼���������ʾ��TMemoryStream���÷�������ʹ����Invert����
������һ���򵥵Ľ�ͼ��ɫ�ĺ���������ͼ����Ч�������һ��ָ������
ͼ����ݿ��ָ�롣
var
��M
S: TMemoryStream;
��pImage: pointer;
begin
��MS:=TMemoryStream.create;
��Image1.Picture.Bitmap.SaveToStream(MS);
��MS.Position:=0;
��pImage:=Invert(MS.Memory, MS.size);
file://Memory������ָ��ʵ���ڴ���ָ��
��MS.Write(pImage^,MS.size);
��MS.Position:=0;��������
file://��һ�д���ʹָ���Ƶ���Streamĩβ������Ҫ��λ
��Image1.Picture.Bitmap.LoadFromStream(MS);
��FreeMem(pImage);
��MS.Free;
end;
Invert�������£�
function TForm1.Invert
(pImage: pointer; size: Integer): pointer;
var
��pData, pMem: PChar;
��i: Integer;
begin
��pMem:=AllocMem(size);
��CopyMemory(pMem,pImage,size);
��pData:=pMem+54;
��for i:=0 to size-54-1 do
��begin
����pData^:=Char(not integer(pData^));
����pData:=pData+1;
��end;
��Result:=pMem;
end;
1. btnSave��Click�¼���������ʾ��TMemoryStream����һ���÷�����Stream�е����
д����ݿ���ȥ��
var
��MS: TMemoryStream;
begin
��MS:=TMemoryStream.create;
��Image1.Picture.Bitmap.SaveToStream(MS);
��MS.Position:=0;
��Table1.Append;��
file://����ݿ������һ����¼
��TBlobField(Table1.FieldbyName
('image')).LoadFromStream(MS);
��Table1.Post; ������
file://�������ĸ���д����ݿ�
end;
4. DBNavigator1��Click�¼���������ʾ��TBlobStream���÷���ʹ���˺�д��ʱ��ͬ��
������������ݿ��ͼ����ݡ�
var
��MS: TStream;
begin
��with Table1 do
��MS:=CreateBlobStream
(FieldbyName('image'),bmRead);
��Image1.Picture.Bitmap.
LoadFromStream(MS);
��MS.Free;
end;

--

     MM MM ��MM��MM����ࣻ
      �罫MM�����³����ɡ�
�� ��Դ:���콭ҹ�� bbs.gliet.edu.cn��[FROM: 192.168.89.122]
Technical Details
Message-ID: <3lJF4V$xrH@bbs.gliet.edu.cn>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!supernews.com!newsswitch.lcs.mit.edu!logbridge.uoregon.edu!hub1.nntpserver.com!news-out.spamkiller.net!propagator-la!news-in-la.newsfeeds.com!news-in.superfeed.net!news.cn99.com!jnunews.dhs.org!LiRiverBBS

Show Full Headers
Complete Article Headers
X-Google-Language: Chinese,GB
X-Google-Thread: faaec,482db45263dc0092,start
X-Google-Attributes: gidfaaec,public
X-Google-ArrivalTime: 2002-03-13 03:12:12 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!supernews.com!newsswitch.lcs.mit.edu!logbridge.uoregon.edu!hub1.nntpserver.com!news-out.spamkiller.net!propagator-la!news-in-la.newsfeeds.com!news-in.superfeed.net!news.cn99.com!jnunews.dhs.org!LiRiverBBS
From: Single.bbs@bbs.gliet.edu.cn (�Ϲ⡤��������)
Newsgroups: cn.bbs.comp.language
Subject: ��Dephi��ʹ��TStream��д��ݵļ���
Date: 13 Mar 2002 18:18:25 GMT
Organization: �콭ҹ��BBS
Message-ID: <3lJF4V$xrH@bbs.gliet.edu.cn>
X-Filename: programming/M.1016043487.A
Lines: 122