Известно, что LoadFromFile
работает. Так что должно быть более прозаическое объяснение.
Первое возможное объяснение состоит в том, что FileSize
не больше 100, а условие if оценивается как ложное.
Другое возможное объяснение состоит в том, что изображение в указанном вами файле не является тем, которое вы ожидаете.
В противном случае в вашем коде есть обработчик исключений «глотать все». И поэтому, когда вызов 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.
person
David Heffernan
schedule
26.01.2014