home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161b.iso / full / delphi / DELPHI16 / TECHINFO / DELPHI / TIS / TI2811.FX < prev    next >
Encoding:
Text File  |  1995-08-24  |  10.5 KB  |  366 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.   PRODUCT  :  Delphi                                 NUMBER  :  2811
  8.   VERSION  :  All
  9.        OS  :  Windows
  10.      DATE  :  July 14, 1995                            PAGE  :  1/6
  11.  
  12.     TITLE  :  Bitmaps And InterBase BLOB Fields
  13.  
  14.  
  15.  
  16.  
  17. dBASE and Paradox tables provide a BLOB field to store binary data that,
  18. when the stored data is of bitmap-format, work as-is with the TDBImage
  19. component to display images. In Database Desktop, these field types are
  20. listed as Binary and Graphic (for dBASE and Paradox tables, respectively).
  21. However, the process of storing bitmap images in InterBase BLOB fields
  22. and using the stored data with TDBImage components is not as straight-
  23. forward.
  24.  
  25. InterBase tables do not have just one type of BLOB field. There are three
  26. variants, or sub-types: type 0, type 1, and user-defined sub-types. Types
  27. 0 and 1 are pre-defined types. Type 0 BLOB fields (the default type) are
  28. for storing general binary data. Type 1 BLOB fields are for storing text
  29. BLOB data. Neither of the pre-defined types allow the automated retrieval
  30. of bitmap data from the BLOB field that is displayed in a TDBImage comp-
  31. onent. Type 0 BLOB fields may be used for storing bitmap-format data, but
  32. the data must be programmatically extracted and piped into an object of
  33. type TBitmap. Here is an example of manually extracting the bitmap data
  34. stored in a type 0 BLOB field (Table1BLOBField) and displaying the data in
  35. a (non-data-aware) ITImage component:
  36.  
  37.   procedure TForm1.ExtractBtnClick(Sender: TObject);
  38.   begin
  39.     Image1.Picture.Bitmap.Assign(Table1BLOBField);
  40.   end;
  41.  
  42. Naturally, because this has to be done manually, this process is less
  43. desireable in an application than relying on the BDE and a TDBImage comp-
  44. onent to automatically display the bitmap data. This is where the user-
  45. defined BLOB field sub-types come in. When using a BLOB field sub-type,
  46. the storing of the first data establishes the type of data for that field
  47. throughout the entire table. Thus, if bitmap-format data is the first type
  48. of data stored, that must subsequently be the only type stored in that
  49. field. While the default binary BLOB field type (pre-defined type 0)
  50. stores the data in too general a format for the BDE to read the data in
  51. a manner usable to a TDBImage component, a sub-type with an established
  52. storage type is usable.
  53.  
  54. The Database Desktop utility will allow the creation only of type 0 binary
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.   PRODUCT  :  Delphi                                 NUMBER  :  2811
  69.   VERSION  :  All
  70.        OS  :  Windows
  71.      DATE  :  July 14, 1995                            PAGE  :  2/6
  72.  
  73.     TITLE  :  Bitmaps And InterBase BLOB Fields
  74.  
  75.  
  76.  
  77.  
  78. BLOB fields, no provision was made for user-defined BLOB field sub-types.
  79. Because of this, a table to be used to store and display bitmap images
  80. must be created with an SQL statement. Typically this would be through the
  81. WISQL utility, but an appropriate SQL statement in a TQuery would suffice.
  82. Here is an SQL statement that creates a table with a user-defined BLOB
  83. field sub-type:
  84.  
  85.   CREATE TABLE WITHBMP
  86.   (
  87.   FILENAME CHAR(12),
  88.   BITMAP   BLOB SUB_TYPE -1
  89.   )
  90.  
  91. Once a table with a compatible BLOB field is created, storing bitmap data
  92. to the BLOB field and displaying the bitmap images in a TDBImage component
  93. uses the same methods as would be used with dBASE or Paradox tables.
  94.  
  95. There are a number of ways to load a bitmap image into a BLOB field. Three
  96. of the easier methods involve 1) copying the data from the Windows clip-
  97. board into a TDBImage component connected to the BLOB field, 2) using the
  98. LoadFromFile method of the TBLOBField component, and 3) using the Assign
  99. method to copy an object of type TBitmap into the Picture property of a 
  100. TBDBImage.
  101.  
  102. The first method, copying the bitmap from the clipboard, is probably most
  103. handy when an application needs to add bitmaps to a table when the end-
  104. user is running the application. A TDBImage component is used to act as an
  105. interface between the BLOB field in the table and the image stored in the
  106. clipboard. The PasteFromClipboard method of the TDBImage component is
  107. invoked to copy the bitmap data from the clipboard into the TDBImage. When
  108. the record is posted, the image is stored into the BLOB field in the
  109. table.
  110.  
  111. Because the Windows clipboard can contain data in formats other than just
  112. bitmap, it is advisable to check the format prior to calling the CopyFrom-
  113. Clipboard method. To do this, a TClipboard object is created and its Has-
  114. Format method is used to determine if the data in the clipboard is indeed
  115. of bitmap format. Note that to use a TClipboard object, the Clipbrd unit
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.   PRODUCT  :  Delphi                                 NUMBER  :  2811
  130.   VERSION  :  All
  131.        OS  :  Windows
  132.      DATE  :  July 14, 1995                            PAGE  :  3/6
  133.  
  134.     TITLE  :  Bitmaps And InterBase BLOB Fields
  135.  
  136.  
  137.  
  138.  
  139. must be included in the Uses section of the unit that will be creating
  140. the object.
  141.  
  142. Here is an example showing the contents of the clipboard being copied into
  143. a TDBImage component, if the contents of the clipboard are of bitmap
  144. format:
  145.  
  146.   procedure TForm1.Button1Click(Sender: TObject);
  147.   var
  148.     C: TClipboard;
  149.   begin
  150.     C := TClipboard.Create;
  151.     try
  152.       if Clipboard.HasFormat(CF_BITMAP) then
  153.         DBImage1.PasteFromClipboard
  154.       else
  155.         ShowMessage('Clipboard does not contain a bitmap!');
  156.     finally
  157.       C.Free;
  158.     end;
  159.   end;
  160.  
  161. The second method of filling a BLOB field with a bitmap involves loading
  162. the bitmap directly from a file on disk into the BLOB field. This method
  163. lends itself equally well to uses at run-time for the end-user as for
  164. the developer building an application's data. This method uses the Load-
  165. FromFile method of the TBLOBField component, the Delphi representation of
  166. an InterBase BLOB field.
  167.  
  168. The LoadFromFile method of the TBLOBField component requires a single
  169. parameter: the name of the bitmap file to load, which is of type String.
  170. The value for this parameter may come from a number of sources from the
  171. end-user manually keying in a valid file name to the program providing a
  172. string to the contents of the FileName property of the TOpenDialog comp-
  173. onent.
  174.  
  175. Here is an example showing the use of the LoadFromFile method for a TBLOB-
  176. Field component named Table1Bitmap (a field called Bitmap in the table
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.   PRODUCT  :  Delphi                                 NUMBER  :  2811
  191.   VERSION  :  All
  192.        OS  :  Windows
  193.      DATE  :  July 14, 1995                            PAGE  :  4/6
  194.  
  195.     TITLE  :  Bitmaps And InterBase BLOB Fields
  196.  
  197.  
  198.  
  199.  
  200. associated with a TTable component named Table1):
  201.  
  202.   procedure TForm1.Button2Click(Sender: TObject);
  203.   begin
  204.     Table1Bitmap.LoadFromFile(
  205.       'c:\delphi\images\splash\16color\construc.bmp');
  206.   end;
  207.  
  208. The third method uses the Assign method to copy the contents of an object
  209. of type TBitmap into the Picture property of a TDBImage component. An
  210. object of type TBitmap might be the Bitmap property of the Picture object
  211. property of a TImage component or it may be a stand-alone TBitmap object.
  212. As with the method copying the data from the clipboard into a TDBImage
  213. component, the bitmap data in the TDBImage component is saved into the
  214. BLOB field in the table when the record is successfully posted.
  215.  
  216. Here is an example using the Assign method. In this case, a stand-alone
  217. TBitmap object is used. To put a bitmap image into the TBitmap, the
  218. LoadFromFile method of the TBitmap component is called.
  219.  
  220.   procedure TForm1.Button3Click(Sender: TObject);
  221.   var
  222.     B: TBitmap;
  223.   begin
  224.     B := TBitmap.Create;
  225.     try
  226.       B.LoadFromFile('c:\delphi\images\splash\16color\athena.bmp');
  227.       DBImage1.Picture.Assign(B);
  228.     finally
  229.       B.Free;
  230.     end;
  231.   end;
  232.  
  233. ******************************************
  234.  
  235. Going the opposite direction -- extracting a bitmap from an InterBase BLOB
  236. field (without first saving the bitmap out to a file) is a simple process
  237. of using the Assign method of the TBLOBField object to store the contents
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.   PRODUCT  :  Delphi                                 NUMBER  :  2811
  252.   VERSION  :  All
  253.        OS  :  Windows
  254.      DATE  :  July 14, 1995                            PAGE  :  5/6
  255.  
  256.     TITLE  :  Bitmaps And InterBase BLOB Fields
  257.  
  258.  
  259.  
  260.  
  261. of the BLOB field to an object of type TBitmap. A stand-alone TBitmap
  262. object or the Bitmap property of the Picture object property of a TIMage
  263. component are examples of compatible destinations for this operation.
  264.  
  265. Here is an example demonstrating using the Assign method to copy a bitmap
  266. from a BLOB field into a TImage component (Table1Bitmap is the TBLOBfield
  267. for the BLOB field in the table).
  268.  
  269.   procedure TForm1.Button1Click(Sender: TObject);
  270.   begin
  271.     Image1.Picture.Bitmap.Assign(Table1Bitmap);
  272.   end;
  273.  
  274. In this example, the TBLOBField object Table1Bitmap is a BLOB field in an
  275. InterBase table. This TBLOBField object was created using the Fields
  276. Editor. If the Fields Editor is not used to create TFields for the fields
  277. in the table, the fields must be referenced using either the FieldByName
  278. method or the Fields property, both part of the TTable and TQuery comp-
  279. onents. In cases where one of those means is used to reference the BLOB
  280. field in a table, the field reference must be type-cast as a TBLOBField
  281. object prior to using the Assign method. For example:
  282.  
  283.   procedure TForm1.Button1Click(Sender: TObject);
  284.   begin
  285.     Image1.Picture.Bitmap.Assign(TBLOBField(Table1.Fields[1]));
  286.   end;
  287.  
  288. A bitmap stored in a BLOB field may also be copied directly to a stand-
  289. alone TBitmap object. Here is an example showing the creation of a
  290. TBitmap object and storing into it a bitmap from a BLOB field.
  291.  
  292.   procedure TForm1.Button2Click(Sender: TObject);
  293.   var
  294.     B: TBitmap;
  295.   begin
  296.     B := TBitmap.Create;
  297.     try
  298.       B.Assign(Table1Bitmap);
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.   PRODUCT  :  Delphi                                 NUMBER  :  2811
  313.   VERSION  :  All
  314.        OS  :  Windows
  315.      DATE  :  July 14, 1995                            PAGE  :  6/6
  316.  
  317.     TITLE  :  Bitmaps And InterBase BLOB Fields
  318.  
  319.  
  320.  
  321.  
  322.       Image1.Picture.Bitmap.Assign(B);
  323.     finally
  324.       B.Free;
  325.     end;
  326.   end;
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362. DISCLAIMER: You have the right to use this technical information
  363. subject to the terms of the No-Nonsense License Statement that
  364. you received with the Borland product to which this information
  365. pertains.
  366.