- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个自定义控件(TRichEdit 的后代)。我只想在编辑字段上方添加一些文本。
我创建了自己的控件,并重写了构造函数来为标题创建 TLabel。它有效,但我的问题是:如何将标签移到 RichEdit 上方?当我设置 Top := -5 时,标签开始消失。
这是构造函数的代码:
constructor TDBRichEditExt.Create(AOwner: TComponent);
begin
inherited;
lblCaption := TLabel.Create(self);
lblCaption.Parent := parent;
lblCaption.Caption := 'Header';
lblCaption.Top := -5;
end;
我认为标签消失是符合逻辑的,因为 richedit 是父级。我已经尝试过
lblCaption.Parent := self.parent;
要使拥有 richedit 的表单成为父表单 - 但这不起作用...
我怎样才能实现这个目标?谢谢大家!
最佳答案
I think it's logic that the label disappaers since the richedit is the parent
这是错误的。在您的代码中,TLabel
的父级是 TDBrichEditExt
的父级,正如它应该的那样。请注意,在 TDBrichEditExt
方法中,Parent
和 Self.Parent
是同一件事。 如果您希望 TLabel
的父级成为 TDBRichEditExt
本身 - 但您不这样做 - 那么您应该设置lblCaption.Parent := self;
。
现在,如果 TLabel
的父级是 TBRichEditExt
的父级,则 TLabel< 的
引用 Top
属性TBRichEditExt
的父级,而不是 TBRichEditExt
本身。因此,如果 TDBrichEditExt
的父级是 TForm
,则 Top := -5
意味着 TLabel
将位于表单上边缘上方五个像素处。你的意思是
lblCaption.Top := Self.Top - 5;
但是 -5 是一个太小的数字。你真正应该使用的是
lblCaption.Top := Self.Top - lblCaption.Height - 5;
此外,它还在标签和 Rich Edit 之间留出了 5 px 的空间。
另外,你也想
lblCaption.Left := Self.Left;
另一个问题
但这行不通,因为在创建组件时,我认为 Parent 尚未设置。因此,您需要在更合适的时间进行标签的定位。此外,每次移动组件时,这都会移动标签,这一点非常重要!
TDBRichEditExt = class(TRichEdit)
private
FLabel: TLabel;
FLabelCaption: string;
procedure SetLabelCaption(LabelCaption: string);
public
constructor Create(AOwner: TComponent); override;
procedure SetBounds(ALeft: Integer; ATop: Integer; AWidth: Integer; AHeight: Integer); override;
published
LabelCaption: string read FLabelCaption write SetLabelCaption;
end;
procedure TDBRichEditExt.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
inherited;
if not assigned(Parent) then
Exit;
FLabel.Parent := self.Parent;
FLabel.Top := self.Top - FLabel.Height - 5;
FLabel.Left := self.Left;
end;
详细信息
此外,当您隐藏 TDBrichEditExt
时,您也希望隐藏标签。因此你需要
protected
procedure CMVisiblechanged(var Message: TMessage); message CM_VISIBLECHANGED;
哪里
procedure TDBRichEditExt.CMVisiblechanged(var Message: TMessage);
begin
inherited;
if assigned(FLabel) then
FLabel.Visible := Visible;
end;
同样,对于 Enabled
属性,您还需要在每次 TDBRichEditExt
的父级更新时更新 TLabel
的父级更改:
protected
procedure SetParent(AParent: TWinControl); override;
与
procedure TDBRichEditExt.SetParent(AParent: TWinControl);
begin
inherited;
if not assigned(FLabel) then Exit;
FLabel.Parent := AParent;
end;
关于delphi - Delphi自定义控件: A TRichEdit with a TLabel Above It,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3046648/
我正在尝试找到一种在使用 RichEdit 控件打印方法时在 Delphi 中强制分页的方法。由于某些愚蠢的原因,Rich Edit 控件忽略了\page 命令。 有谁知道有什么方法可以做到这一点吗?
如何在同一行书写不同颜色的文字? (我使用richedit)。 procedure TForm1.btnEClick(sender: TObject); begin m0.SelAttribute
很难说这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center . 10
我目前在我的一个软件(在 Delphi 7 中)中使用 TRichEdit 作为“实时”事件日志查看器,我最近分析了我的软件,TRichEdit 消耗了超过 40% 的软件 cpu 时间。 我只是想测
有没有办法改变插入符号的像素位置? 我想每次移动鼠标时都移动护理点。 喜欢: 鼠标移动: MoveCaretPos(X, Y); 最佳答案 不,您不能将插入符号的位置设置在特定点,而必须将插入符号设置
我使用 TRichEdit 来显示我的应用程序中完成的最后操作。我的 TRichEdit 的第一行应该是最后一个操作。如果操作失败,我想把这条线变成红色。 我的问题是我无法在 TRichEdit 顶部
TRichEdit 控件中每行的左侧有一个不可见的空间,其中光标变为右上箭头,当您单击此处时,整行都会被选中。当 TRichEdit 的文本对齐方式为居中或右时,很容易看到它。我相信这个空间被称为选择
我需要在运行时使用 TRichEdit 来执行 rtf 到文本的转换,如所讨论的 here 。我成功地做到了这一点,但我必须设置一个虚拟表单作为父表单,否则我无法填充 TRichedit.Lines。
我想创建一个自定义控件(TRichEdit 的后代)。我只想在编辑字段上方添加一些文本。 我创建了自己的控件,并重写了构造函数来为标题创建 TLabel。它有效,但我的问题是:如何将标签移到 Rich
我有返回字符索引的函数 GetCharFromPos(Pt: TPoint): Integer; 现在我想了解该职位的特征。像 GetCharByIndex(Index: Integer): Char
我需要在 TRichEdit 中支持“友好名称超链接”,我找到的所有解决方案都基于自动 URL(EM_AUTOURLDETECT),它通过检测用户输入的以 www(或 http)开头的字符串来工作。
有没有办法暂停/恢复 TRichEdit 控件中的撤消记录?是否有要发送的消息或要设置的模式? 编辑 我已经通过使用 ITextDocument 接口(interface)解决了这个问题。请看我下面的
如何在 TRichEdit 中阻止拖放?德尔福代码我使用 Rich edit,并且很难阻止拖放功能,特别是从表单外部拖动文本,比如从 IE 拖到我的 RichEdit。 最佳答案 参见RevokeDr
我目前正在将我们的软件解决方案从 Delphi 7 迁移到 2010。大部分更改都很简单,只剩下少量障碍。 在表单上,我们使用 TRichEdit,它显示从 MSSQL 数据库中的 blob 字段
我正在使用 tRichEdit 组件,并使用 tSpinedit 来确定制表符间距,使用 trichedit.oncreate 事件来生成制表符位置数组。这工作正常,我生成的每个新段落都使用定义的制表
我在使用 TRichEdit 时遇到一些问题。 第一个问题是,如果我尝试将剪贴板中的大量文本粘贴到空的 TRichEdit 中,它会截断文本的底部。 我猜想与第一个问题相关的第二个问题是,我似乎限制了
我正在尝试围绕 TRichEdit 编写一个包装类,它可以将 RTF 编码为明文或从明文解码。 这是我到目前为止所写的内容: type TRTF = class private FRi
我正在使用当前代码在 TRichEdit 上突出显示 URL: procedure TForm1.WndProc(var Message: TMessage); var p: TENLink;
我正在尝试将 TRichEdit 组件上的富文本转换为 HTML 标签。我有一个函数用于此,但它不起作用,因为组件中的文本始终以 PlainText 发送。组件上的 PlainText 选项设置为 f
我就这个问题给你一个简短的想法。 从数据库中检索 (id,name) 字段记录到列表框中。 从列表中选择任何记录。 将备注(Blob 类型)显示到选定 ID 的丰富编辑框中。 除了两个记录都很好。 这
我是一名优秀的程序员,十分优秀!