-2
私はあなたの助けが必要です。 DBGridメソッドを描画します。私はテーブルDBGridを持っています。DBGridを描画する(リソースからの置き換えイメージ)
どのようにですか?私のメソッド "DrawDBGrid"にメソッド "LoadDefaultImage"を追加 ファイルパス(イメージ)がない場合、リソースからの置き換えイメージが表示されます。
マイ "LoadDefaultImage"
procedure LoadDefaultImage(AImage: TImage; aPngName: string);
var
lImage: TPngImage;
begin
lImage := TPngImage.Create();
try
lImage.LoadFromResourceName(hInstance, aPngName);
AImage.picture.Graphic := lImage;
finally
lImage.Free();
end;
end;
呼び出し方法
LoadDefaultImage(AImage, 'No image');
マイ "DrawDBGrid"
procedure DrawDBGrid(aDBGrid: TDBGrid; aGraphicFieldName: string; Column: TColumn; State: TGridDrawState; Sender: TObject;
const Rect: TRect; DataCol: Integer);
var
lRect: TRect;
lImage: TJPEGImage;
lPicturePath: string;
lDataset: TclientDataSet;
lIsFile: Boolean;
begin
lDataset := TclientDataSet(aDBGrid.DataSource.DataSet);
lPicturePath := extractfilepath(paramstr(0)) + lDataset.FieldByName(aGraphicFieldName).AsString;
lIsFile := fileexists(lPicturePath);
if (Column.Field.FieldName <> aGraphicFieldName) or (not lIsFile) then
begin
if (gdSelected in State) and (TDBGrid(Sender).Focused) then
TDBGrid(Sender).canvas.Brush.color := $E8E3A8
else
TDBGrid(Sender).canvas.Brush.color := clWhite;
aDBGrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end
else
begin
lRect.left := Rect.left + 1;
lRect.Top := Rect.Top + 1;
lRect.Right := Rect.Right - 1;
lRect.Bottom := Rect.Bottom - 1;
lImage := TJPEGImage.Create;
try
try
lImage.LoadFromFile(extractfilepath(paramstr(0)) + lDataset.FieldByName(aGraphicFieldName).AsString);
aDBGrid.canvas.StretchDraw(lRect, lImage);
except
on e: exception do
begin
raise exception.Create('Błąd wyświetlania pliku ' + lDataset.FieldByName(aGraphicFieldName)
.AsString + ''#13'' + ''#10'' + e.Message);
end;
end;
finally
lImage.Free;
end;
end;
end;
さまざまなアカウント(RedWomenなど)のいずれかで質問を投稿してから**削除し、別のアカウントから同じqを求めてください**。 – MartynA
私は同じことを尋ねるのではなく、問題を解決したので、私はそれを取り除いて、できないことを尋ねました。 – Maryna
あなたは他のユーザーのことを少しでも心配するべきです。最初に、あなたの以前のqへの回答を書いている途中に誰かがそれを削除したために投稿できなかったとします。第二に、SOのqは、それを求めた人の利益のためだけではありません。だから、自分でqの問題を解決することができれば、今後の読者の便宜のために、あなたがしたことを答弁することを検討するべきです。いずれにしても、あなたはqを求めてそれに固執するために一つの口座を選ぶべきです。 – MartynA