Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >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

复制
相关文章
用JavaScript来加载css、js文件
友儿
2023/10/21
3760
【说站】javascript如何动态加载js文件
2、通过xhr方式加载js文件,不过通过这种方式的话,就可能会面临着跨域的问题。
很酷的站长
2022/11/23
7.4K0
【说站】javascript如何动态加载js文件
自动加载jQuery的Javascript代码示例
当我们在Javascript里需要用到jQuery但又无法判断是否加载过时,可以通过下面的方法来自动判断并加载jQuery,代码如下:
魏杰
2022/12/23
1.1K0
js怎么动态加载js文件(JavaScript性能优化篇)转
下面介绍一种JS代码优化的一个小技巧,通过动态加载引入js外部文件来提高网页加载速度
stys35
2019/10/29
19.9K0
JavaScript文件加载优化
企鹅号小编
2018/01/04
1.3K0
动态加载JS文件
const scriptEl = document.createElement('script'); scriptEl.onload = scriptEl.onreadystateschange = function () { if (!this.readyState // FF onload || this.readyState == 'loaded' || this.readyState == 'complete' // IE onreadystateschange ) {
路过君
2021/12/07
20.8K0
Js文件异步加载
浏览器中渲染引擎与Js脚本引擎是互斥的,在浏览器开始渲染页面时,如果遇到<script>标签,会停止渲染当前页面,也就是说在脚本加载与执行的过程中会阻塞页面的渲染,在网速较差的环境下可能会出现浏览器页面假死的情况,这也就是尽量将<script>文件放置于<body>后的原因,Js文件异步加载就是使浏览器加载外部Js脚本文件时不阻塞渲染线程,这称为非阻塞模式加载,当然加载完成之后解析执行Js脚本时必须与渲染引擎互斥,解析执行Js脚本的时机取决于异步加载Js的方式。
WindRunnerMax
2020/08/27
10.7K0
引入JS文件和JQuery
新建 html 文件 22-jQuery.html ,编写下方程序,运行看看效果吧
鹤川
2023/03/21
6.4K0
javascript中js实现导出CSV文件功能
js直接在页面中将数组导出到CSV文件之中 //数组导出CSV文件 function exportCSV(jsonData,fileName){ if(!jsonData || jsonData.length==0){ return; } if(!fileName){ fileName="exportCSV.csv"; } let one=jsonData[0]; let csvText=""; for(let key
唯一Chat
2022/11/22
3.4K0
原生js与jquery加载页面元素比较
声明:本文为原创,作者为 对弈,转载时请保留本声明及附带文章链接:http://www.duiyi.xyz/%e5%8e%9f%e7%94%9fjs%e4%b8%8ejquery%e5%8a%a0%e8%bd%bd%e9%a1%b5%e9%9d%a2%e5%85%83%e7%b4%a0%e6%af%94%e8%be%83/
对弈
2019/09/04
11.6K0
实现图片懒加载jquery.scrollLoading.js
记录一下吧,省得那天忘记了还得去搜百度顺便分享给大家很简单的方法。 首先需要jquery.min.js插件,我用的是jQuery v2.1.3,大家可以去百度搜很多自己引入全局顶部即可,当然你的程序自带就不需要在引用JQ了。
用户8099761
2023/05/11
2.3K0
实现图片懒加载jquery.scrollLoading.js
移动端滚动加载-----jQuery 和 原生JS
从这个三个属性的介绍就可以看出来,滚动条到底部的条件即为('body').scrollTop() +(window).height() ==
Rattenking
2021/01/29
22.5K0
JavaScript、js文件、Node.js、静态文件
JavaScript(简称“JS”) 是一种解释型的脚本语言。广泛用于Web应用开发,对页面事件做出响应。
全栈程序员站长
2022/11/15
6.5K0
在Node.js中读写文件
本文翻译自Reading and Writing Files in Node.js
ccf19881030
2020/10/29
5.4K0
js 延时加载文件的代码
js 延时加载文件的代码 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf8" /> <title>js延时演示</title> <script language="JavaScript" id="my"></script> <script language="JavaScript"> setTimeout("doc
IT工作者
2022/01/01
3.2K0
Javascript文件加载:LABjs和RequireJS
传统上,加载Javascript文件都是使用<script>标签。 就像下面这样:   <script type="text/javascript" src="example.js"></scrip
ruanyf
2018/04/12
1.4K0
Javascript文件加载:LABjs和RequireJS
Javascript文件加载 ——LABjs和RequireJS
<script>标签很方便,只要加入网页,浏览器就会读取并运行。但是,它存在一些严重的缺陷。
javascript.shop
2019/09/04
1.1K0
Javascript文件加载 ——LABjs和RequireJS
原生 JS 和 jQuery 中的尺寸
element jQuery JS $(elem).width() border-box: elem.offsetWidth - padding - border content-box: elem.offsetWidth - padding $(elem).innerWidth() elem.clientWidth + scrollbar $(elem).outerWidth() elem.offsetWidth window jQuery JS $(window).width() document.d
叙帝利
2021/08/06
2.4K0
JavaScript实现加载中...效果
简述 JavaScript实现加载中...效果 开始 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Docum
xlj
2021/07/03
1.3K0
JavaScript实现加载中...效果
JavaScript实现加载中...效果
简述 JavaScript实现加载中...效果 开始 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Documen
xlj
2021/07/14
9290

相似问题

Javascript:在JS文件中加载外部JS文件

22

在中通过jQuery $ajax加载js文件

10

在我的javascript中加载JQuery.js

10

Javascript:在JS文件中加载javascript依赖项

23

有没有同步加载JS文件的JavaScript或jQuery方法?

33
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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