home *** CD-ROM | disk | FTP | other *** search
- unit UStreamDemo;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls, ExtCtrls;
-
- type
- TForm1 = class(TForm)
- ListBox1: TListBox;
- Image1: TImage;
- Label1: TLabel;
- procedure FormCreate(Sender: TObject);
- procedure ListBox1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- procedure ReadTemplate (Stream: TFileStream);
- function ReadBitmap (Stream: TFileStream): TBitmap;
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.DFM}
-
- function TForm1.ReadBitmap (Stream: TFileStream): TBitmap;
- var
- BmpSize: Integer;
- TempStream: TMemoryStream;
- begin
- Result := TBitmap.Create;
- Stream.Read (BmpSize, sizeof (BmpSize));
- // If we've got a bitmap.......
- if BmpSize > 0 then begin
- TempStream := TMemoryStream.Create;
- try
- TempStream.CopyFrom (Stream, BmpSize);
- TempStream.Position := 0;
- Result.LoadFromStream (TempStream);
- finally
- TempStream.Free;
- end;
- end;
- end;
-
- procedure TForm1.ReadTemplate (Stream: TFileStream);
- var
- Len: Byte;
- Name: String; // name of this entry
- PageName: String; // pagename of this entry
- StartPos: Integer; // position of this entry
- TemplateSize: Integer; // size of this entry
- begin
- Stream.Read (TemplateSize, sizeof (TemplateSize));
- StartPos := Stream.Position;
-
- // Read name of this entry
- Stream.Read (Len, sizeof (Len));
- SetLength (Name, Len);
- if Len > 0 then Stream.Read (PChar (Name)^, Len);
-
- // Read component template page of this entry
- Stream.Read (Len, sizeof (Len));
- SetLength (PageName, Len);
- if Len > 0 then Stream.Read (PChar (PageName)^, Len);
-
- ListBox1.Items.AddObject (Format ('%s (Page = %s)', [Name, PageName]), ReadBitmap (Stream));
- Stream.Position := StartPos + TemplateSize;
- end;
-
- procedure TForm1.FormCreate(Sender: TObject);
- var
- Ch: Char;
- FileStream: TFileStream;
- begin
- // Open the component template library
- FileStream := TFileStream.Create ('D:\Delphi3\BIN\DELPHI32.DCT', fmOpenRead);
- try
- // Skip the DCT header string
- repeat
- FileStream.Read (Ch, sizeof (Ch));
- until Ch = #$1A;
-
- while FileStream.Position < FileStream.Size do ReadTemplate (FileStream);
- finally
- FileStream.Free;
- end;
- end;
-
- procedure TForm1.ListBox1Click(Sender: TObject);
- begin
- with ListBox1 do if ItemIndex >= 0 then begin
- Image1.Picture.Bitmap.Assign (TBitmap (Items.Objects [ItemIndex]));
- end;
- end;
-
- end.
-