发信人: finlove (荒野之狼), 信区: BorlandDev
标  题: 输入图片到blob字段  
发信站: 哈工大紫丁香 (Tue Jan 22 12:18:51 2002) , 转信

procedure TForm1.Button1Click(Sender: TObject); 
var 
C: TClipboard; 
begin 
C := TClipboard.Create; 
try 
if Clipboard.HasFormat(CF_BITMAP) then 

DBImage1.PasteFromClipboard 
else 
ShowMessage('Clipboard does not contain a bitmap!'); 
finally 
C.Free; 
end; 
end; 


procedure TForm1.Button2Click(Sender: TObject); 
begin 
Table1Bitmap.LoadFromFile( 
'c:\delphi\images\splash\16color\construc.bmp'); 
end; 

procedure TForm1.Button3Click(Sender: TObject); 
var 
B: TBitmap; 
begin 
B := TBitmap.Create; 
try 
B.LoadFromFile('c:\delphi\images\splash\16color\athena.bmp'); 
DBImage1.Picture.Assign(B); 
finally 
B.Free; 
end; 
end; 
/////////////////////////////////////////////////////////// 
var 
st: TStringStream; 
begin 
st := tstringstream.create(''); 
bitmap.savetostream(st); 
query1.sql.text := 'insert into table Image_field values :bmp'; 
query1.parambyname('bmp').asblob := st.datastring; 
query1.execsql; 
st.free; 
end; 
//////////////////////////////////////////////////////////////////////// 
unit Unit1; 

interface 

{$IFDEF WIN32} 
uses 
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, 
Dialogs, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, Db, 
DBTables; 
{$ELSE} 
uses 
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, 
Forms, Dialogs, DBTables, DB, Grids, DBGrids, ExtCtrls, StdCtrls; 
{$ENDIF} 

type 
TForm1 = class(TForm) 
Table1: TTable; 
DataSource1: TDataSource; 
DBGrid1: TDBGrid; 
Image1: TImage; 
Button1: TButton; 
Table1Name: TStringField; 
Table1WMF: TBlobField; 
OpenDialog1: TOpenDialog; 
procedure FormCreate(Sender: TObject); 
procedure FormDestroy(Sender: TObject); 
procedure Button1Click(Sender: TObject); 
procedure DataSource1DataChange(Sender: TObject; Field: TField); 
private 
{ Private declarations } 
FileName : string; {Used to hold a temp file name} 
procedure LoadWMFFromDatabase; {loads a WMF from the database} 
public 
{ Public declarations } 
end; 

var 
Form1: TForm1; 

implementation 

{$R *.DFM} 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
{Used for loading metafiles} 
OpenDialog1.Filter := 'Metafiles (*.wmf)|*.wmf'; 
OpenDialog1.Options := [ofHideReadOnly, ofNoChangeDir]; 
Image1.Stretch := true; 
end; 

procedure TForm1.FormDestroy(Sender: TObject); 
begin 
{Erase the temp file if it exists} 
if FileName <> '' then 
DeleteFile(FileName); 
end; 

{This function gets a temporary file name form the system} 
function GetTemporaryFileName : string; 
{$IFNDEF WIN32} 
const MAX_PATH = 144; 
{$ENDIF} 
var 
{$IFDEF WIN32} 
lpPathBuffer : PChar; 
{$ENDIF} 
lpbuffer : PChar; 
begin 
{Get the file name buffer} 
GetMem(lpBuffer, MAX_PATH); 
{$IFDEF WIN32} 
{Get the temp path buffer} 
GetMem(lpPathBuffer, MAX_PATH); 
{Get the temp path} 
GetTempPath(MAX_PATH, lpPathBuffer); 
{Get the temp file name} 
GetTempFileName(lpPathBuffer, 
'tmp', 
0, 
lpBuffer); 
{Free the temp path buffer} 
FreeMem(lpPathBuffer, MAX_PATH); 
{$ELSE} 
{Get the temp file name} 
GetTempFileName(GetTempDrive('C'), 
'tmp', 
0, 
lpBuffer); 
{$ENDIF} 
{Create a pascal string containg} 
{the temp file name and return it} 
result := StrPas(lpBuffer); 
{Free the file name buffer} 
FreeMem(lpBuffer, MAX_PATH); 
end; 

procedure TForm1.LoadWMFFromDatabase; 
var 
FileStream: TFileStream; {a temp file} 
BlobStream: TBlobStream; {the WMF Blob} 
begin 
Image1.Picture.Metafile.Assign(nil); 
{Create a blob stream for the WMF blob} 
BlobStream := TBlobStream.Create(Table1WMF, bmRead); 
if BlobStream.Size = 0 then begin 
BlobStream.Free; 
Exit; 
end; 
{if we have a temp file then erase it} 
if FileName <> '' then 
DeleteFile(FileName); 
{Get a temp file name} 
FileName := GetTemporaryFileName; 
{Create a temp file stream} 
FileStream := TFileStream.Create(FileName, 
fmCreate or fmOpenWrite); 
{Copy the blob to the temp file} 
FileStream.CopyFrom(BlobStream, BlobStream.Size); 
{Free the streams} 
FileStream.Free; 
BlobStream.Free; 
{Dispaly the image} 
Image1.Picture.Metafile.LoadFromFile(FileName); 
end; 

{Save a wmf file to the database} 
procedure TForm1.Button1Click(Sender: TObject); 
var 
FileStream: TFileStream; {to load the wmf file} 
BlobStream: TBlobStream; {to save to the blob} 
begin 
{Allow the button to repaint} 
Application.ProcessMessages; 
if OpenDialog1.Execute then begin 
{Turn off the button} 
Button1.Enabled := false; 
{Assign the avi file name to read} 
FileStream := TFileStream.Create(OpenDialog1.FileName, 
fmOpenRead); 
Table1.Edit; 
{Create a BlobStream for the field Table1WMF} 
BlobStream := TBlobStream.Create(Table1WMF, bmReadWrite); 
{Seek to the Begginning of the stream} 
BlobStream.Seek(0, soFromBeginning); 
{Delete any data that may be there} 
BlobStream.Truncate; 
{Copy from the FileStream to the BlobStream} 
BlobStream.CopyFrom(FileStream, FileStream.Size); 
{Free the streams} 
FileStream.Free; 
BlobStream.Free; 
{Post the record} 
Table1.Post; 
{Load the metafile in to a TImage} 
LoadWMFFromDatabase; 
{Enable the button} 
Button1.Enabled := true; 
end; 
end; 

procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); 
begin 
if (Sender as TDataSource).State = dsBrowse then 
LoadWMFFromDatabase; 
end; 

end. 





--

※ 来源:.哈工大紫丁香 http://bbs.hit.edu.cn [FROM: 211.97.214.52]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.899毫秒