我正在尝试将图像加载到字符串网格单元格中
if CheckBox5.Checked = True then
begin
Ver := Ver + 1;
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile('media/belgie_vlag.bmp');
Form3.StringGrid1.Canvas.StretchDraw
(Form3.StringGrid1.CellRect(Hor,Ver),Bitmap);
Bitmap.Free;
end;
当我运行应用程序时,显示一个错误,指出无法打开.bmp文件。有什么帮助吗?
最可能的问题是找不到该文件,因为您没有指定绝对路径。您应该始终使用绝对路径(例如,C:UsersAndreas RejbrandDesktopimage.png
,而不是image.png
(。
例如,如果media
文件夹是可执行文件的同级文件夹,则绝对路径为ExtractFilePath(Application.ExeName) + 'mediabelgie_vlag.bmp'
。
然后,以下代码应正常工作:
if CheckBox5.Checked then
begin
Ver := Ver + 1;
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromFile(ExtractFilePath(Application.ExeName) + 'mediabelgie_vlag.bmp');
Form3.StringGrid1.Canvas.StretchDraw
(Form3.StringGrid1.CellRect(Hor,Ver),Bitmap);
finally
Bitmap.Free;
end;
end;
请注意更多事项:
如上所述,您必须始终使用
try..finally
块保护资源。否则,在这种情况下,如果在加载或绘制图像时引发异常,则会泄漏图像对象,从而使应用程序占用内存并获得有限的生存期。没有必要写
if mybool = True then
;if mybool then
就够了。应只在相应事件处理程序中的字符串网格中绘制。我无法判断您的代码放置在哪里,所以我不知道您的方式是否正确。