Добрый день!
Использую Ваш пример... и столкнулся с такой же траблой.. (в последнем приложенном файле та же трабла..)
Подскажите, пжл, куда копать..
procedure TForm1.FormCreate(Sender: TObject);
var
sUrl: string;
i: integer;
item:TListViewItem;
begin
with qLess do
try
if qLess.Active then Close;
Open;
while not eof do
begin
with ListView1 do
begin
Item:=listview1.Items.Add;
Item.Text := qLessLESS_NAME.AsString;
Item.Detail:= qLessLESS_DESC.AsString;
Item.Data['URL'] := qLessIMG_URL.AsString;
Item.Data['loading'] := 0; // даём знать, что можно загрузить картинку
end;
next;
end;
except
//
end;
end;
procedure TForm1.ListView1Paint(Sender: TObject; Canvas: TCanvas;
const ARect: TRectF);
var i:integer;
begin
for i := 0 to ListView1.Items.Count-1 do
begin
if (i >= 0) and (i < ListView1.Items.Count) then
begin
if ListView1.Items.Bitmap.Image<>NIL then
if (ListView1.Items.Data['loading'].AsInteger = 0) then
begin
ListView1.Items.Data['loading']:= 1;
ListView1.Items.Bitmap.LoadFromUrlToListViewItem(ListView1.Items.Data['URL'].AsString, ListView1);
end;
end;
end;
end;
{ TBitmapHelper }
procedure TBitmapHelper.LoadFromUrlToListViewItem(AUrl: string;
AListView: TListView);
var thread: TThread;
begin
thread := TThread.CreateAnonymousThread(
procedure
var
NetHTTPClient: TNetHTTPClient;
Result: TMemoryStream;
begin
Result := TMemoryStream.Create;
NetHTTPClient := TNetHTTPClient.Create(nil);
try
try
NetHTTPClient.Get(AUrl, Result);
TThread.Synchronize(TThread.CurrentThread,
procedure()
var
tempBitMap: TBitmap;
begin
tempBitMap := TBitmap.Create;
tempBitMap.LoadFromStream(Result);
if not tempBitMap.IsEmpty then
begin
self.Assign(tempBitMap);
AListView.Paint;
end;
end);
except
Result.Free;
end;
finally
NetHTTPClient.Free;
end;
end);
thread.FreeOnTerminate := true;
thread.start;
end;