Exemplo de código: Você realmente conhece bem o Delphi?
PRocedure StepEditor( strgrid: TStringGrid; Etapa: TStep );
var
sValor, sField: string;
EditorClass: TStepEditorClass;
Editor: TStepEditor;
começar
sField := strgrid.Cells[0, strgrid.Selection.Top];
sValue := strgrid.Cells[1, strgrid.Selection.Top];
EditorClass := EditorClassList.Editors[sField];
Editor := EditorClass.Create;
Editor.Campo := sCampo;
Editor.Step := Passo;
Editor.Edit(sValor);
Editor.Grátis;
strgrid.Cells[1, strgrid.Selection.Top]: = sValue;
fim;
EditorClass é uma Classe de Classe, ou seja, uma classe de classes
por exemplo
TFormClass = Classe do TForm;
Mas é diferente de: TFormClass = Class(TForm);
O EditorClassList armazena uma lista de classes;
Editor := EditorClass.Create;
Create é um método de classe, não um método de objeto, portanto, uma instância de EditorClass pode ser criada a partir de EditorClass
Reabastecer:
TStepEditor = Classe(TObject)
...
Fim;
TStepEditorClass = Classe do TStepEditor;
Por que o Object Inspector pode fornecer um ambiente de edição conveniente?
Por que campos diferentes têm valores de seleção diferentes, métodos de verificação diferentes e caixas de edição pop-up?
não é o mesmo? Porque diferentes editores de propriedades são registrados de acordo com diferentes tipos de campo;
A simplificação da função de registro do editor de propriedades fornecido pelo Delphi pode ser descrita da seguinte forma:
RegisteryPropertyEditor(PropertyFieldType, EditorClass);
^Aqui está o nome do tipo, como Bool, Integer, ...etc.
^Aqui está o nome da classe do editor correspondente. Observe que não é a descrição do caractere do nome da classe.
Na verdade, quando em execução, quando o usuário clica em um campo no Object Inspector,
O Delphi procura internamente a classe do editor correspondente ao tipo de campo e então cria uma instância da classe a partir da classe encontrada;
Execute operações relacionadas (decidir se existe uma caixa suspensa, se existe um botão, etc.)
Mais artigos