如何解决Listview中的奇怪字符
我有一个用于Android项目的代码,用于自动提高Listview Text的高度。固定高度时一切正常。当我激活此代码 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;
时,自动高度功能可以正常工作,但在粗体上带有奇怪的字符,有时还会出现“不允许重复”错误消息。
在Windows上工作正常,但在Android上我有。
@nuxtjs/router
这出了什么问题?
解决方法
我发现此代码有问题。 我称此过程为TThread.CreateAnonymousThread。 当我删除所有这些都很好。我发布了正确的代码以使用代码创建ListView项(在这种情况下为2个文本和1个来自url的图像)。
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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。