- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
现在我有这个代码。
procedure TForm1.Memo1Change(Sender : TObject);
begin
SendMessage(Informacje.Handle, EM_LINESCROLL, 0, Memo1.Lines.Count);
end;
问题是添加新行时我无法向上滚动 MemoLines。我想在向上滚动时停止将光标移动到末尾,当滚动条位于底部时开始将光标移动到末尾。感谢您的帮助。
换句话说。想象一下,有一个带有 Memo 的 IRC 聊天。新消息,插入符号位于最后一条消息的末尾。现在我想使用滚动条(向上)阅读以前的消息,但我不能因为有更新的消息将插入符移回底部。我想在鼠标滚轮向上时停止它,读取消息,然后当我滚动到底部时返回到之前的状态(在新消息末尾再次插入插入符)。
最佳答案
你需要一个条件来决定是否滚动到底部。下面似乎适用于一个简单的测试,它将最上面可见的行与备忘录可以显示的可能行数相加,以确定最后一行是否可见。
procedure TForm1.Memo1Change(Sender: TObject);
var
LineCount, TopLine: Integer;
begin
LineCount := Memo1.Perform(EM_GETLINECOUNT, 0, 0) - 1;
TopLine := Memo1.Perform(EM_GETFIRSTVISIBLELINE, 0, 0);
if (TopLine + GetVisibleLineCount(Memo1)) >= LineCount then
SendMessage(Memo1.Handle, EM_LINESCROLL, 0, LineCount);
end;
哪里
function GetVisibleLineCount(Memo: TMemo): Integer;
var
DC: HDC;
SaveFont: HFONT;
TextMetric: TTextMetric;
EditRect: TRect;
begin
DC := GetDC(0);
SaveFont := SelectObject(DC, Memo.Font.Handle);
GetTextMetrics(DC, TextMetric);
SelectObject(DC, SaveFont);
ReleaseDC(0, DC);
Memo.Perform(EM_GETRECT, 0, LPARAM(@EditRect));
Result := (EditRect.Bottom - EditRect.Top) div TextMetric.tmHeight;
end;
(您可以缓存可见行数,以避免必须为备忘录中的每个更改进行计算。)
不过,您可能需要进一步调整代码,例如对于它可以显示的备忘录行数较少的情况。此外,此代码没有考虑插入符号位置。
关于Delphi滚动备忘录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17707689/
1、关于空值 提示: 在MySQL中如果不为NOT NULL字段赋值(等同于赋NULL值) 例如: 为一个NOT NULL的整型赋NULL值,结
我喜欢新的 scalaz Memo 功能,但发现它缺少两件事:1)它隐藏了我需要访问的底层 Map——至少是所有值的列表,以及 2)我想要一个使用 val 实现的版本我在某处读到的 scala.col
有人知道是否有类似 Memo/RichEdit 的东西吗?需求:对行进行编号,从流中加载大文件(超过 5 MB)。 最佳答案 Developer Express有一套广泛的 VCL 组件,其中包括一个
我最近一直在玩 React 16.6.0,我喜欢 React Memo 的想法,但我一直无法找到任何有关最适合实现它的场景的信息。 React 文档 ( https://reactjs.org/doc
我有一个包含很多表单字段的应用程序。我想要一种可以避免重新渲染的方法。我正在使用 Formik 来管理表单。 我正在使用 Formik 的 useField以 React.memo 访问我的子组件中的
前言 一直以来,ssh 身边都有很多小伙伴对 TS 如何在 React 中运用有很多困惑,他们开始慢慢讨厌 TS,觉得各种莫名其妙的问题降低了开发的效率。 其实如果运用熟练的话,TS 只是在
我必须将 .DBF 和 .FPT 文件从 Visual FoxPro 转换到 MySQL。现在我的脚本适用于 .DBF 文件,它使用 dbase_open() 和 dbase_get_record_w
我正在尝试将数据从 Act 2000 转换为 MySQL 数据库。我已经成功地将 DBF 文件导入到单独的 MySQL 表中。但是我遇到了 *.BLB 的问题文件,这似乎是一个非标准的备忘录文件。 D
我正在构建一个提供创建笔记功能的 Android 应用。 为此,我开始下一个 Activity : Intent notepad = new Intent(Intent.ACTION_MAIN); n
您好,我需要在备忘录中显示结果,而不是使用 System.out.println,但是无法将标准输出放入列表中,例如在 Swing 备忘录中显示此列表的内容之后,因为我需要实时或显示时显示结果的每一行
我是一名优秀的程序员,十分优秀!