成员 |
函数原型 |
public: |
|
TStringList |
__fastcall TStringList(void);
__fastcall TStringList(bool OwnsObjects);
__fastcall TStringList(WideChar QuoteChar, WideChar Delimiter);
__fastcall TStringList(WideChar QuoteChar, WideChar Delimiter, TStringsOptions Options);
__fastcall TStringList(TDuplicates Duplicates, bool Sorted, bool CaseSensitive);
构造函数,参数:
OwnsObjects: 属性 OwnsObjects
QuoteChar: 属性 QuoteChar
Delimiter: 属性 Delimiter
Options: 属性 Options
Duplicates: 属性 Duplicates
Sorted: 属性 Sorted
CaseSensitive: 属性 CaseSensitive |
~TStringList |
__fastcall virtual ~TStringList(void);
析构函数 |
Add |
virtual int __fastcall Add(const System::UnicodeString S);
增加一个字符串,请参考 Strings 属性。
如果 Sorted 属性为 true,会根据 Duplicates 属性检查重复项,把字符串放在排序的顺序上。
参数:S: 要添加到字符串列表里面的字符串,
返回值:添加到字符串列表里面之后的索引号,就是在 Strings 属性里面的位置。 |
AddObject |
virtual int __fastcall AddObject(const System::UnicodeString S, System::TObject* AObject);
增加一个字符串和关联的 Object。
如果 Sorted 属性为 true,会根据 Duplicates 属性检查重复项,把字符串放在排序的顺序上。
参数:S: 字符串,AObject: 关联的 Object,请参考 Objects 属性;
返回这个字符串和 Object 的索引号,就是在 Strings 和 Objects 属性里面的位置。 |
Assign |
virtual void __fastcall Assign(TPersistent *Source);
这个方法重载了父类 TStrings 的 Assign 方法。
把 Source 对象的所有的属性和数据赋值到当前对象,包括类型和格式转换再赋值。
Source 可以是其他从 TStrings 继承的字符串列表,或者可以解析为字符串列表的对象的指针。 |
Clear |
virtual void __fastcall Clear(void);
清除字符串列表,Count 和 Capacity 属性都归零,
如果 OwnsObjects 属性为 true,会销毁 Objects 属性里面所有的 object。
请参考 Count、Capacity 和 OwnsObjects 属性。 |
Delete |
virtual void __fastcall Delete(int Index);
删除第 Index 项字符串,取消这一项字符串的 object 关联,
如果 OwnsObjects 属性为 true,会销毁这一项字符串关联的 object。 |
Exchange |
virtual void __fastcall Exchange(int Index1, int Index2);
交换第 Index1 和第 Index2 项字符串,他们关联的 Object 也会被交换。 |
Find |
virtual bool __fastcall Find(const UnicodeString S, int &Index);
只有在 Sorted 属性为 true 的排序状态下,可以使用 Find 方法快速找到字符串项目 S。
参数 S 为要查找的字符串,Index 返回找到字符串的位置,第一个字符串位置为 0,第二个为 1,……;
返回值:true 找到字符串 S;false: 没找到字符串 S,此时返回的 Index 为如果把 S 插入字符串列表应该在的位置 |
IndexOf |
virtual int __fastcall IndexOf(const UnicodeString S);
在字符串列表里面查找字符串 S,返回找到的位置索引号,
第一个字符串位置为 0,第二个为 1,……没找到返回 -1。
如果字符串没有排序,并且有相同的项目,返回值为 S 第一次出现的位置;
如果字符串排序了,会调用 Find 进行快速查找,此时如果有相同的项目,就不一定是第一次出现的位置了 |
Insert |
virtual void __fastcall Insert(int Index, const UnicodeString S);
在 Index 位置插入一个字符串 S |
InsertObject |
virtual void __fastcall InsertObject(int Index, const UnicodeString S, TObject* AObject);
在 Index 位置插入一个字符串 S,并且这个字符串关联 AObject。 |
Sort |
virtual void __fastcall Sort(void);
给字符串列表排序,不会改变 Sorted 属性的值。
如果 CaseSensitive 属性为 true,使用 AnsiCompareStr 比较字符串大小;
如果 CaseSensitive 属性为 false,使用 AnsiCompareText 比较字符串大小;
如果这不是期望的排序规则,可以使用 CustomSort 按照自定义的顺序排序。 |
CustomSort |
virtual void __fastcall CustomSort(TStringListSortCompare Compare);
typedef int __fastcall (*TStringListSortCompare)(TStringList *List, int Index1, int Index2);
按照自定义的顺序排序。
参数:Compare 为自定义排序的比较大小函数,不能为 NULL。
比较大小的函数返返回值:
0: List 的 Index1 项目 = Index2 项目,就是说,Index1 项目和 Index2 项目谁在前谁在后无所谓;
<0: List 的 Index1 项目 < Index2 项目,就是说,Index1 项目需要排在前面,Index2 项目需要排在后面;
>0: List 的 Index1 项目 > Index2 项目,就是说,Index1 项目需要排在后面,Index2 项目需要排在前面。 |
TStrings:: |
从 TStrings 继承过来的 |
operator [] |
System::UnicodeString operator[](int Index) { return this->Strings[Index]; }
[] 操作符,只读,如果要修改某一个字符串,需要用 Strings 属性 |
AddPair |
TStrings *__fastcall AddPair(const System::UnicodeString Name, const System::UnicodeString Value);
TStrings *__fastcall AddPair(const System::UnicodeString Name, const System::UnicodeString Value, System::TObject* AObject);
增加一对名字和值,请参考 NameValueSeparator 属性。
参数 Name: 名字,Value: 值;
返回值:字符串列表本身的指针,即 this |
Append |
void __fastcall Append(const System::UnicodeString S);
增加一个字符串,和 Add 方法的区别是,这个方法没有返回值。
有时候,Add 方法的返回值没有意义,或者不确定,例如在 Memo 里面增加了内容之后,增加的内容可能会连接在原来的文字后面,或者分被成几行显示,那么 Add 的返回值的位置就不确定了。 |
AddStrings |
virtual void __fastcall AddStrings(TStrings *Strings);
void __fastcall AddStrings(const System::DynamicArray<System::UnicodeString> Strings);
void __fastcall AddStrings(const System::DynamicArray<System::UnicodeString> Strings, const System::DynamicArray<System::TObject*> Objects);
把 Strings 字符串列表或者字符串动态数组里面的内容添加到当前的字符串列表里面。 |
SetStrings |
void __fastcall SetStrings(TStrings *Source);
把 Source 里面的内容复制到当前的字符串列表。
和 Assign 的不同点是,Assign 会把其他属性都复制过来,SetStrings 只复制数据。 |
BeginUpdate |
void __fastcall BeginUpdate(void);
开始更新,当字符串列表被修改的时候,会自动调用,请参考 Updating 属性。 |
EndUpdate |
void __fastcall EndUpdate(void);
结束更新字符串列表,当更新完成的时候会自动调用,请参考 Updating 属性。 |
Equals |
HIDESBASE bool __fastcall Equals(TStrings *Strings);
比较当前字符串列表是否和 Strings 相同。只比较字符串内容是否相同,不比较关联的 Objects 是否相同。 |
GetEnumerator |
TStringsEnumerator *__fastcall GetEnumerator(void);
获取枚举字符串列表的对象,用完需要 delete。例如:
TStringsEnumerator *lpStrEnum = sl->GetEnumerator();
while(lpStrEnum->MoveNext())
Memo1->Lines->Add(lpStrEnum->Current);
delete lpStrEnum; |
GetText |
virtual WideChar *__fastcall GetText(void);
把字符串列表的文字,即 Text 属性的内容,复制到一个新分配的字符串里面,返回这个字符串的地址,
返回的字符指针用完必须使用 StrDispose 函数释放内存。 |
IndexOfName |
virtual int __fastcall IndexOfName(const UnicodeString Name);
查找成对的名字和值的列表当中,Name 名字的位置,请参考 Names 属性,
第一个字符串位置为 0,第二个为 1,……没找到返回 -1。 |
IndexOfObject |
virtual int __fastcall IndexOfObject(TObject *AObject);
查找 AObject 关联在字符串列表里面的位置,请参考 Objects 属性,
第一个字符串位置为 0,第二个为 1,……没找到返回 -1。 |
LoadFromFile |
virtual void __fastcall LoadFromFile(const UnicodeString FileName);
virtual void __fastcall LoadFromFile(const UnicodeString FileName, TEncoding *Encoding);
读取文本文件到字符串列表,文件名 FileName,文件编码 Encoding。
如果没有指定文件的编码,即没有 Encoding 参数,会根据 BOM 判断,判断结果放在 Encoding 属性里面,请参考 Encoding 属性。文件编码请参考 “使用 TStringList 读写文件时指定编码的方法对文件进行字符编码转换” |
LoadFromStream |
virtual void __fastcall LoadFromStream(TStream* Stream);
virtual void __fastcall LoadFromStream(TStream* Stream, TEncoding *Encoding);
读取流到字符串列表,流的字符编码为 Encoding。
如果没有指定文件的编码,即没有 Encoding 参数,会根据 BOM 判断,判断结果放在 Encoding 属性里面,请参考 Encoding 属性。文件编码请参考 “使用 TStringList 读写文件时指定编码的方法对文件进行字符编码转换” |
Move |
virtual void __fastcall Move(int CurIndex, int NewIndex);
把 CurIndex 位置的字符串移动到 NewIndex 位置,位置范围从 0 到 Count-1,请参考 Strings 属性。 |
SaveToFile |
virtual void __fastcall SaveToFile(const UnicodeString FileName);
virtual void __fastcall SaveToFile(const UnicodeString FileName, TEncoding *Encoding);
把字符串列表保存到文件里面,文件名 FileName,文件编码 Encoding。
如果没有 Encoding 参数,会使用 Encoding 属性的编码保存文件。请参考 Encoding 属性和 WriteBOM 属性。文件编码请参考 “使用 TStringList 读写文件时指定编码的方法对文件进行字符编码转换” |
SaveToStream |
virtual void __fastcall SaveToStream(TStream *Stream);
virtual void __fastcall SaveToStream(TStream *Stream, System::Sysutils::TEncoding* Encoding);
把字符串列表保存到流里面,文字的编码 Encoding。
如果没有 Encoding 参数,会使用 Encoding 属性的编码保存文件。请参考 Encoding 属性和 WriteBOM 属性。文件编码请参考 “使用 TStringList 读写文件时指定编码的方法对文件进行字符编码转换” |
SetText |
virtual void __fastcall SetText(WideChar *Text);
把 Text 字符串放在字符串列表里面,按照 LineBreak 属性指定的换行符分割,就和给 Text 属性赋值相同的效果。
请参考 Text 属性、LineBreak 属性和 Strings 属性。 |
ToStringArray |
DynamicArray<UnicodeString> __fastcall ToStringArray(void);
把字符串列表转为字符串动态数组,请参考 Strings 属性。 |
ToObjectArray |
DynamicArray<TObject*> __fastcall ToObjectArray(void);
把字符串列表关联的 Objects 转为 TObject 动态数组,请参考 Objects 属性。 |
TPersistent:: |
从 TPersistent 继承过来的 |
GetNamePath |
DYNAMIC System::UnicodeString __fastcall GetNamePath(void);
返回在 Object Inspector 属性面板里面的名称。对于控件,返回控件的名称,对于 TCollectionItem 对象,返回宿主控件的名称、属性名和 [索引号]。 |
TObject:: |
从 TObject 继承过来的 |
Free |
void __fastcall Free(void);
C++ 程序需要用 delete 来销毁对象,不要调用 Free 方法。
Delphi 程序可以通过调用 Free 方法来调用析构函数释放分配的内存,空指针和未初始化的对象调用 Free 不会出错。 |
DisposeOf |
void __fastcall DisposeOf(void);
PC 版本,相当于 Free;移动版本,会强制销毁对象无论 RefCount 的值是多少,并且置 Disposed 属性为 true. |
InitInstance |
__classmethod __unsafe TObject* __fastcall InitInstance(void * Instance);
初始化成员,给他们清零。这是 NewInstance 内部调用的函数,不要直接调用 InitInstance。
重载 NewInstance 的时候,在 NewInstance 的最后一句要调用 InitInstance。
不要重载 InitInstance,因为它不是 virtual 函数。 |
NewInstance |
__classmethod virtual __unsafe TObject* __fastcall NewInstance();
NewInstance 给实例分配内存,并且返回新的实例的地址,通过调用 InstanceSize 获取需要的内存的字节数。
构造函数会自动调用 NewInstance,不要直接调用 NewInstance。
如果重载了 NewInstance 分配内存,就必须重载 FreeInstance 释放内存。 |
InstanceSize |
__classmethod int __fastcall InstanceSize();
返回给实例数据分配内存需要多少字节数。
不要重载 InstanceSize 因为它不是 virtual 函数。
只有在重载的 NewInstance 函数里面需要调用 InstanceSize。 |
FreeInstance |
virtual void __fastcall FreeInstance(void);
释放 NewInstance 分配的内存。
析构函数会自动调用 FreeInstance,不要直接调用 FreeInstance。
如果重载了 NewInstance 就必须重载 FreeInstance 与之对应。
和 NewInstance 一样,FreeInstance 也是通过 InstanceSize 获取释放内存的字节数。 |
CleanupInstance |
void __fastcall CleanupInstance(void);
清除长字符串、Variants、接口变量等,把长字符串置为 Empty,Variant 置为 Unassigned 状态。
不要直接调用 CleanupInstance,会在销毁实例的时候自动调用。 |
ClassType |
TClass __fastcall ClassType(void);
返回类的类型信息【例1:获取控件对象的类及这个类的祖先】
C++ 程序可以使用 dynamic_cast 或 InheritsFrom 来代替 ClassType 方法。 |
ClassName |
__classmethod UnicodeString __fastcall ClassName();
获取类名。如果父类指针指向的是子类,通过父类指针获取类名,得到的是子类的类名。 |
ClassNameIs |
__classmethod bool __fastcall ClassNameIs(const UnicodeString Name);
判断类名是否为 Name。如果父类指针指向的是子类,通过父类指针判断类名,用的是子类的类名进行判断。 |
QualifiedClassName |
__classmethod UnicodeString __fastcall QualifiedClassName();
返回包含命名空间的类名,例如 TButton 类型返回的是 "Vcl.StdCtrls.TButton"
UnitName 和 ClassName 合在一起就是 QualifiedClassName |
UnitName |
__classmethod UnicodeString __fastcall UnitName();
返回类所在的命名空间,例如 TButton 类型返回的是 "Vcl.StdCtrls"
UnitName 和 ClassName 合在一起就是 QualifiedClassName |
UnitScope |
__classmethod UnicodeString __fastcall UnitScope();
和 UnitName 返回的结果相同。 |
ClassParent |
__classmethod TClass __fastcall ClassParent();
返回父类的类型信息【例1:获取控件对象的类及这个类的祖先】
C++ 程序可以使用 dynamic_cast 或 InheritsFrom 来代替 ClassParent 方法。 |
ClassInfo |
__classmethod void * __fastcall ClassInfo();
返回运行时类型信息表 (RTTI table)。
不是所有的类都提供 RTTI 信息表,如果没有提供,返回值为 NULL。
从 TPersistent 继承的类会提供 RTTI 信息表。 |
InheritsFrom |
__classmethod bool __fastcall InheritsFrom(TClass AClass);
当前对象的类是否从 AClass 继承过来的。AClass 是父类、父类的父类,…… 一直到祖先,返回为真。 |
MethodAddress |
__classmethod void * __fastcall MethodAddress(const ShortString &Name)/* overload */;
__classmethod void * __fastcall MethodAddress(const UnicodeString Name)/* overload */;
通过名称返方法的地址。 |
MethodName |
__classmethod UnicodeString __fastcall MethodName(void *Address);
通过方法的地址返回名称。 |
FieldAddress |
void * __fastcall FieldAddress(const ShortString &Name)/* overload */;
void * __fastcall FieldAddress(const UnicodeString Name)/* overload */;
返回 __published: 成员的地址。 |
GetInterface |
bool __fastcall GetInterface(const GUID &IID, /* out */ void *Obj);
template <typename T>
bool __fastcall GetInterface(DelphiInterface<T>& smartIntf)
{
return GetInterface(__uuidof(T), reinterpret_cast<void*>(static_cast<T**>(&smartIntf)));
}
Delphi 的 IID 允许用接口名称,编译器会自动采用类型的 GUID。
C++ 可以用模板版本的 GetInterface,相当于 dynamic_cast,GetInterface 在转为不支持的类型的时候不会抛出异常,只是得到的指针为 NULL,请参考 TInterfacedPersistent 的 operator
_di_IInterface()。
参数 Obj 虽然是 void * 类型的,但是实质上是 void ** 类型的,必须把 void ** 强制转为 void * 作为 Obj 参数。 |
GetInterfaceEntry |
__classmethod PInterfaceEntry __fastcall GetInterfaceEntry(const GUID &IID);
获取接口项目 |
GetInterfaceTable |
__classmethod PInterfaceTable __fastcall GetInterfaceTable();
获取接口表 |
Equals |
virtual bool __fastcall Equals(TObject *Obj);
比较当前对象和 Obj 对象是否相同。从 TObject 继承的子类需要重载 Equals 来提供比较相同的方法。
TStrings 类有 HIDESBASE 类型 (__declspec(hidesbase)) 的 Equals 重载。 |
GetHashCode |
virtual int __fastcall GetHashCode(void);
返回一个整数的 hash 值,默认的,返回的整数值为对象的地址。
测试程序:int a = Sender->GetHashCode();
int b = (int)Sender; 发现 a 和 b 的值相等。 |
ToString |
virtual UnicodeString __fastcall ToString(void);
转为字符串。默认的,ToString 返回类名,和 ClassName 的返回值相同。
如果需要其他的转字符串方式,需要用重载 ToString 来提供转为字符串的方法。 |
SafeCallException |
virtual HRESULT __fastcall SafeCallException(TObject *ExceptObject, void *ExceptAddr);
处理异常的函数,TObject 的这个函数只是简单的返回 E_UNEXPECTED
从 TObject 继承的子类可以重载这个函数来处理异常。 |
AfterConstruction |
virtual void __fastcall AfterConstruction(void);
在构造函数结束的时候会自动调用 AfterConstruction,不要直接调用这个函数。
重载这个函数可以处理在构造函数结束时需要运行的代码,
例如 TCustomForm 利用重载的 AfterConstruction 来产生 OnCreate 事件。 |
BeforeDestruction |
virtual void __fastcall BeforeDestruction(void);
在执行析构函数之前会自动调用 BeforeDestruction,不要直接调用这个函数。
在调用 BeforeDestruction 的时候,还没做任何销毁动作呢。
只有当构造函数完整执行完成的情况下,析构之前才会调用 BeforeDestruction,如果在构造函数里面抛出了异常,会调用析构函数,但是不会调用 BeforeDestruction。
重载这个函数可以处理析构函数调用之前需要运行的代码,
例如 TCustomForm 利用重载的 BeforeDestruction 来产生 OnDestroy 事件。 |
Dispatch |
virtual void __fastcall Dispatch(void *Message);
如果从 TObject 类继承的类处理了消息,Dispatch 为处理消息的函数。
如果没有处理的消息,会调用父类的消息处理,如果仍然没有处理,调用 DefaultHandler。 |
DefaultHandler |
virtual void __fastcall DefaultHandler(void *Message);
默认的消息处理。如果 Dispatch 处理消息的过程,没有找到处理的方法,会调用 DefaultHandler 进行默认的消息处理。 |
protected: |
|
Changed |
virtual void __fastcall Changed(void);
触发 OnChange 事件,请参考 OnChange 事件。 |
Changing |
virtual void __fastcall Changing(void);
触发 OnChanging 事件,请参考 OnChanging 事件。 |
Get |
virtual UnicodeString __fastcall Get(int Index);
读取 Strings 属性的方法,请参考 Strings 属性。 |
GetCapacity |
virtual int __fastcall GetCapacity(void);
获取字符串列表的容量,即 Capacity 属性,请参考 Capacity 属性。 |
GetCount |
virtual int __fastcall GetCount(void);
获取字符串列表里面实际的字符串个数,即 Count 属性,请参考 Count 属性。 |
GetObject |
virtual TObject* __fastcall GetObject(int Index);
获取第 Index 个字符串关联的 object,请参考 Objects 属性。 |
Put |
virtual void __fastcall Put(int Index, const UnicodeString S);
写入 Strings 属性的方法,请参考 Strings 属性。 |
PutObject |
virtual void __fastcall PutObject(int Index, TObject *AObject);
把第 Index 个字符串关联到 AObject,请参考 Objects 属性。 |
SetCapacity |
virtual void __fastcall SetCapacity(int NewCapacity);
修改字符串列表的容量为 NewCapacity,请参考 Capacity 属性。 |
SetUpdateState |
virtual void __fastcall SetUpdateState(bool Updating);
内部调用的方法,是用来修改 Updating 属性的方法,当内部计数器 UpdateCount 由 0 变为 >0 的时候,调用这个方法把 Updating 属性设为 true;由 >0 变为 0 的时候调用这个方法把 Updating 属性设为 false。 |
CompareStrings |
virtual int __fastcall CompareStrings(const UnicodeString S1, const UnicodeString S2);
比较字符串 S1 和 S2 的大小,内部调用的函数,当调用查找,例如 IndexOf 或 IndexOfName 方法时调用。
默认的,这个方法调用 AnsiCompareText 函数来比较大小,不区分大小写。子类可以通过重载这个方法来改变比较方法。 |
InsertItem |
virtual void __fastcall InsertItem(int Index, const UnicodeString S, TObject *AObject);
内部使用的方法,AddObject 方法会调用这个方法。 |
TStrings:: |
从 TStrings 继承过来的 |
DefineProperties |
virtual void __fastcall DefineProperties(TFiler* Filer);
重载 TPersistent 的 DefineProperties 方法。提供把 Strings 属性读出或存入流中。 |
Error |
void __fastcall Error(const UnicodeString Msg, int Data);
void __fastcall Error(PResStringRec Msg, int Data);
根据函数的参数,抛出 EStringListError 异常,TStrings 内部使用的方法。 |
ExtractName |
UnicodeString __fastcall ExtractName(UnicodeString S);
UnicodeString __fastcall ExtractName(UnicodeString S, bool AllNames);
把一对名字和值 S 里面的名字提取出来,请参考 NameValueSeparator 属性。
如果 S 里面不包含分割符,没有 AllNames 参数,或者 AllNames 参数为 false:函数返回值为空字符串;如果 AllNames 参数为 true,返回整个字符串 S。 |
GetTextStr |
virtual UnicodeString __fastcall GetTextStr(void);
获取 Text 属性的值,请参考 Text 属性。 |
SetEncoding |
virtual void __fastcall SetEncoding(TEncoding *const Value);
内部调用的方法,修改 Encoding 属性为 Value,请参考 Encoding 属性。
Assign 方法和 LoadFromFile、LoadFromStream 方法会调用 SetEncoding 来修改 Encoding 属性。 |
SetTextStr |
virtual void __fastcall SetTextStr(const System::UnicodeString Value);
修改 Text 属性的值,请参考 Text 属性。 |
TPersistent:: |
从 TPersistent 继承过来的 |
AssignTo |
virtual void __fastcall AssignTo(TPersistent* Dest);
把当前对象的所有属性和数据都赋值到 Dest 对象。
TPersistent 的 AssignTo 是 protected: 方法,只是简单的抛出 EConvertError 异常,
从 TPersistent 继承的子类必须重载 AssignTo 来实现这个方法。 |
GetOwner |
DYNAMIC TPersistent* __fastcall GetOwner(void);
返回对象的拥有者,是 protected: 方法。GetNamePath 方法会调用 GetOwner。
TPersistent 的 GetOwner 只是简单的返回 NULL。
例如,TOwnedCollection 的 GetOwner 返回这个 collection 的 owner;TCollectionItem 的 GetOwner 返回这个项目添加在哪个 collection object 里面了,组件 (TComponent) 的 GetOwner 返回组件的 Owner 属性。 |