LoadFromFile
動作することが知られています。したがって、もっと平凡な説明が必要です。
最初に考えられる説明は、FileSize
それが 100 以下であり、if 条件が false と評価されるというものです。
もう 1 つの考えられる説明は、指定したファイル内のイメージが予期したものではないということです。
それ以外の場合、コードにはすべてを飲み込む例外ハンドラーがあります。そのため、 への呼び出しが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.