未熟な私にお知恵をおかしください。
複数のImageに、効率よくJpeg画像を入れたいのですが、どうしたら良いでしょうか?
Imageは10個程度なのですが、必ず10ではなく、入らない場合もあります。
よろしくお願いします・
画像の数だけTImageを生成すれば済む問題です?
それとも一定数かつ一定サイズのTImageに効率よく分配する話です?
はたまた1つのTCanvasを複数のイメージで効率よく埋める話です?
動的にTImageを作成するなら CreateImage
この場合表示させる場合 Left や Top を考えないといけない
すでにフォームに配置されているTImageにロードするなら CreateImage2
procedure TForm1.CreateImage(APath: String);
var
SearchRec: TSearchRec;
I: Integer;
FileName: String;
begin
ImageCount := 0;
I := FindFirst (APath,faAnyFile,SearchRec);
while I = 0 do
begin
FileName := ExtractFilePath(APath) + SearchRec.Name;
SetLength(Images,ImageCount+1);
Images[ImageCount] := TImage.Create(Self);
Images[ImageCount].Picture.LoadFromFile(FileName);
I := FindNext(SearchRec);
end;
FindClose (SearchRec);
end;
procedure TForm1.CreateImage2(APath: String);
var
SearchRec: TSearchRec;
ComponentIndex: Integer;
I: Integer;
FileName: String;
begin
ImageCount := 0;
ComponentIndex := -1;
I := FindFirst (APath,faAnyFile,SearchRec);
while I = 0 do
begin
SetLength(Images,ImageCount+1);
I := 0;
while I < Form1.ComponentCount -1 do
begin
if (Form1.Components[I] is TImage) and (ComponentIndex < I) then
begin
FileName := ExtractFilePath(APath) + SearchRec.Name;
TImage(Form1.Components[I]).Picture.LoadFromFile(FileName);
ComponentIndex := I;
I := Form1.ComponentCount;
end;
Inc(I);
end;
I := FindNext(SearchRec);
end;
FindClose (SearchRec);
end;
procedure TForm1.DestoryImage;
var
I: Integer;
begin
for I:=0 to High(Images) do
begin
Images[I].Free;
end;
SetLength(Images,0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DestoryImage;
CreateImage('c:\windows\*.bmp');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
CreateImage2('c:\windows\*.bmp');
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DestoryImage;
end;
お二方とても参考になりました。
ありがとうございました。
お二方とても参考になりました。
ありがとうございました。
ツイート | ![]() |