Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Delphi/Fire猴子使Listboxses更好地同步滚动

Delphi/Fire猴子使Listboxses更好地同步滚动
EN

Stack Overflow用户
提问于 2015-09-17 05:19:41
回答 2查看 1.4K关注 0票数 0

我有一种非常肮脏的方式让7个列表盒同步滚动,它们都有完全相同的高度,所以当我移动其中任何一个列表框的位置时,其他6个也应该移动到那个位置。

我所做的是假设ViewportPositionChange()是滚动的,Listbox1是被解雇的,我说

代码语言:javascript
运行
AI代码解释
复制
Listbox2.ViewportPosition := NewViewportPosition;
Listbox3.ViewportPosition := NewViewportPosition;

这一切都能工作,我只需将这段代码添加到每个Listboxses ViewportPositionChange()事件中,但是它在Andriod上太快太慢了,我仍然需要能够从任何一个列表框中滚动,但是没有方法来提高滚动的性能吗?

老实说,它并不是非常慢,但你可以感觉到它的速度不太快,而且每个列表箱都可以有很多列表框,每个列表框也可以在这些控件中有一些控件和更多的控件,所以我认为很多重新绘制的工作都完成了,这就是为什么它变得不那么快了。

示例代码

首先,在表单上放置一个Gridpanel布局,添加6列并向每个列表框中添加一个列表框,每个listbox代表一天,其中Listbox 1为周一,也将这些列表与客户端对齐。

全局变量

代码语言:javascript
运行
AI代码解释
复制
private Glistbox : array[0..6] of TListBox;

论形式创造

代码语言:javascript
运行
AI代码解释
复制
Glistbox[0] := ListBox1;
Glistbox[1] := ListBox2;
Glistbox[2] := ListBox3;
Glistbox[3] := ListBox4;
Glistbox[4] := ListBox5;
Glistbox[5] := ListBox6;
Glistbox[6] := ListBox7;

现在在每个列表上,OnViewportPositionChange

代码语言:javascript
运行
AI代码解释
复制
//Note that this would be for Listbox1 so for listbox 2 it needs to be changed acordingly
ListBox2.ViewportPosition := NewViewportPosition;
ListBox3.ViewportPosition := NewViewportPosition;
ListBox4.ViewportPosition := NewViewportPosition;
ListBox5.ViewportPosition := NewViewportPosition;
ListBox6.ViewportPosition := NewViewportPosition;
ListBox7.ViewportPosition := NewViewportPosition;

然后添加一个具有以下代码的按钮:

代码语言:javascript
运行
AI代码解释
复制
 var
    mainlayout,item1,item2 : Tlayout;
    listboxitem : TListBoxItem;
    myrec,myrec2 : TRectangle;
    lbl1,lbl2 : TLabel;
    I: Integer;
begin
for I := 0 to 6 do
begin
    listboxitem := TListBoxItem.Create(nil);

    mainlayout := TLayout.Create(nil);
    mainlayout.Align := TAlignLayout.Client;
    mainlayout.Parent:= listboxitem;

    item1 := TLayout.Create(nil);
    item1.Align:= TAlignLayout.Left;
    item1.Parent := mainlayout;

    item2 := TLayout.Create(nil);
    item2.Align:= TAlignLayout.Right;
    item2.Parent := mainlayout;

    myrec := TRectangle.Create(nil);
    myrec.Align := TAlignLayout.Client;
    myrec.Parent := item1;

    myrec2 := TRectangle.Create(nil);
    myrec2.Align := TAlignLayout.Client;
    myrec2.Parent := item2;

    lbl1 := TLabel.Create(nil);
    lbl1.Align := TAlignLayout.Client;
    lbl1.TextAlign := TTextAlign.Center;
    lbl1.Text := '1';
    myrec.AddObject(lbl1);

    lbl2 := TLabel.Create(nil);
    lbl2.Align := TAlignLayout.Client;
    lbl2.TextAlign := TTextAlign.Center;
    lbl2.Text := '2';
    myrec2.AddObject(lbl2);

    Glistbox[I].AddObject(listboxitem);
    item2.Width:= mainlayout.Width/2;
end;

有时列表框项目中可能有更多的控件,但通常情况下,我认为这将是正常的,现在添加几个项并尝试滚动。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-20 06:30:22

