🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

delphi�������ܽ�

#20
From: �Ϲ⡤��������
Date: Wed, 13 Mar 2002 18:10
273 lines
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�����³����ɡ�
�� ��Դ:���콭ҹ�� bbs.gliet.edu.cn��[FROM: 192.168.89.122]
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!LiRiverBBS

Show 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