コード例: Delphi を本当によく知っていますか?
PROcedure StepEditor( strgrid: TStringGrid; ステップ: TStep );
変数
sValue、sField: 文字列;
EditorClass: TStepEditorClass;
エディタ: TStepEditor;
始める
sフィールド := strgrid.Cells[0, strgrid.Selection.Top];
sValue := strgrid.Cells[1, strgrid.Selection.Top];
EditorClass := EditorClassList.Editors[ sField ];
エディター := EditorClass.Create;
エディター.フィールド := sフィールド;
Editor.Step := ステップ;
Editor.Edit(sValue);
編集者。無料。
strgrid.Cells[ 1, strgrid.Selection.Top ] := sValue;
終わり;
EditorClass は Class of Class、つまりクラスのクラスです
例えば
TFormClass = TForm のクラス;
ただし、次とは異なります。 TFormClass = Class(TForm); これらは 2 つの概念です。
EditorClassList にはクラスのリストが格納されます。
エディター := EditorClass.Create;
Create はオブジェクト メソッドではなくクラス メソッドであるため、EditorClass のインスタンスは EditorClass から作成できます。
補充:
TStepEditor = クラス( TObject )
...
終わり;
TStepEditorClass = TStepEditor のクラス;
Object Inspector が便利な編集環境を提供できるのはなぜですか?
フィールドごとに選択値、検証方法、ポップアップ編集ボックスが異なるのはなぜですか?
いや同じですか?異なるフィールド タイプに応じて異なるプロパティ エディタが登録されるためです。
Delphi が提供するプロパティ エディタの登録機能を簡略化すると次のようになります。
RegisteryPropertyEditor( PropertyFieldType, EditorClass );
^ここには Bool、Integer などの型名が入ります。
^これは、対応するエディタのクラス名です。クラス名の文字の説明ではないことに注意してください。
実際に実行するとき、ユーザーがオブジェクト インスペクターのフィールドをクリックすると、
Delphi は内部でフィールド タイプに対応するエディタ クラスを検索し、見つかったクラスからクラスのインスタンスを作成します。
関連する操作を実行します (ドロップダウン ボックスの有無、ボタンの有無などの決定)
その他の記事