![]() |
|
FMX Listview Image Sorunu [ÇÖZÜLDÜ] - Baskı Önizleme +- Delphi Can (https://www.delphican.com) +-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3) +--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7) +--- Konu Başlığı: FMX Listview Image Sorunu [ÇÖZÜLDÜ] (/showthread.php?tid=7478) |
FMX Listview Image Sorunu [ÇÖZÜLDÜ] - Mesut - 20-10-2023 Merhaba Delphi FMX Android projemde aşağıda görüldüğü üzere sunucudan JSon formatında verileri alıyorum ve listeliyorum tek sıkıntı yaşadığım konu ise öncesinde Timage nesnesine sunucudaki resmi yüklüyorum ve Toggle Design Mod'da oluşturmuş olduğum Image3 nesnesine bu Timage nesnesindeki resmi yüklüyorum, bu durumda sürekli ayrı resim (en son kayıda ait resimler) yükleniyor bu sorunu nasıl aşabilirim yardımcı olur musunuz function TForm1.LoadData(Aranan:String):Boolean;
var
i,j:Integer;
LItem: TListViewItem;
Parametre,Parametre1,Parametre2,Parametre3,Parametre4:TStringList;
donen:String;
jSubPar: TJSONPair;
jsonStringData,StokKodu,StokAdi : String;
JsonValue: TJSONValue;
jsonData,JSONObject ,musteriler: TJSONObject;
dataArray: TJSONArray;
dataItem: TJSONObject;
ID,CC_CODE,CC_NAME:String;
Begin
try
try
Result:=True;
Result:=True;
Parametre:=TStringList.Create;
Parametre.Clear;
Parametre.Add('function=PurchasePriceResearchHistory');
Parametre.Add('aranan='+Aranan);
donen:= GetUrlJson(HTTP_ADREES,'?function=','PurchasePriceResearchHistory',Parametre);
jsonData := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(donen), 0) as TJSONObject;
jsonDataList := TList<TJSONObject>.Create;
try
dataArray :=jsonData.GetValue('Data') as TJSONArray;
if (dataArray.Count>0) then
Begin
dataArray.Items[0].TryGetValue('PURCHASE_PRICE_HISTORY_ID', ID);
dataArray.Items[0].TryGetValue('PRODUCT_CODE',CC_CODE);
dataArray.Items[0].TryGetValue('PRODUCT_NAME',CC_NAME);
for I := 0 to dataArray.Count - 1 do
begin
musteriler := dataArray.Get(i) as TJSONObject;
jsonDataList.Add(musteriler);
Inc(j);
end;
End;
j:=1;
ListView1.Items.Clear;
ListView1.BeginUpdate;
for I := 0 to dataArray.Count-1 do
Begin
musteriler:= (dataArray.Get(i) as TJSONObject);
Application.ProcessMessages;
LItem := ListView1.Items.Add;
LItem.Height:=70;
LItem.Tag:=musteriler.GetValue<Integer>('PURCHASE_PRICE_HISTORY_ID');
LItem.ButtonText:=musteriler.GetValue<String>('CUSTOMER_TITLE')+' '+musteriler.GetValue<String>('PRODUCT_NAME');
LItem.Detail:=musteriler.GetValue<String>('PRODUCT_NAME');
LItem.Text := musteriler.GetValue<String>('CUSTOMER_TITLE')+' - '+musteriler.GetValue<String>('PRODUCT_NAME') ;
TListItemText(LItem.Objects.FindDrawable('Text1')).SelectedTextColor:=TAlphaColorRec.Darkgreen;
TListItemText(LItem.Objects.FindDrawable('Text1')).Text:=musteriler.GetValue<String>('PRODUCT_NAME');
TListItemText(LItem.Objects.FindDrawable('Text2')).Text:=musteriler.GetValue<String>('CUSTOMER_TITLE');
TListItemText(LItem.Objects.FindDrawable('Text4')).Text:=musteriler.GetValue<String>('RECORD_DATE');
TListItemText(LItem.Objects.FindDrawable('Text5')).Text:='Oluşturma Tarihi';
LoadImageFromURL(Image2,SERVER_IMAGE_ADDRESS+musteriler.GetValue<String>('URL_PATH'));
TListItemImage(LItem.Objects.FindDrawable('Image3')).Bitmap:=Image2.Bitmap;
Inc(j);
End;
except
raise;
end;
finally
ListView1.EndUpdate;
end;
if j=0 then
Begin
ShowMessage('Listelenecek Data yok.!');
End else
Begin
End;
except on E: Exception do
end;
End;
Cvp: FMX Listview Image Sorunu [ÇÖZÜLDÜ] - Mesut - 20-10-2023 Merhaba Sorunu Şu Şekilde çözdüm Öncelikle ImageList Adında Bitmap türünde TList oluşturdum, Sonra ImageListLoad isimli bir fonksiyon oluşturup resimleri ImageList içine doldurdum. Daha sonra her satırda Bu liste içine karşılık gelen değerleri Image3 içinde gösterdim işim bittikten sonra da ImageList Free yaparak. gereksiz yük bindirme olayını kaldırdım. İçerikleri aşağıda paylaşıyorum umarım ihtiyacı olanın işine yarar. function TForm1.LoadData(Aranan:String):Boolean;
var
i,j:Integer;
LItem: TListViewItem;
Parametre,Parametre1,Parametre2,Parametre3,Parametre4:TStringList;
donen:String;
jSubPar: TJSONPair;
jsonStringData,StokKodu,StokAdi : String;
JsonValue: TJSONValue;
jsonData,JSONObject ,musteriler: TJSONObject;
dataArray: TJSONArray;
dataItem: TJSONObject;
ID,CC_CODE,CC_NAME:String;
ImageList: TList<TBitmap>;
Begin
try
try
Result:=True;
Result:=True;
Parametre:=TStringList.Create;
Parametre.Clear;
Parametre.Add('function=PurchasePriceResearchHistory');
Parametre.Add('aranan='+Aranan);
donen:= GetUrlJson(HTTP_ADREES,'?function=','PurchasePriceResearchHistory',Parametre);
jsonData := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(donen), 0) as TJSONObject;
jsonDataList := TList<TJSONObject>.Create;
try
dataArray :=jsonData.GetValue('Data') as TJSONArray;
if (dataArray.Count>0) then
Begin
dataArray.Items[0].TryGetValue('PURCHASE_PRICE_HISTORY_ID', ID);
dataArray.Items[0].TryGetValue('PRODUCT_CODE',CC_CODE);
dataArray.Items[0].TryGetValue('PRODUCT_NAME',CC_NAME);
for I := 0 to dataArray.Count - 1 do
begin
musteriler := dataArray.Get(i) as TJSONObject;
jsonDataList.Add(musteriler);
Inc(j);
end;
End;
ImageList := ImageListLoad(SERVER_IMAGE_ADDRESS, dataArray);
j:=1;
ListView1.Items.Clear;
ListView1.BeginUpdate;
for I := 0 to dataArray.Count-1 do
Begin
musteriler:= (dataArray.Get(i) as TJSONObject);
Application.ProcessMessages;
LItem := ListView1.Items.Add;
LItem.Height:=70;
LItem.Tag:=musteriler.GetValue<Integer>('PURCHASE_PRICE_HISTORY_ID');
LItem.ButtonText:=musteriler.GetValue<String>('CUSTOMER_TITLE')+' '+musteriler.GetValue<String>('PRODUCT_NAME');
LItem.Detail:=musteriler.GetValue<String>('PRODUCT_NAME');
LItem.Text := musteriler.GetValue<String>('CUSTOMER_TITLE')+' - '+musteriler.GetValue<String>('PRODUCT_NAME') ;
TListItemText(LItem.Objects.FindDrawable('Text1')).SelectedTextColor:=TAlphaColorRec.Darkgreen;
TListItemText(LItem.Objects.FindDrawable('Text1')).Text:=musteriler.GetValue<String>('PRODUCT_NAME');
TListItemText(LItem.Objects.FindDrawable('Text2')).Text:=musteriler.GetValue<String>('CUSTOMER_TITLE');
TListItemText(LItem.Objects.FindDrawable('Text4')).Text:=musteriler.GetValue<String>('RECORD_DATE');
TListItemText(LItem.Objects.FindDrawable('Text5')).Text:='Oluşturma Tarihi';
// LoadImageFromURL(Image2,SERVER_IMAGE_ADDRESS+musteriler.GetValue<String>('URL_PATH'));
//TListItemImage(LItem.Objects.FindDrawable('Image3')).Bitmap:=Image2.Bitmap;
TListItemImage(LItem.Objects.FindDrawable('Image3')).Bitmap:=ImageList[i];
Inc(j);
End;
ImageList.Free;
except
raise;
end;
finally
ListView1.EndUpdate;
end;
if j=0 then
Begin
ShowMessage('Listelenecek Data yok.!');
End else
Begin
End;
except on E: Exception do
end;
End;
Bu da ImageListLoad Fonksiyonunun içeriği function ImageListLoad(const AServerAddress: string; const ADataArray: TJSONArray): TList<TBitmap>;
var
IdHTTP: TIdHTTP;
SSLIOHandler: TIdSSLIOHandlerSocketOpenSSL;
ResimURL: string;
ResimStream: TMemoryStream;
I: Integer;
Bitmap: TBitmap;
begin
Result := TList<TBitmap>.Create;
IdHTTP := TIdHTTP.Create(nil);
SSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
try
IdHTTP.IOHandler := SSLIOHandler;
ResimStream := TMemoryStream.Create;
try
for I := 0 to ADataArray.Count - 1 do
begin
ResimURL := AServerAddress + ADataArray.Items[I].GetValue<string>('URL_PATH');
try
IdHTTP.Get(ResimURL, ResimStream);
ResimStream.Position := 0;
Bitmap := TBitmap.Create;
Bitmap.LoadFromStream(ResimStream);
Result.Add(Bitmap);
except
Result.Add(nil);
end;
ResimStream.Clear;
end;
finally
ResimStream.Free;
end;
finally
IdHTTP.Free;
SSLIOHandler.Free;
end;
end;
|