これは以前に尋ねられたと確信していますが、見つけられなかったようです。以下のコードを使用して、MS Access データベースから画像を表示します。ただし、次のことを行う方法を知りたいです。
・以下の手続きをとり、別の形で「呼び出す」ことはできますか?
シナリオ: 3 つのフォーム。3 つのテーブル、1 つのデータベース。TADOTable コンポーネントと TADOConnection を介してテーブルにアクセスします。
各フォームには、データベースから画像を表示するためのボタン (btnShowImage) があります。現在機能するためには、関数をフォームに追加する必要があります。次に、btnShowImage.OnClick に、以下に示す手順を追加します。これは、3 つのフォームすべてで発生します。私の質問は次のとおりです。それをより効率的にする方法はありますか。このコードを 3 つのフォームすべてに追加するのは少し面倒に思えるので、基本的に同じことを行う場合 (手順では、3 つのフォームすべてでテーブル名が異なることに注意してください)。各フォームでこのすべてのコードを使用する必要なく、これを行う (画像を表示する) より簡単な方法はありますか?
助けてくれてありがとう!
コード:
...uses
JPEG, ADODB, DB
function JpegStartsInBlob(PicField: TBlobField): integer;
var
bS: TADOBlobStream;
buffer: Word;
hx: string;
begin
Result := -1;
bS := TADOBlobStream.Create(PicField, bmRead);
try
while (Result = -1) and (bS.Position + 1 < bS.Size) do begin
bS.ReadBuffer(buffer, 1);
hx := IntToHex(buffer, 2);
if hx = 'FF' then begin
bS.ReadBuffer(buffer, 1);
hx := IntToHex(buffer, 2);
if hx = 'D8' then
Result := bS.Position - 2
else if hx = 'FF' then
bS.Position := bS.Position - 1;
end;
end;
finally
bS.Free
end;
end;
procedure Tfrm3.btnShowImageClick(Sender: TObject);
var
bS: TADOBlobStream;
Pic: TJPEGImage;
begin
bS := TADOBlobStream.Create(table1.FieldByName('Photo')
as TBlobField, bmRead);
bS.Seek(JpegStartsInBlob(table1.FieldByName('Photo') as TBlobField),
soFromBeginning);
Pic := TJPEGImage.Create;
Pic.LoadFromStream(bS);
frmOne.Image1.Picture.Graphic := Pic;
Pic.Free;
bS.Free;
end;
コードは次のサイトで見つかりました: http://delphi.about.com/od/database/l/aa030601d.htm