5,386
社区成员
发帖
与我相关
我的任务
分享
unit clsHRMRegister;
interface
uses
DBConnector, clsBaseDataProcess, Graphics, Classes, jpeg, DB;
type
THRMRegister = class(TBaseDataProcess)
private
//省略
protected
procedure InitData;override;
procedure RecordToClass;override;
procedure ClassToRecord;override;
public
//***********************省略属性
destructor Destroy; override;
end;
implementation
procedure THRMRegister.InitData;
begin
inherited;
Photo := TStream.Create;
with Query do
begin
Connection := TDBConnector.Instance.Connection;
SQL.Text := 'Select * From TB_Employee';
Open;
end;
DataSource.DataSet := Query;
end;
procedure THRMRegister.RecordToClass;
begin
with Query do
begin
TBlobField(FieldByName('Photo')).SaveToStream(Photo);
end;
end;
procedure THRMRegister.ClassToRecord;
begin
with Query do
begin
TBlobField(FieldByName('Photo')).LoadFromStream(Photo);
end;
end;
destructor THRMRegister.Destroy;
begin
Photo.Free;
inherited;
end;
end.
unit HRMRegisterForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TemplateDataOperateForm, ActnList, StdCtrls, Buttons, ExtCtrls,
GridsEh, DBGridEh, ComCtrls, ModuleManager, Menus, clsCommon;
type
TfrmHRMRegister = class(TfrmTemplateDataOperate)
//省略
private
{ Private declarations }
protected
procedure InitForm;override;
procedure ClassToEdit;override;
procedure EditToClass;override;
function CheckInput:Boolean;override;
public
{ Public declarations }
end;
var
frmHRMRegister: TfrmHRMRegister;
implementation
uses
clsHRMRegister, ContractForm;
{$R *.dfm}
procedure TfrmHRMRegister.InitForm;
begin
//省略
end;
procedure TfrmHRMRegister.ClassToEdit;
begin
with THRMRegister(DataObj) do
begin
img1.Picture.Graphic.LoadFromStream(Photo);//这里出错,
end;
end;
procedure TfrmHRMRegister.EditToClass;
begin
with THRMRegister(DataObj) do
begin
img1.Picture.Graphic.SaveToStream(Photo); //这里不出错
end;
end;
function TfrmHRMRegister.CheckInput:Boolean;
begin
Result := False;
//省略
Result := True;
end;
procedure TfrmHRMRegister.actPhotoExecute(Sender: TObject);
var
sFileName:string;
begin
inherited;
if dlgOpen1.Execute then
begin
sFileName := dlgOpen1.FileName;
img1.Picture.LoadFromFile(sFileName);
end;
end;
initialization
TModuleManager.Instance.RegisterModule('人事档案登记',TfrmHRMRegister);
end.
procedure TfrmHRMRegister.ClassToEdit;
var
M_JPG:TJPEGImage;
M_BMP:TBitmap;
begin
// checkpicoformat 前你檢查下 Photo.size 是多大? PHOTO是 Tmemostream;
with THRMRegister(DataObj) do
begin
M_JPG := TJPEGImage.Create;
M_BMP := TBitmap.Create;
Photo.Position:=0;
if UpperCase(CheckPicFormat(Photo)) = 'JPEG' then
begin
Photo.Position:=0;
M_JPG.LoadFromStream(Photo);
img1.Picture.Graphic := M_JPG;
end
{
这里2次判断不一样,第一个if 进去 CheckPicFormat 返回的值是BMP , else if 的时候返回的时 JPEG,
所以每次都是到错误信息那,为什么呢?
}
else if UpperCase(CheckPicFormat(Photo)) = 'BMP' then
begin
Photo.Position:=0;
M_BMP.LoadFromStream(Photo);
img1.Picture.Graphic := M_BMp;
end else
begin
TMyCommon.MsgError('读取照片出错!',Handle);
Exit;
end;
try
finally
FreeAndNil(M_JPG);
FreeAndNil(M_BMP);
end;
end;
end;