Listview中的奇怪字符 [英] Strange characters in Listview
问题描述
我有一个用于Android项目的代码,用于自动提高Listview Text的高度.固定高度时一切正常.当我激活此代码 LText.Height:= ListView1.getItemTextHeight(LText)+10;
时,自动高度功能可以正常工作,但带有粗体的奇怪字符,有时还会出现不允许重复"字样.错误信息.在Windows上工作正常,但在Android上我有.
I have this code for an Android project for autoheight the Listview Text. Everything works fine with fix height. When I activate this code LText.Height := ListView1.getItemTextHeight(LText)+10;
the autoheight works fine but came with that strange characters on Bold and some times a "Duplicates not allowed" error message.
In Windows works fine but on Android I have this.
for i := 0 to FDMemTable1.RecordCount -1 do
begin
UName := (FDMemTable1.FieldByName('username').Value);
Descr := (FDMemTable1.FieldByName('descr').Value);
Ext := (FDMemTable1.FieldByName('ext').Value);
Url := (FDMemTable1.FieldByName('vurl').Value);
FCanUpdate := False;
LItem := ListView1.Items.Add;
LItem.Data['UName'] := UName;
LItem.Data['Descr'] := Descr;
LItem.Data['Ext'] := Ext;
LItem.Data['Url'] := Url;
FCanUpdate := True;
LItem.Adapter.ResetView(LItem);
FDMemTable1.Next;
end;
ListView1.EndUpdate;
end;
procedure TForm7.ListView1UpdatingObjects(const Sender: TObject;
const AItem: TListViewItem; var AHandled: Boolean);
var
h: integer;
LText: TListItemText;
begin
h := 2;
LText := AItem.Objects.FindObjectT<TListItemText>('UName_text');
if LText = nil then
begin
LText := TListItemText.Create(AItem);
LText.Name := 'UName_text';
LText.PlaceOffset.X := 18;
LText.PlaceOffset.Y := h;
LText.TextColor := TAlphaColorRec.Black;
LText.TextAlign := TTextAlign.Leading;
LText.TextVertAlign := TTextAlign.Leading;
LText.Font.Size := 14;
LText.Font.Style := [TFontStyle.fsBold];
end;
LText.Width := (Sender as TListView).Width - 18;
LText.Text := AItem.Data['UName'].AsString;
LText.Height := 22;
h := Round(h + LText.Height +7);
if AItem.Data['Descr'].AsString <> '' then
begin
LText := AItem.Objects.FindObjectT<TListItemText>('Descr_text');
if LText = nil then
begin
LText := TListItemText.Create(AItem);
LText.Name := 'Descr_text';
LText.PlaceOffset.X := 18;
LText.PlaceOffset.Y := h;
LText.TextColor := TAlphaColorRec.Black;
LText.TextAlign := TTextAlign.Leading;
LText.TextVertAlign := TTextAlign.Leading;
LText.WordWrap := True;
LText.Font.Size := 13;
LText.Font.Style := [];
end;
LText.Width := (Sender as TListView).Width - 20;
LText.Text := AItem.Data['Descr'].AsString;
// LText.Height := ListView1.getItemTextHeight(LText)+10;
LText.Height := 30;
h := Round(h + LText.Height + 5);
end;
AItem.Height := h;
AHandled := True;
end;
我手机上的屏幕截图.
The screenshot from my phone.
这出了什么问题?
推荐答案
我发现此代码存在问题.我称此过程为TThread.CreateAnonymousThread.当我删除这一切都很好.我发布了正确的代码以使用代码创建ListView项(在这种情况下,是2个文本和1个来自url的图像).
I find the problem with this code. I was call this procedure as TThread.CreateAnonymousThread. When I remove this all are fine. I post the right code to create ListView items ( in this case 2 text and 1 image from url) with code.
procedure TForm9.LVC;
var
i, TLikes, LVIHeight, ImgH, ImgW: integer;
UName, Descr, Ext, ThumbUrl, Url: UnicodeString;
LItem : TListViewItem;
begin
RESTRequest1.Execute;
FDMemTable1.First;
for i := 0 to FDMemTable1.RecordCount -1 do
begin
UName := FDMemTable1.FieldByName('username').Value;
Descr := FDMemTable1.FieldByName('descr').Value;
Ext := FDMemTable1.FieldByName('ext').Value;
ThumbUrl := FDMemTable1.FieldByName('image_url').Value;
Url := FDMemTable1.FieldByName('vurl').Value;
TLikes := FDMemTable1.FieldByName('TotalLikes').Value;
if FDMemTable1.FieldByName('imgh').Value <> '' then
begin
ImgH := StrToInt(FDMemTable1.FieldByName('imgh').Value);
ImgW := StrToInt(FDMemTable1.FieldByName('imgw').Value);
LVIHeight := round((ListView1.Width / ImgW) * ImgH);
end
else
begin
ImgH := 0;
ImgW := 0;
LVIHeight := 0;
end;
ListView1.BeginUpdate;
FCanUpdate := False;
LItem := ListView1.Items.Add;
LItem.Data['UName'] := UName;
LItem.Data['Descr'] := Descr;
LItem.Data['Ext'] := Ext;
LItem.Data['ThumbUrl'] := ThumbUrl;
LItem.Data['Url'] := Url;
LItem.Data['Likes'] := TLikes;
LItem.Data['ImgH'] := ImgH;
LItem.Data['ImgW'] := ImgW;
LItem.Data['LVIHeight'] := LVIHeight;
FCanUpdate := True;
LItem.Adapter.ResetView(LItem);
ListView1.EndUpdate;
FDMemTable1.Next;
end;
end;
procedure TForm9.FormCreate(Sender: TObject);
begin
FCanUpdate := True;
end;
procedure TForm9.FormShow(Sender: TObject);
begin
LVC;
end;
procedure TForm9.ListView1UpdatingObjects(const Sender: TObject;
const AItem: TListViewItem; var AHandled: Boolean);
var
h: integer;
LText: TListItemText;
LImage: TListItemImage;
LImageURL: String;
foto : TBitmap;
begin
if not FCanUpdate then
Exit;
h := 2;
LText := AItem.Objects.FindObjectT<TListItemText>('UName_text');
if LText = nil then
begin
LText := TListItemText.Create(AItem);
LText.Name := 'UName_text';
LText.PlaceOffset.X := 18;
LText.PlaceOffset.Y := h;
LText.TextColor := TAlphaColorRec.Black;
LText.TextAlign := TTextAlign.Leading;
LText.TextVertAlign := TTextAlign.Leading;
LText.Font.Size := 14;
LText.Font.Style := [TFontStyle.fsBold];
end;
LText.Width := (Sender as TListView).Width - 18;
LText.Text := AItem.Data['UName'].AsString;
LText.Height := 22;
h := Round(h + LText.Height +7);
if AItem.Data['ThumbUrl'].AsString <> '' then
begin
LImage := AItem.Objects.FindObjectT<TListItemImage>('MImage');
if LImage = nil then
begin
LImage := TListItemImage.Create(AItem);
LImage.Name := 'MImage';
LImage.Bitmap:=Nil;
LImage.Align := TListitemalign.Leading;
LImage.VertAlign := TListItemAlign.Leading;
LImage.ScalingMode := TImageScalingMode.StretchWithAspect;
LImage.PlaceOffset.X := 0;
LImage.PlaceOffset.Y := h;
LImage.Bitmap := TBitmap.Create;
LImage.OwnsBitmap := True;
LImage.Visible := True;
end;
LImage.Width := ListView1.Width;
LImage.Height := AItem.Data['LVIHeight'].AsInteger;
LImageURL := AItem.Data['ThumbUrl'].AsString;
TThread.CreateAnonymousThread(
procedure
begin
foto := TBitmap.Create;
fnLoadImgFromUrl(LImageURL, foto);
LImage.OwnsBitmap := True;
LImage.Bitmap := foto;
end).Start;
h := Round(h + LImage.Height + 5);
end;
if AItem.Data['Descr'].AsString <> '' then
begin
LText := AItem.Objects.FindObjectT<TListItemText>('Descr_text');
if LText = nil then
begin
LText := TListItemText.Create(AItem);
LText.Name := 'Descr_text';
LText.PlaceOffset.X := 18;
LText.PlaceOffset.Y := h;
LText.TextColor := TAlphaColorRec.Black;
LText.TextAlign := TTextAlign.Leading;
LText.TextVertAlign := TTextAlign.Leading;
LText.WordWrap := True;
LText.Font.Size := 13;
LText.Font.Style := [];
end;
LText.Width := (Sender as TListView).Width - 20;
LText.Text := AItem.Data['Descr'].AsString;
LText.Height := ListView1.getItemTextHeight(LText)+10;
h := Round(h + LText.Height + 5);
end;
AItem.Height := h;
AHandled := True;
end;
这篇关于Listview中的奇怪字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!