短縮版
作成したカスタム ボタン用に初めてのコンポーネント エディタを実装しようとしています。いくつかのオンライン記事の助けを借りて、エディターを正常にインストールし、フォーム デザイナーでボタンを右クリックするとメニュー項目が表示されます。
しかし、複数のボタン コントロールを選択すると、このコンポーネント エディタ メニューが表示されません。
コンポーネント エディタは、デフォルトで 1 つの選択されたコントロールのみで動作しますか? それとも、選択された複数のコントロールで動作しますか? もしそうなら、どのように動作しますか?
ロングバージョン
私は、自分のコンポーネントの 1 つに TPropertyEditor を実装しようとしていましたが、TComponentEditor の方が適切であると判断したか、そう思ったのです。
基本的に、所有者が描いた TCustomButton があります。このボタン コンポーネントには、境界線や塗りつぶしの色などの外観を変更するための公開されたプロパティがいくつかあります。
私が実装しているコンポーネント エディターは、コンテキスト メニューに [ファイルから設定を読み込む] という新しいメニュー項目を表示します。実行すると、適切なファイルを選択できる単純な TOpenDialog が表示されます。たとえば、Ini ファイルを読み取って、それに応じてファイルから値を設定します。
私が見る限り、すべてがうまく機能していますが、私はまだ初心者であり、Delphi のカスタム コントロール全体を把握しているため、何かが起こらないことに気付きました - これが実際に意図された動作なのか、それとも変えられるかどうか。
問題は、ボタン コントロールの複数の選択されたインスタンスでコンポーネント エディタ メニューを使用することです。ボタンを 1 つだけ選択してデザイナで右クリックすると、コンテキスト メニューの上部にメニューが表示されますが、複数のコントロールを選択するとコンポーネント エディタ メニューが表示されません。
コードサンプル
type
TMyButtonEditor = class(TComponentEditor)
public
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
end;
implementation
{ TMyButtonEditor }
procedure TMyButtonEditor.ExecuteVerb(Index: Integer);
var
OpenDialog: TOpenDialog;
begin
case Index of
0:
begin
OpenDialog := TOpenDialog.Create(nil);
try
OpenDialog.Filter := 'All Files (*.*)|*.*';
if OpenDialog.Execute then
begin
// handle opened file..
end;
finally
OpenDialog.Free;
end;
end;
end;
end;
function TMyButtonEditor.GetVerb(Index: Integer): string;
begin
case Index of
0:
begin
Result := 'Load settings from File...';
end;
end;
end;
function TMyButtonEditor.GetVerbCount: Integer;
begin
Result := 1;
end;
登録手続き単位:
RegisterComponentEditor(TMyButton, TMyButtonEditor);
コンポーネント エディタを使用できるのは、いつでも 1 つのコンポーネントのみであることがわかります。それとも、複数のコントロールで使用できるのは間違っていますか?
フォーム デザイナで 3 つまたは 4 つのボタンを選択し、コンポーネント エディタを使用してそれらのボタンにインポートした設定を一度に適用したいと考えていました。