[英]How to change picture delphi timage in run time
我以加载背景图像的形式使用 timage。 问题是当我在运行时选择另一张图片并通过 Img_Bk.Picture.LoadFromFile( SaveFileName ); 更改它时; 它不起作用(图片没有改变)。 我的意思是它显示以前的图片并且在运行时不显示新图片。 我想在我公司运行时更改应用程序背景图像,主要形式是 mdi 形式的用户。 我使用德尔福 7 。
try
Img_Bk.Picture := nil ;
if FileSize > 100 then
begin
Img_Bk.Picture.LoadFromFile( SaveFileName );
end;
Img_Bk.Stretch := True ;
except
end;
已知LoadFromFile
可以工作。 所以必须有一个更平淡的解释。
第一种可能的解释是FileSize
不大于100,if条件的计算结果为false。
另一种可能的解释是您指定的文件中的图像不是您期望的图像。
否则,您的代码将吞下所有异常处理程序。 因此,当对LoadFromFile
的调用失败并引发异常时,您的代码会忽略该异常并继续进行,就好像没有发生任何未发生的事情一样。 删除try / except,并处理将显示的错误。
您要学习的真正教训是永远不要再次编写这样的异常处理程序。
这个程序应该向你证明LoadFromFile
很好:
program ImageDemo;
uses
Types, Math, IOUtils, SHFolder, Forms, Controls, StdCtrls, ExtCtrls, jpeg;
var
Form: TForm;
Image: TImage;
Timer: TTimer;
ImageIndex: Integer = -1;
MyPictures: string;
Images: TStringDynArray;
type
THelper = class
class procedure Timer(Sender: TObject);
end;
class procedure THelper.Timer(Sender: TObject);
begin
inc(ImageIndex);
if ImageIndex>high(Images) then
ImageIndex := 0;
if ImageIndex>high(Images) then
exit;
Image.Picture.LoadFromFile(Images[ImageIndex]);
end;
function GetMyPictures: string;
var
Str: array[0..260] of Char;
begin
if SHGetFolderPath(0, CSIDL_MYPICTURES, 0, 0, Str) = S_OK then
Result := Str;
end;
procedure BuildForm;
begin
Form.ClientWidth := 700;
Form.ClientHeight := 500;
Image := TImage.Create(Form);
Image.Parent := Form;
Image.Align := alClient;
Image.Stretch := True;
Timer := TTimer.Create(Form);
Timer.OnTimer := THelper.Timer;
Timer.Interval := 100;
end;
begin
MyPictures := GetMyPictures;
Images := TDirectory.GetFiles(MyPictures, '*.jpg', TSearchOption.soAllDirectories);
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm, Form);
BuildForm;
Application.Run;
end.
我今天遇到了同样的问题。 调用 LoadFromFile() 后,图像不会改变。 我尝试过刷新、重绘、无效和更新 -> 没有任何帮助。 然后我发现调整 from 的大小立即更新了图像。 最后我发现将属性 Visible 设置为 false 并返回到 true 也会更新图像。
FormMain.Image1.Visible := false;
FormMain.Image1.Picture.LoadFromFile(newImageFileName);
FormMain.Image1.Visible := true;
也许不是最好的,但它对我有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.