ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【转】FireMonkey ListView 自动计算行高

2019-06-26 10:53:41  阅读:354  来源: 互联网

标签:ListView1 begin end FireMonkey Objects DetailObject AItem ListView 行高


说明:展示 ListView 视其每一行 Item 的 Detail 字串长度自动调整高度(可每行高度不同)。

适用:Delphi XE7 / XE8

源码下载:[原创]ListView_自动计算行高(by龟山阿卍).zip

procedure TForm1.Button1Click(Sender: TObject);
const DetailStr: array[0..2] of String =
('1234567890123456789012345678901234567890123456789012345678901234567890'
,'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'
,'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'
);
var i, r: Integer;
    Item1: TListViewItem;
begin
     for i:=0 to 100 do
     begin
          Item1 := ListView1.Items.Add;
          r := Random(3);
          Item1.Detail := DetailStr[r].Substring(0, Random(DetailStr[r].Length));
          Item1.Text := i.ToString;
     end;
end;

procedure TForm1.ListView1UpdateObjects(const Sender: TObject;
  const AItem: TListViewItem);
var R: TRectF;
begin
     if (AItem.Objects.DetailObject <> nil) and
        (AItem.Objects.DetailObject.Text <> '') then
     begin
          // 计算文字显示的区域
          R := RectF(0, 0, AItem.Objects.DetailObject.Width, 10000);
          ListView1.Canvas.MeasureText(R,
            AItem.Objects.DetailObject.Text,
            AItem.Objects.DetailObject.WordWrap,
            [], TTextAlign.Leading, TTextAlign.Leading);

          // 设定高度
          AItem.Height := Trunc(R.Height);
     end;
end;

补充:计算最后一项区域并卷到最后一项

procedure TForm1.Button2Click(Sender: TObject);
var R: TRectF;
begin
     R := ListView1.GetItemRect(ListView1.Items.Count - 1); // 取得最后一项的真实区域 (不等高也能计算)
     ListView1.ScrollViewPos := R.Bottom; // 卷到最后
end;

原文在这里:https://www.cnblogs.com/onechen/p/4353544.html

标签:ListView1,begin,end,FireMonkey,Objects,DetailObject,AItem,ListView,行高
来源: https://www.cnblogs.com/kinglandsoft/p/11088520.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有