代码示例:你是真的对Delphi很了解么?
Procedure StepEditor( strgrid: TStringGrid; Step: TStep ); var sValue, sField: string; EditorClass: TStepEditorClass; Editor: TStepEditor; begin sField := strgrid.Cells[0, strgrid.Selection.Top]; sValue := strgrid.Cells[1, strgrid.Selection.Top]; EditorClass := EditorClassList.Editors[ sField ]; Editor := EditorClass.Create; Editor.Field := sField; Editor.Step := Step; Editor.Edit( sValue ); Editor.Free; strgrid.Cells[ 1, strgrid.Selection.Top ] := sValue; end;
EditorClass 是一个Class of Class, 也就是类的类 比如 TFormClass = Class of TForm; 但是不同于:TFormClass = Class( TForm ); 这是两个概念!
而 EditorClassList 里面存放的就是 类的类的列表;
Editor := EditorClass.Create;
Create是类方法,而不是对象方法,所以可以由 EditorClass来创建EditorClass的一个实例
补充: TStepEditor = Class( TObject ) ... End;
TStepEditorClass = Class of TStepEditor;
Object Inspector 为什么能够提供一个方便的编辑环境? 为什么不同的字段,供选择的值不一样,校验的方式不一样,弹出的编辑框 不一样?因为根据不同的字段类型,注册了不同的属性编辑器 Propety Editor; 简化Delphi提供的注册属性编辑器的函数,可以描述为以下: RegisteryPropertyEditor( PropertyFieldType, EditorClass ); ^此处为类型名,如 Bool , Integer, ...等等 ^此处为对应的编辑器的类名,注意,不是类名的字符描述 实际运行的时候,用户点击Object Inspector 的一个字段的时候, Delphi内部就搜索该字段类型对应的编辑器类;然后由找到的类的类,创建该类的一个实例; 进行相关的操作(决定是否有下拉框,是否有一个按钮等等)
更多文章
|