🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: cn.bbs.comp.language
1 messages
1 total messages Started by �Ϲ⡤�������� Wed, 13 Mar 2002 18:10
delphi�������ܽ�
#20
Author: �Ϲ⡤��������
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]
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