📄 ugraphic.pas
字号:
unit uGraphic;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, DBCtrls, ComCtrls, ExtDlgs, Db, DBGrids, ABSMain;
type
TfGraphic = class(TForm)
Panel2: TPanel;
Panel1: TPanel;
GroupBox1: TGroupBox;
Panel4: TPanel;
Panel3: TPanel;
btLoad: TButton;
btSave: TButton;
ImageField: TDBImage;
odGraphic: TOpenPictureDialog;
sdGraphic: TSavePictureDialog;
btCancel: TButton;
btOk: TButton;
lSize: TLabel;
Label1: TLabel;
procedure FormShow(Sender: TObject);
procedure btLoadClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btSaveClick(Sender: TObject);
procedure btOkClick(Sender: TObject);
procedure btCancelClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
CurrentTable: TABSDataSet;
CurrentGrid: TDBGrid;
end;
var
fGraphic: TfGraphic;
implementation
{$R *.DFM}
procedure TfGraphic.FormShow(Sender: TObject);
var
BlobStream: TStream;
begin
CurrentTable := TABSDataset(CurrentGrid.DataSource.DataSet);
if (not TABSTable(CurrentTable).ReadOnly) then
CurrentTable.Edit;
with ImageField do
begin
DataSource := nil;
DataField := CurrentGrid.SelectedField.FieldName;
DataSource := CurrentGrid.DataSource;
end;
BlobStream := CurrentTable.CreateBlobStream(CurrentGrid.SelectedField,bmRead);
lSize.Caption := Format('%d bytes', [BlobStream.Size]);
BlobStream.Free;
Caption := Format('Graphic Field "%s"',[CurrentGrid.SelectedField.FieldName]);
end;
procedure TfGraphic.btLoadClick(Sender: TObject);
var
FileStream: TFileStream;
BlobStream: TStream;
begin
if (odGraphic.Execute) then
begin
ImageField.DataSource := nil;
try
BlobStream := CurrentTable.CreateBlobStream(CurrentGrid.SelectedField,bmWrite);
FileStream := TFileStream.Create(odGraphic.FileName,fmOpenRead or fmShareDenyNone);
BlobStream.CopyFrom(FileStream,FileStream.Size);
lSize.Caption := Format('%d bytes', [BlobStream.Size]);
FileStream.Free;
BlobStream.Free;
finally
ImageField.DataSource := CurrentGrid.DataSource;
end;
end;
end;
procedure TfGraphic.btSaveClick(Sender: TObject);
var
FileStream: TFileStream;
BlobStream: TStream;
begin
if (sdGraphic.Execute) then
begin
FileStream := TFileStream.Create(sdGraphic.FileName,fmCreate);
BlobStream := CurrentTable.CreateBlobStream(CurrentGrid.SelectedField,bmRead);
FileStream.CopyFrom(BlobStream,BlobStream.Size);
BlobStream.Free;
FileStream.Free;
end;
end;
procedure TfGraphic.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ImageField.DataSource := nil;
if (CurrentTable.State = dsEdit) then
CurrentTable.Cancel;
end;
procedure TfGraphic.btOkClick(Sender: TObject);
begin
if (not CurrentTable.ReadOnly) then
CurrentTable.Post;
end;
procedure TfGraphic.btCancelClick(Sender: TObject);
begin
if (not CurrentTable.ReadOnly) then
CurrentTable.Cancel;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -