关于Delphi的TMemo控件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Delphi的TMemo控件相关的知识,希望对你有一定的参考价值。

最近在看delphi的VCL源码时,发现TMemo的Text属性不知是哪继承来的,往上只追到
TCustomEdit里public属性的Text,但却没有读写方法
TCustomEdit = class(TWinControl)
public
...
property Text;
end;

再往上是TWinControl根本就没有Text这个属性,所以比较困惑的是,当我们给Memo的Text赋值时它是怎么传递的,一般的property(属性)都有读写方法一看就知道内部是怎么变的,这个TMemo的Text有什么特殊,望高手指点,哪位说明白了,加分

TMemo归属stdrctrls单元 类关系为TObject-TPeresistent-TCompontent-TContol-TWinControl-TCustomEdit-TCustomMemo;可以利用Ctrl+类名跟踪一下,可以看到memo的text是继承了上层TCustomEdit中的Text属性可以继续向上追踪。
TCustomEdit的属性列表如下:
StdCtrls.TCustomEdit PropertiesFrom RAD Studio VCL Referencer
Up to Parent: TCustomEdit

Alignment Determines how the text is aligned within the text edit control.

AutoSelect Determines whether all the text in the edit control is automatically selected when the control gets focus.
AutoSize Determines whether the height of the edit control automatically resizes to accommodate the text.
BorderStyle Determines whether the edit control has a single line border around the client area.
CanUndo Indicates whether the edit control contains changes that can be backed out.
CharCase Determines the case of the text within the edit control.
HideSelection Determines whether the visual indication of the selected text remains when focus shifts to another control.
MaxLength Specifies the maximum number of characters the user can enter into the edit control.

Modified Indicates whether the user edited the text of the edit control.
NumbersOnly Allows only numbers to be typed into the text edit.
OEMConvert Determines whether characters typed in the edit control are converted from ANSI to OEM and then back to ANSI.
ParentColor
PasswordChar Indicates the character, if any, to display in place of the actual characters typed in the control.
ReadOnly Determines whether the user can change the text of the edit control.
SelLength Specifies the number of characters (bytes) that are selected.
SelStart Specifies the position of the first selected character in the text.
SelText Specifies the selected portion of the edit control's text.
TabStop
Text
TextHint A hint or message to be displayed when the Text property is empty.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
text在delphi中的描述为:
StdCtrls.TCustomEdit.Text inherits from Controls.TControl.Text. All content below this line refers to Controls.TControl.Text.

Contains a text string associated with the control.

Use the Text property to read the Text of the control or to specify a new string for the Text value. By default, Text is the control name. For edit controls and memos, the Text appears within the control. For combo boxes, the Text is the content of the edit control portion of the combo box.

Note: Controls that display text use either the Caption property or the Text property to specify the text value. Which property is used depends on the type of control. In general, Caption is used for text that appears as a window title or label, while Text is used for text that appears as the content of a control.
参考技术A 在TControl这个类里面,修饰为
protected
property Text: TCaption read GetText write SetText;
在TWinControl类里面写
public
property Text;
使用public修饰更改text属性, 使该属性可被访问。
实际访问的就是Tcoltrol的Text属性追问

再请问下,TControl里的Text读写方法都是在私用域,怎么取TMemo的Text属性的读写地址呢(PS:有个软件是Delphi编的,我要取TMemo的内容,已经可以成功注入,但TMemo的TEXT内存地址一直找不到,想从TMemo的具体实现上找方法)

另外我用的是D7,TWinControl里并没有property Text; 是不是版本问题,还是这个属性可以跨级继承TControl里的protected域里的Text属性

参考技术B 直接从TControl继承而来。在CustomEdit中只是改变成公用属性而已。本回答被提问者采纳

如何在Delphi中将诸如TMemo等文本控件的内容保存为TXT文件?

必须要用到TSaveDialog控件,因为我要能够选择保存路径和输入txt的文件名。我关键是不知道memo.lines的内容如何与TSaveDialog关联起来。

楼上的你会错意了.人家问的是怎么和SaveDialog关联.
方法如下:
现在窗口里添加一个Button,一个Memo 以及一个SaveDialog 然后在Button的 OnClick事件中这样写道:
procedure TForm1.button1click(sender: TObject);
begin
if SaveDialog1.Execute then //SaveDialog1 是一个TSaveDialog 组件
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;
就这么几句代码,简单吧.
顺便说一下 第一行代码的意义 SaveDialog中的 Execute 是一个返回值为Boolean型的函数,它的意义就是 当用户选择了保存对话框中的取消的按钮的时候它为false 用户选择了要保存的内容按确认时候则返回true ,这样做可以防止用户在没有选择保存的时候,程序继续执行下面的代码,而SaveDialog 的文件名为空的错误,
参考技术A 用TStringList类吧,给你个小例子
var
sl :TStringList;
begin
sl := TStringList.Create;
sl.Text := memo1.Lines.Text;
sl.SaveToFile('config.txt');
sl.Free;
end;

至于TSaveDialog,不用写程序,可以直接选择路径的,你可以添一个edit1,用edit1显示所选好的路径,然后点button进行保存就好了

以上是关于关于Delphi的TMemo控件的主要内容,如果未能解决你的问题,请参考以下文章

如何在Delphi中将诸如TMemo等文本控件的内容保存为TXT文件?

delphi的Tmemo组件问题

DELPHI中如何使用ADOQUERY和TEDIT,TMEMO操作数据库。

关于delphi7的TcxCheckComboBox控件的问题

自动允许 Ctrl+A 在 TMemo 中全选?

请教关于delphi中dbnavigator控件的用法!