Article View: cn.bbs.comp.language
Article #20delphi�������ܽ�
From: �Ϲ⡤��������
Date: Wed, 13 Mar 2002 18:10
Date: Wed, 13 Mar 2002 18:10
273 lines
13189 bytes
13189 bytes
search | member | help | map
�� ҳ | �� �� | �� �� | �� ̳ | �� �� | �� �� | ��Ӫ |������Ա��| �� ��
CSDN - ����Ƶ�� - �ĵ����� - Delphi
���� Delphi�����������ܽ� nofeal��ԭ����
�ؼ��� Delphi BCB ��
Delphi�����������ܽ�
TMemoryStream�ļ̳й�ϵ����
TObject
|
TStream
|
TCustomMemoryStream
|
TMemoryStream
���ʹ��TMemoryStream?
��ʵTmemoryStreamʹ�þ�TStream һ��
��������ԣ������ɿ�����
�¾�һ��
���������ڴ���ֱ�Ӷ�дһ��Bitmap,��ô�죿
TmemoryStream�������æ
var
BitmapMemoryStream:TMemoryStream;
Bitmap1:TBitmap;
procedure TForm.Button1Click(Sender:TObject);
begin
BitmapmemroyStream:=TmemoryStream.Create; file://����MemoryStream
Bitmap1:=TBitmap.Create;
try
Bitmap1.LoadFromFile('d:\Bitmap1.bmp');
except
ShowMessage('Error On LoadFile bitmap1.bmp');
end;
end;
procedure TForm.Button2Click(Sneder:Tobject);
begin
if Assigned(Bitmap1) then
Bitmap1.SaveToStream(BitmapmemoryStream);
end;
procedure TForm.Button3Click(Sender:TObject);
begin
if BitmapMemoryStream<>nil then
begin
try
BitmapMemroyStream.SaveToFile('Bitmap1.str'); file://�ڴ������棬
����
file://Bitmap1.bmp
һ��
except
showmessage('error on access memory!');
end;
end;
end;
procedure TForm.Button4Click(Sender:TObject);
var
Buffer:Array[0..53] of char;
begin
if Assigned( BitmapMemroyStream) then
try
BitmapMemroyStream.Seek(0,soFromBeginning);
BitmapMemoryStream.Read(Buffer,54);
if Buffer[0]='B' and Buffer[1]='M' then file://��д�ڴ�����
begin
BitmapMemoryStream.Seek(0,soFromBeginning);
BitmapmemoryStream.Write('ICE',3);
Button3Click(Sender);//����д������д���ļ�
end;
except
ShowMessage('error On Access memroyStream');
end;
end;
��ҿɿ�����TMemoryStream�����ڴ��д��ô���㣬��Ȼ��ʵ�ò����Ƚ�һBitmap
������LoadFromFileֱ�����ļ�������������������ڴ���ȴ�ǿ�������������
����ֻ����ת���������һЩ���ܴ�ҿ��Կ������Լ���ĥ��
���кܶ��������ʽ�����¶���࣬һͨ��ͨ��
��ν�һ����������д�뵽������У�������
��������Dzο�Delphi�ļ�������ʵ������ɵġ���һ���������ݷ������壬
����Ҫע�������ѵĸ�ʽ��ʹ��RegisterClipboardFormat()����
Ȼ����������
1.����һ������������������д��ȥ
2.����һ��ȫ�ֵ�����������������д��
3.����ClipBoard.SetAsHandle()�����������
�������������
var
hbuf : THandle;
bufptr : Pointer;
mstream : TMemoryStream;
begin
mstream := TMemoryStream.Create;
try
{-- �������Ĵ��� --}
hbuf := GlobalAlloc(GMEM_MOVEABLE, mstream.size);
try
bufptr := GlobalLock(hbuf);
try
Move(mstream.Memory^, bufptr^, mstream.size);
Clipboard.SetAsHandle(CF_MYFORMAT, hbuf);
finally
GlobalUnlock(hbuf);
end;
except
GlobalFree(hbuf);
raise;
end;
finally
mstream.Free;
end;
end;
��ע�ⲻҪ�������ȫ�ֻ������ͷţ���������ɼ��������ɣ��ڶ��������
��Ӧ�ý����ƺ��?
����������ݶ�����
var
hbuf : THandle;
bufptr : Pointer;
mstream : TMemoryStream;
begin
hbuf := Clipboard.GetAsHandle(CF_MYFORMAT);
if hbuf <> 0 then begin
bufptr := GlobalLock(hbuf);
if bufptr <> nil then begin
try
mstream := TMemoryStream.Create;
try
mstream.WriteBuffer(bufptr^, GlobalSize(hbuf));
mstream.Position := 0;
{-- �������Ĵ��� --}
finally
mstream.Free;
end;
finally
GlobalUnlock(hbuf);
end;
end;
end;
end;
��Dephi��ʹ��TStream��д��ݵļ���
��Dephi���ṩ��һ��������������TStream��֧�ֶ���ʽ��ݵIJ�������Щ���ͨ��
�����ļ�����ݿ⡢�ڴ����OLE����ȣ�TStream�ṩ��ͳһ�����ķ�����������
�ݵĶ�д����ͨ������£����Dz�����Ҫֱ��ʹ��TStream�࣬����ʽ��ݵĶ�д��װ��
VCL�ؼ��ķ����С����������Щ�������������ǵ�Ҫ����Ҫ�Լ��ֶ�������ݵ�
���
һ�� TStream�ij��õķ��������ԣ�
---- 1. function Read(var Buffer; Count: Longint): Longint; virtual; abstrac
t
---- 2. function Write(const Buffer; Count: Longint): Longint; virtual; abst
ract;
---- 3. function Seek(Offset: Longint; Origin: Word): Longint; virtual; abst
ract;
---- 4. property Position: Longint;
---- 5. property Size: Longint
---- Read��Write��Seek���Ǵ��麯���ṩ����ݶ�д�Ͷ�λ�ij���ķ�����Read��
������ݴ�Stream�ж���Buffer�������У�Write��ʵ���෴�IJ���������ֵ��ʾʵ�ʶ�
д��ݵĴ�С��Seek�ṩ����Stream���ƶ����ָ��ķ���������Origin����ȡsoFrom
Beginning��soFromCurrent��soFromEnd ���ֵ��Offset��ƫ����������ֵ�ǵ�ǰStre
am���ָ���λ�á�
---- Position��ʾ�����ָ����Stream�е�λ�á���������ǿɶ�д�ģ���ʵ���Ͼ���
ͨ�����Seek����ʵ�ֵģ�����ʵ��ʹ��ʱʹ��������Ը�Ϊ����һЩ��Size���Ա�ʾ
��ǰStream�Ĵ�С�����ڲ�ͬ��Stream����Щʱ����ֻ���ġ�
���� Stream��ݵĶ�д��
---- 1. SaveToStream(Stream: TStream ); file://�����е����д��Stream�ĵ�ǰλ
����
---- 2. LoadFromStream(Stream: TStream); file://�ӵ�ǰλ�ö���Stream������
---- ʵ��ʹ��ʱ���ǻ���ֻҪʹ��������������Ϳ����ˡ�
�� ����
---- TStream�ļ̳���ͼ��ͼ1��ʾ(��)��ʵ��ʹ��ʱ�Ƚϳ��õ���TFileStream��TMem
oryStream��TblobStream����������������һ��˵�������÷���
---- ����һ������Form1�����������ťbtnRead��btnInvert��btnSave��һ���ļ���
�Ի���OpenDialog1�Լ���ݿؼ�DataSource1��Table1��test.
---- ʹ��Dephi�ṩ��Database Desktop����һ����test��������һ���ֶ���Image����
�ݿ��ļ����Ϊtest.db���ڴ����Ϸ���һ��TDatabase�ؼ�dbTest��һ��TTable�ؼ�Ta
ble1,һ��DataSource�ؼ�DataSource1,һ��TDBNavigator�ؼ�DBNavigator1����dbTes
t��ղ�Desktop��������ݿ�������Table1��TableName������Ϊtest.db��DataSource
1��DataSet������ΪTable1��DBNavigator1��DataSource������ΪDataSource1��Visib
leButtons����ǰ�ĸ���ΪTRUE�����⣬��dbtest��Connected��ΪTRUE��Table1��Acti
ve������Ϊ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���÷�������ʹ����Inver
t��������һ���Ľ�ͼ��ɫ�ĺ���������ͼ����Ч�������һ��ָ����
���ͼ����ݿ��ָ�롣
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;
ȫ���꣬��л���Ķ�����ƪ���¡�����ȱ�����÷��ˣ�ֻ�����������ֺöһ�
����о����Ķ����а����������Ͷ��һƱ��лл��
����
�Ը��ĵ�����
DIABL0 (2001-9-23 9:31:15)
��ϲ����������������
daiguan (2001-8-23 6:15:46)
���?�м�ֵ
��Ҫ����
��û�е�½�����������ۡ� ���ȵ�½ ��Ҫע��
----------------------------------------------------------------------------
----
��վ��� - ������ - ��ϵ��ʽ ��������������Ƽ�����˾ ��Ȩ����
Copyright ? CSDN.net, Inc. All rights reserved
--
MM MM ��MM��MM����ࣻ
�罫MM�����³����ɡ�
[m[1;32m�� ��Դ:���콭ҹ�� bbs.gliet.edu.cn��[FROM: 192.168.89.122][m
Technical Details
Message-ID:
<3lJEhD$xHU@bbs.gliet.edu.cn>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!supernews.com!peer1-sjc1.usenetserver.com!usenetserver.com!hub1.nntpserver.com!news-out.spamkiller.net!propagator-la!news-in-la.newsfeeds.com!news-in.superfeed.net!news.cn99.com!jnunews.dhs.org!LiRiverBBSShow Full Headers
Complete Article Headers
X-Google-Language: Chinese,GB X-Google-Thread: faaec,22379b28b457dbbe,start X-Google-Attributes: gidfaaec,public X-Google-ArrivalTime: 2002-03-13 03:02:07 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!supernews.com!peer1-sjc1.usenetserver.com!usenetserver.com!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: delphi�������ܽ� Date: 13 Mar 2002 18:10:57 GMT Organization: �콭ҹ��BBS Message-ID: <3lJEhD$xHU@bbs.gliet.edu.cn> X-Filename: programming/M.1016043037.A Lines: 273