1
3
您可能正在为两个网格实现消息覆盖。gridx滚动gridy,依次滚动gridx,依次…所以。您可以用标记包围块来保护表面滚动代码。
类似的网格代码。顺便说一句,您不应该需要设置crollpos。 编辑:
|
2
3
我得到了一个部分的,但现在完整的工作解决方案(至少两个tmemo)。 我的意思是部分的,因为它只监听一个tmemo上的更改,而不监听另一个tmemo上的更改… 我的意思是充分工作,因为这不取决于做了什么… 这就像在一个备忘录上放上和在另一个备忘录上一样简单… 它与消息无关,但因为我试图通过捕获消息wm_hscroll等获得一个有效的解决方案…我留下代码是因为它能工作…我以后会努力改进的…例如,只捕获wm_绘画,或以其他方式…但现在,我把它当作我拥有的,因为它起作用了…我找不到更好的东西… 以下是有效的代码:
它适用于所有方式使滚动改变… 笔记:
我将尝试改进它:当在memo2上做一些事情时,memo1滚动仍然是同步的… 我认为它可以为所有大多数有滚动条的控件工作,而不仅仅是tmemo… |
3
2
正如我所说的… 在效率、干净的代码和双向性方面,这是一个更好的解决方案(而不是最终的解决方案)。任何一个改变都会影响另一个… 请阅读对代码的评论,了解每个句子是什么…这很棘手…但主要的想法和以前一样…将另一个tmemo水平滚动条设置为用户正在执行的tmemo上的滚动条…无论用户做什么,移动鼠标并选择文本,按左键、右键、主页键、结束键,使用鼠标水平滚轮(并非所有都有),拖动滚动条,按水平滚动条的任何部分等… 主要想法是…对象需要重新绘制,所以将另一个对象水平滚动条与此对象相同… 第一部分只是向tmemo类添加内容,它只是创建一个新的派生类,但类名相同,但仅用于声明的单元。 在tform声明之前将其添加到interface部分,这样tform将看到这个新的tmemo类而不是普通的tmemo类:
下一部分是新tmemo类以前声明的实现。 在您预先输入的任何位置将此添加到实现部分:
现在,最后一部分,告诉每个tmemo必须同步的另一个备忘录是什么。 在您的实现部分,对于Form1创建事件,添加如下内容:
记住,我们已经将SyncMemo成员添加到我们的特殊新tmemo类中,它只是为了这个,告诉彼此哪个是另一个。 现在对两个tmemo jsut进行一点配置,使其能够完美地工作:
运行它,看看两个水平滚动条是如何同步的…
这不是最终版本的问题在于:
如果有人知道如何模拟hidden或使getscrollpos不返回零,请评论,这是我唯一需要为最终版本修复的东西。 笔记:
以下是同步两个滚动条的新WindowProc过程示例,可能是针对懒惰的人,也可能是针对像复制和粘贴这样的人:
希望有人能解决隐藏一个滚动条和GetScrollpos返回零的问题!!!! |
4
2
我找到了解决办法…我知道这很棘手…但至少它是完全正常的… 而不是试图隐藏水平滚动条…我使它显示在可见区域之外,所以用户看不到它… 棘手的部分:
就是这样…完成!!!!水平滚动条超出可见区域…你可以放在你想要的地方,给它你想要的尺寸…水平滚动条不会被用户看到,也不会被隐藏,所以getscrollpos将正常工作…我知道很棘手,但功能齐全。 以下是存档的完整代码: 在接口部分的tform声明之前,因此tform将看到这个新的tmemo类,而不是普通的tmemo类:
在您预先输入的任何地方的实现部分:
另外,在您预先输入的任何地方的实现部分:
就是这样,伙计们!我知道这很棘手,但功能齐全。 请注意,我已经在新的WindowProc上更改了评估或条件的顺序…它只是为了提高所有其他消息的速度,所以尽可能减少所有消息的处理延迟。 希望有一天我会知道如何用实际的(计算的或读取的)tmemo水平滚动条高度来替换这20个。 |
5
1
谢谢
所以我只是用:
注意:其中两个像素可能是因为父面板
谢谢。 如果你预先准备好了,就把它们放在一个大的帖子里,但我认为最好不要把它们混在一起。 在回答“Sertac Akyuz”时(很抱歉在这里这么做,但我不知道如何在您的问题旁边发布它们):
重要的
:我发现一个完美的解决方案不能通过消息捕获完成,因为有一种情况会导致滚动,但没有消息
|
Some1Else · 函数在Delphi中重新创建TForm 2 年前 |
Agmcz · Delphi安卓库。so未安装(AAB) 2 年前 |
nader · 如何使用delphi在web上提交表单 6 年前 |
kwadratens · Delphi中的卡方分布函数代码 6 年前 |
user9672569 · 如何在完整的位图图像中绘制阴影效果? 6 年前 |
mmmm · MSBuild(用于Delphi)Make-like功能 6 年前 |