コンポーネントの動的生成時に下記のような構文がよくありますが
このTButtonの部分を文字列で代入することは出来ないでしょうか?
with TButton.Create(Self) do begin
var s:string;
s:='tmemo';
with (s).Create(Self) do begin
これですか?
System.Classes.FindClass - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Tokyo/ja/System.Classes.FindClass
通りすがり様、ありがとうございます。
まさにそれです!!ありがとうございます。
早速やってみたところ、それを使うには下記のように宣言が必要で
今度はRegisterClassesの下記のtmemoの部分をstring型で登録する方法を模索しないといけない状態になってしまいました(>_<)
RegisterClasses([tmemo, TForm]);
TPersistentClassに tmemoを文字列し、下記のような感じで利用したく思っております。
おわかりになりますでしょうか。
何をしたいのかがよくわからないのですが、結局作るクラスそのものはどこかに存在しなければならないのは当然のこととして、その*クラス参照*を
System.Classes.RegisterClass - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Tokyo/ja/System.Classes.RegisterClass
で登録しておく必要がある、ということなわけですが、さてあなたの"TMemo"はどのユニットにあるどのTMemoクラスなんですか?
この問題を解決できないので、
> RegisterClassesの下記のtmemoの部分をstring型で登録する方法
ってのは難しいと思いますね。一番簡単なのは必要なコンポーネントを全種類一つずつフォームに貼っちゃうことかな?
S := 'TBUTTON';
with S.Create(Self) do
いちおうできるんだけど・・・・・・・
TStringHelper = record helper for String
private
function Create(AOwner: TComponent): TControl;
end;
function TStringHelper.Create(AOwner: TComponent): TControl;
var
CRef : TPersistentClass;
begin
CRef := GetClass(Self);
if CRef<>nil then
begin
Result := TControl(TControlClass(CRef).Create(AOwner));
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
S: String;
begin
RegisterClasses([TButton]);
begin
Parent := Form4;
Width := 150;
Height := 30;
Left := 100;
Top := 100;
Caption := 'BUTTON'; //TControl にCaption が無い為 Formに設定される
end;
end;
function Create(AOwner: TComponent): TControl;
なので
with S.Create(Self) do
以下で設定できるので TControl のプロパティのみ
TWinControlにすれば TWinControl (ちょっとふえるかも)
with TButton(S.Create(Self)) do
のように TButtonで囲むか
function Create(AOwner: TComponent): TButton;
にすれば TButton のプロパティも設定できるが、汎用性はなくなる
Sの内容によって 返り値の型を変えるって事ができないから
抜けてた
procedure TForm4.Button1Click(Sender: TObject);
var
S: String;
begin
RegisterClasses([TButton]);
S := 'TBUTTON';
with S.Create(Self) do
begin
Parent := Form4;
Width := 150;
Height := 30;
Left := 100;
Top := 100;
Caption := 'BUTTON'; //TControl にCaption が無い為 Formに設定される
end;
end;
ツイート | ![]() |