Delphiはデータベースに任意のデータを入れることができるコントロールを提供しないと多くの人が文句を言います。コードでそれを実装することは難しいことではありませんが、コントロールを持っている方が便利です。今回、このようなコントロールを作成するために時間をかけました。直接ドラッグアンドドロップできます。データベースへの任意のデータ型の書き込みをサポートします。また、データベースから読み込んでストリーミングしたり、直接ファイルとして保存したりすることもできます。さらに、よく使用される画像の処理を追加しました。jpgまたはgif形式で画像を保存すると、非常に便利で、画像に直接表示できます。
ユニットRaDBOLE;
インターフェース
使用する
SysUtils、Classes、DB、DBTables、JPEG、ExtCtrls、GIFCtrl;
タイプ
TImageType =(itBMP、itJPG、itGIF、itOther);
オブジェクトのTOnSaveData = procedure(Sender:TObject);
オブジェクトのTOnLoadData = procedure(Sender:TObject);
オブジェクトのTOnShowImage = procedure(Sender:TObject; ImageType:TImageType);
タイプ
TRaDBOLE = class(TComponent)
民間
fDataSet:TDataSource;
fDataField:文字列;
fImage:TImage;
fGifImage:TRxGIFAnimator;
fOnSaveData:TOnSaveData;
fOnLoadData:TOnLoadData;
fOnShowImage: TOnShowImage;
保護された
公衆
コンストラクターCreate(AOwner:TComponent); オーバーライド;
{データベースに保存}
function SaveToDatabase(AFileName:string):boolean;
{データベースに追加}
function AppendToDatabase(AFileName:string):boolean;
{データベースからストリームに読み込む}
function LoadToStream(var AStream:TStream):ブール値。
{データベースからファイルに読み取る}
function LoadToFile(AFileName:string):boolean;
{写真を読む}
プロシージャGetImage;
公開された
プロパティDataSet:TDataSource読み取りfDataSet書き込みfDataSet;
プロパティDataField:文字列読み取りfDataField書き込みfDataField;
プロパティImage:TImage読み取りfImage書き込みfImage;
プロパティGifImage:TRxGIFAnimator読み取りfGifImage書き込みfGifImage;
プロパティOnSaveData:TOnSaveData読み取りfOnSaveData書き込みfOnSaveData;
プロパティOnLoadData:TOnLoadData読み取りfOnLoadData書き込みfOnLoadData;
プロパティOnShowImage:TOnShowImage読み取りfOnShowImage書き込みfOnShowImage;
終わり;
手順登録;
実装
手順登録;
ベギン
RegisterComponents( 'Rarnu Components'、[TRaDBOLE]);
終わり;
{TRADBOLE}
関数TRaDBOLE.AppendToDatabase(AFileName:string):ブール値;
ました
mm:tmemorystream;
ベギン
結果:=真;
mm:= tmemorystream.Create;
mm.LoadFromFile(AFileName);
mm.Position:= 0;
試す
fDataSet.DataSet.Append;
tblobfield(fDataSet.DataSet.FieldByName(fDataField))。LoadFromStream(mm);
fDataSet.DataSet.Post;
を除いて
結果:= False;
終わり;
mm.Free;
もしAssigned(OnSaveData)なら
OnSaveData(Self);
終わり;
コンストラクタTRaDBOLE.Create(AOwner:TComponent);
ベギン
継承されたCreate(AOwner);
fDataSet:= nil;
fDataField:= '';
fImage:= nil;
終わり;
プロシージャTRaDBOLE.GetImage;
ました
ww:tmemorystream;
JPEG:TJPEGImage;
IT:TImageType;
ベギン
fImage = nilの場合は終了します。
ww:= tmemorystream.Create;
tblobfield(fDataSet.DataSet.FieldByName(fDataField))。SaveToStream(ww);
試す
fImage.Picture.Assign(fDataSet.DataSet.FieldByName(fDataField));
IT:= itBMP;
を除いて
試す
JPEG:= TJPEGImage.Create;
JPEG.Assign(fDataSet.DataSet.FieldByName(fDataField));
fImage.Picture.Assign(JPEG);
IT:= itJPG;
を除いて
試す
fGifImage = nilの場合は終了します。
fGifImage.Image.Assign(fDataSet.DataSet.FieldByName(fDataField));
IT:= itGIF;
を除いて
IT:= itOther;
終わり;
終わり;
終わり;
//fImage.Picture.Graphic.LoadFromStream(ww);
ww。無料;
もしAssigned(OnShowImage)なら
OnShowImage(Self、IT);
終わり;
function TRaDBOLE.LoadToFile(AFileName:string):boolean;
ました
tt:tmemorystream;
ベギン
結果:=真;
tt:= tmemorystream.Create;
試す
tblobfield(fDataSet.DataSet.FieldByName(fDataField))。SaveToStream(tt);
tt.Position:= 0;
tt.SaveToFile(AFileName);
を除いて
結果:= False;
終わり;
tt。無料;
Assigned(OnLoadData)の場合
OnLoadData(Self);
終わり;
関数TRaDBOLE.LoadToStream(var AStream:TStream):ブール値;
ました
tt:tmemorystream;
ベギン
結果:=真;
tt:= tmemorystream.Create;
試す
tblobfield(fDataSet.DataSet.FieldByName(fDataField))。SaveToStream(tt);
tt.Position:= 0;
AStream:= tt;
を除いて
結果:= False;
終わり;
tt。無料;
Assigned(OnLoadData)の場合
OnLoadData(Self);
終わり;
関数TRaDBOLE.SaveToDatabase(AFileName:string):ブール値;
ました
mm:tmemorystream;
ベギン
結果:=真;
mm:= tmemorystream.Create;
mm.LoadFromFile(AFileName);
mm.Position:= 0;
試す
fDataSet.Edit;
tblobfield(fDataSet.DataSet.FieldByName(fDataField))。LoadFromStream(mm);
fDataSet.DataSet.Post;
を除いて
結果:= False;
終わり;
mm.Free;
もしAssigned(OnSaveData)なら
OnSaveData(Self);
終わり;
終わり。
---------------------
著者:風の韻
出典:CSDN
オリジナル:https://blog.csdn.net/ttpage/article/details/9161695
著作権表示:この記事は元のブロガー記事です。転載する際は、ブログ投稿へのリンクを添付してください。