FMX TListBox有很大的开销,因为每个列表框项目基本上都是一个样式化的组件,被插入到滚动框中。这有利于灵活性,但不利于速度。

在Windows和OSX中,有一些像ScrollWindowEx或NSView.scrollRect + NSView.setNeedsDisplayInRect这样的函数可以通过滚动窗口的一部分而不发出画图消息来帮助提高性能。因此,您只需使列表框的一部分失效。我可以想象Android有类似的东西。但您可能需要修补FMX才能使用它。这可以提高一些性能,但仍然不是一个神奇的开关伟大的性能。类似的方法是在位图中缓存滚动框的内容,然后在滚动时将部分位图复制到屏幕上。

如果您需要非常好的列表框性能,那么您将需要开发自己的列表框,这是为了提高速度而优化的。为了获得所需的性能,我不得不对我的应用程序的OSX版本做这件事。

票数 0
EN

Stack Overflow用户

发布于 2022-08-02 04:57:54

当所有的项目共享相同的视觉结构时,也有TListView用于Fire猴子,这是比TListBox更好的选择。Ray提供了一个教程(2014年的教程),解释了每个教程适合什么:continue=934&v=XHYtwAu5fl4

用于调整滚动行为(以防有帮助),请参阅:Scrolling

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32631337

复制
相关文章
微软的新技术使面部动作与语音片段更好同步
越来越多的研究表明,只要有足够大的语料库,几乎任何人的面部动作都可以与语音片段同步。今年6月,三星(samsung)的应用科学家详细介绍了一种端到端的模型,该模型能够在人的头颅中对眉毛、嘴、睫毛和脸颊进行动画处理。仅仅几周后,Udacity发布了一个系统,该系统可以从音频叙述中自动生成独立演讲视频。
AiTechYun
2019/10/10
5130
微软的新技术使面部动作与语音片段更好同步
使用时间特征使让机器学习模型更好地工作
来源: DeepHub IMBA本文约2300字,建议阅读8分钟在本文中,通过一个实际示例讨论如何从 DateTime 变量中提取新特征以提高机器学习模型的准确性。 特征工程是构建机器学习模型最重要的方面之一。在本文中,我将通过一个实际示例讨论如何从 DateTime 变量中提取新特征以提高机器学习模型的准确性。 从日期中提取特征 一些数据集提供了日期或日期时间字段,通常在为机器学习模型构建输入特征时会被删除(除非您正在处理时间序列,显然 😃)。 但是,DateTime 是可用于提取新特征的,这些新特征
数据派THU
2022/03/04
1.8K0
如何更好地提问
一个编程学习者,尤其是刚入门的初学者,在学习过程中必然会遇到各种问题,于是难免需要向人提问寻求解答。本编程教室开张以来,我也解答了非常多的提问。今天想就“提问”这件事情说说我的一点建议: 1.提问之前先尝试搜索 你的问题可能是千万人曾经遇到过的小问题,搜索引擎就可以回答你。谷歌是个好网站,实在不行百度一下你也可能知道。 2.尽可能清楚、准确、完整地描述你的问题 不要只把你不懂的地方拿出来问而不提及问题的前因后果,否则回答者可能无法明白你的问题。尽量客观描述问题,而不是只说自己的理解和假设。在客观描述的基础上
Crossin先生
2018/04/16
8110
怎样更好地阅读源码?
最近,为了提高团队成员技术水平,考察了大家源码阅读情况。作为第一期任务,选择了spring框架,范围是spring-beans,spring-context,spring-core,以及spring-web。考核方式为:了解spring框架作用、核心概念,并选择感觉最重要的几个类进行详细阐述。
程序员架构进阶
2021/03/16
4590
怎样更好地阅读源码?
如何更好地使用Kafka?
引言| 要确保Kafka在使用过程中的稳定性,需要从kafka在业务中的使用周期进行依次保障。主要可以分为:事先预防(通过规范的使用、开发,预防问题产生)、运行时监控(保障集群稳定,出问题能及时发现)、故障时解决(有完整的应急预案)这三阶段。
从大数据到人工智能
2023/01/05
1.1K0
如何更好地使用Kafka?
如何更好地使用Kafka?
点个关注👆跟腾讯工程师学技术 引言| 要确保Kafka在使用过程中的稳定性,需要从kafka在业务中的使用周期进行依次保障。主要可以分为:事先预防(通过规范的使用、开发,预防问题产生)、运行时监控(保障集群稳定,出问题能及时发现)、故障时解决(有完整的应急预案)这三阶段。 事先预防 事先预防即通过规范的使用、开发,预防问题产生。主要包含集群/生产端/消费端的一些最佳实践、上线前测试以及一些针对紧急情况(如消息积压等)的临时开关功能。 Kafka调优原则: 1.确定优化目标,并且定量给出目标(Kafka
腾讯云开发者
2022/11/28
1.1K0
如何更好地使用Kafka?
怎样更好地阅读源码?
最近,为了提高团队成员技术水平,考察了大家源码阅读情况。作为第一期任务,选择了spring框架,范围是spring-beans,spring-context,spring-core,以及spring-web。考核方式为:了解spring框架作用、核心概念,并选择感觉最重要的几个类进行详细阐述。
程序员架构进阶
2021/03/23
3780
如何更好地管理多云
一家全球50强制造商在全球范围内可能拥有非常复杂的供应链、制造地点和供应商关系,因此需要管理供应商、客户甚至内部组织之间流动的数据。但并不是每个人都能看到一切。制造商需要解决云计算供应商关系以及多云向其组织提出的问题。鉴于此,现在是决定挖掘多云潜力的时候了。
静一
2019/05/08
5750
如何更好地管理多云
如何更好地调整学习率
【GiantPandaCV导读】learning rate对模型调优重要性不言而喻,想到超参数调优第一个可能想到的方法就是网格搜索Grid Search,但是这种方法需要大量的计算资源。之前使用fastai的时候发现其集成了一个功能叫lr_finder(), 可以快速找到合适的学习率,本文就主要分析这个15年就提出来的技术Cyclical Learning Rates。
BBuf
2021/07/23
9410
如何更好地进行云迁移?
导语 根据调研机构Gartner公司的调查数据,未来五年将有超过1万亿美元的IT支出直接或间接地受到企业将业务转向云端的影响。许多研究公司指出,混合云是增长最快的市场。而MarketsandMarkets预测,从现在到2019年云计算的市场将以复合年增长率27%的速度增长。 如今,有一些工具和方法可以帮助企业的IT团队更好地了解他们的云基础架构的性能。 根据调研机构Gartner公司的调查数据,未来五年将有超过1万亿美元的IT支出直接或间接地受到企业将业务转向云端的影响。许多研究公司指出,混合云是增长最
静一
2018/03/28
1.1K0
如何更好地进行云迁移?
使goroutine同步的方法总结
在前面并发性能对比的文章中,我们可以看到Golang处理大并发的能力十分强劲,而且开发也特别方便,只需要用go关键字即可开启一个新的协程。
李海彬
2018/10/24
1.4K0
使goroutine同步的方法总结
使 WPF 支持触摸板的横向滚动
发布于 2017-11-23 13:25 更新于 2018-08-12 08:02
walterlv
2018/09/18
1.1K0
使 WPF 支持触摸板的横向滚动
安卓使ScrollView滚动到底部代码
scrollView.fullScroll(ScrollView.FOCUS_DOWN);滚动到底部
全栈程序员站长
2022/07/15
1.2K0
Delphi语言_DELPHI
总结一下SQL语句中引号(‘)、quotedstr()、(”)、format()在SQL语句中的用法以 及SQL语句中日期格式的表示(#)、(”) 在Delphi中进行字符变量连接相加时单引号用(”’),又引号用(””)表示 首先定义变量 var AnInt:integer=123;//为了方便在此都给它们赋初值。虽然可能在引赋初值在某些情况下不对 AnIntStr:string=’456′; AStr:string=’abc’; AFieldName: string=’字符型编号’; ATableName: string=’YourTable’; ADate:Tdatetime=now; Adoquery1:tadoquery; 1,Delphi语句 adoquery1.sql.text:= ‘select 字符型编号 from YourTable where 字符型编号=’abc’ and 整型编号=123′; 等价于 adoquery1.sql.text:= ‘select ‘+AFieldName+’ from ‘+ATableName+’ where ‘+AFieldName +’=”’+AStr+”’ and 整型编号=’+AnIntStr; 也等价于 adoquery1.sql.text:= ‘select ‘+AFieldName+’ from ‘+ATableName+’ where ‘+AFieldName +’=’+QuotedStr(AStr)+’ and 整型编号=’+Inttostr(AnInt); 传到数据库服务器为: select 字符型编号 from YourTable where 字符型编号=’abc’ and 整型编号=123 2,Delphi语句中日期表示 对于access数据库: adoquery1.sql.text:= ‘select 字符型编号 from YourTable where 日期型字段=#2003-12-01#’; 等价于: adoquery1.sql.text:= ‘select 字符型编号 from YourTable where 日期型字段=#’+FormatDateTime(‘yyyy-MM-dd’,now)+’#’; 传到服务器为: select 字符型编号 from YourTable where 日期型字段=#2003-12-01# 对于MSSQL数据库: adoquery1.sql.text:= ‘select 字符型编号 from YourTable where 日期型字段=’2003-12-01”; 等价于: adoquery1.sql.text:= ‘select 字符型编号 from YourTable where 日期型字段=”’+FormatDateTime(‘yyyy-MM-dd’,now)+””; 也等价于: 等价于: adoquery1.sql.text:= ‘select 字符型编号 from YourTable where 日期型字段=’+QuotedStr(FormatDateTime(‘yyyy-MM-dd’,now)); 传到服务器为: select 字符型编号 from YourTable where 日期型字段=’2003-12-01′ 日期字段还可以这样表示 Delphi语句 adoquery1.sql.text:= ‘select 字符型编号 from YourTable where 日期型字段>=’+QuotedStr(FormatDateTime(‘yyyy-MM-dd’,now)) +’ and 日期型字段<=’+QuotedStr(FormatDateTime(‘yyyy-MM-dd’,now+1));//明天 等价于 adoquery1.sql.text:= ‘select 字符型编号 from YourTable where 日期型字段 between ‘+QuotedStr(FormatDateTime(‘yyyy-MM-dd’,now)) +’ and ‘+QuotedStr(FormatDateTime(‘yyyy-MM-dd’,now+1)); 如果用 adoquery1.sql.add(); 形式又如何操作?请用Insert语句示例 adoquery1.sql.add(‘ insert into ‘+AtableName); adoquery1.sql.add(‘ ( ‘+AFieldName+’)’); a
全栈程序员站长
2022/11/02
1.7K0
Python工匠:如何更好地使用变量
编程某种意义上是一门『手艺』,因为优雅而高效的代码,就如同完美的手工艺品一样让人赏心悦目。
腾讯NEXT学位
2019/05/16
1K0
vscode 使水平滚动条固定持续显示
1、在编辑器窗口中键盘 ctrl/command + shift + p 2、输入 setting,打开设置(json) 3、在 JSON 文件中加入以下代码:
Leophen
2022/05/07
2.5K0
企业如何更好地制定大数据策略
大数据策略会失败吗?是时候该讨论一下这个问题了。企业才刚刚掌握如何集成ERP(企业资源规划)及其他业务应用来消除业务流程中妨碍效率的孤岛。面向服务架构、软件即服务、云计算及其他现代化解决方案在协助企业实现大型应用集成过程中都发挥了一定的作用。但是如今,在大量数据的环境中组织正面临新的一系列挑战。更清楚地说,它不是一条数据流。它是由许多独立的数据流组成的,使数据互相分离或者就像以前的企业应用那样将孤立起来。 这不是因循守旧 这些数据中有许多都不像那些企业用处理的数据那样。在大规模结构化数据环境
静一
2018/03/16
6710
如何使背景照片覆盖全屏不会随屏幕滚动
html 中 css 中 使背景照片覆盖全屏 body,html{ background: url(../img/index.png); background-repeat: no-repeat; background-size: 100% 100%; background-attachment: fixed; }
江一铭
2022/06/16
1.6K0
iOS蓝牙开发如何更好地收发数据
3月中旬跳槽了,一直在新公司「填坑」,看着「先人」写的代码,觉得是有改善空间的,所以这次想聊下这部分内容——iOS蓝牙开发中如何更好地更好地收发数据。
iOS Development
2019/02/14
2.9K0
点击加载更多

相似问题

delphi Fire猴子中FPS的计算

13

Delphi Fire猴子没有正确显示字体

14

Delphi Fire猴子-运行时加载样式

213

DLL中的FMX表单(Fire猴子/delphi)

13

delphi/Fire猴子:如何在活动中实现回调?

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档