Thread View: cn.bbs.comp.language
1 messages
1 total messages
Started by �Ϲ⡤��������
Wed, 13 Mar 2002 18:10
delphi�������ܽ�
Author: �Ϲ⡤��������
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
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads