У меня есть программа, которая позволяет пользователю нажимать на каталог, и программа начнет загружать все изображения там и отображать их на экране, а пользователь может просматривать их, прокручивая вниз
Теперь вот проблема,после того, как программа загрузит каталог, если пользователь нажимает на другой каталог, после загрузки нового каталога несколько раз на экране остается предыдущих изображений (Form
)!, теперь вот что, если я, например, попробую сосредоточить внимание на другом контроллере (компоненте), а затем нажму на форму, останки будут очищены! , поэтому кажется, что проблема заключается в том факте, что t форма не перекрашена или что-то в этом роде!
Вот что вам нужно знать о моей программе:
1-То, что я сказал, происходит в Fullscreen
2-Я в FMX
и я использую TImage
В конце я должен упомянуть, что я уже пытался использовать form1.invalidate;
, который очищает остатки чего-то вроде изменения размера изображения, но не работает с остатками изображения (, когда яскажем, остаётся, я имею в виду целую картинку, а не остаткивроде показывает то, о чем я говорю, я думаю, что проблема связана с тем, что я выполняю свою загрузку и очистку в другом потоке, потому что я не смог воспроизвести эту проблему в однопоточном приложении
Вот код теста:
unit Unit2;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.Controls.Presentation, FMX.StdCtrls, System.Generics.Collections,
FMX.Objects;
type
TForm2 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
mImageList: TList<TImage>;
mSwitch: boolean;
implementation
uses
Threading;
{$R *.fmx}
procedure TForm2.FormCreate(Sender: TObject);
var
cImage: TImage;
I: Integer;
begin
mImageList := TList<TImage>.create;
mSwitch := false;
for I := 0 to 3 do
begin
cImage := TImage.Create(nil);
cImage.Parent := Form2;
mImageList.Add(cImage);
end;
Form2.FullScreen := true;
timer1.Interval := 3000;
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
TThread.CreateAnonymousThread(procedure
var
I: Integer;
heightSum: single;
path: string;
begin
if not(mSwitch) then
path := 'images\1\1 ('
else
path := 'images\2\2 (';
heightSum := 0;
for I := 0 to mImageList.Count - 1 do
begin
mImageList[I].Bitmap := nil;
end;
for I := 0 to mImageList.Count - 1 do
begin
mImageList[I].Bitmap.LoadFromFile(path + (i + 1).ToString + ').jpg');
mImageList[I].Width := mImageList[I].Bitmap.Width;
mImageList[I].Height := mImageList[I].Bitmap.Height;
mImageList[I].Position.X := Form2.Width / 2 - mImageList[I].Width / 2;
mImageList[I].Position.Y := heightSum;
heightSum := heightSum + mImageList[I].Height;
end;
TThread.Synchronize(nil, procedure
begin
end);
end).Start;
mSwitch := not(mSwitch);
end;
end.