教えて下さい。
クラスに
Example = class(Tform)
property test1Mode :String
property test2Mode :String
property test3Mode :String
とあるとします。
関数で
procedure TEST(ex);
begin
i := Example.ex;
end;
というふうにexにそれぞれtest1Mode,test2Mode,test3Modeを
わたしてTESTの関数の中で使用したいです。
(TEST(test1Mode); <--呼び出しイメージ)
ちなみに
procedure TEST(ex:String);
begin
i := ex;
end;
(TEST(Example.test1Mode); <--呼び出し)
とすれば問題ありませんが、どうしても上のようなやり方で
やりたいのですが、何かいい方法ありますでしょうか?
わかりづらい説明ですいません。
よろしくおねがいします。
続けてすいません。
先ほどの質問につづいてですが
procedure TEST(TestNo:String);
begin
i := Example.('Test'+TestNo+'Mode');
end;
(TEST('1'); <--呼び出し)
のようなことでもいいのでできませんか?
iは「何ですか?
propertyで何をするのですか?
ぴんとこないけど、こんなの?
THoge = class
private
function GetTestMode(Index: Integer): String;
procedure SetTestMode(Index: Integer; aValue: String);
public
property TestMode[Index: Integer]: String read GetTestMode write SetTestMode;
end;
function THoge.GetTestMode(Index: Integer): String;
begin
case Index of
0: Result := 'Hoge';
1: Result := 'HogeHoge';
else Result := 'Hoge????';
end;
end;
function THoge.SetTestMode(Index: Integer; aValue: String);
begin
//
end;
使うとき
var
hoge: THoge;
begin
hoge := THoge.Create;
ShowMessage(hoge.TestMode[0]);
ShowMessage(hoge.TestMode[1]);
ShowMessage(hoge.TestMode[2]);
hoge.Free;
end;
出来るけど・・・・普通はIndexにするな
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TypInfo;
type
TExSample = class(TComponent)
private
FTest1Mode: String;
FTest2Mode: String;
FTest3Mode: String;
published
property test1Mode :String read FTest1Mode write FTest1Mode;
property test2Mode :String read FTest2Mode write FTest2Mode;
property test3Mode :String read FTest3Mode write FTest3Mode;
end;
TForm3 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form3: TForm3;
ExSample: TExSample;
implementation
{$R *.dfm}
procedure Test(Text: String);
var
p: PPropInfo;
S: String;
begin
P := GetPropInfo(ExSample.ClassInfo,Text);
if P <> nil then
begin
if (p^.PropType^.Kind = tkLString) or (p^.PropType^.Kind = tkString) or (p^.PropType^.Kind = tkString) or (p^.PropType^.Kind = tkWString)then
begin
S := GetStrProp(ExSample,Text);
ShowMessage(S);
end;
end;
end;
procedure TForm3.Button1Click(Sender: TObject);
begin
Test('Test2Mode');
end;
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ExSample.Free;
end;
procedure TForm3.FormCreate(Sender: TObject);
begin
ExSample := TExSample.Create(Self);
EXSample.test1Mode := 'TEST1';
EXSample.test2Mode := 'TEST2';
EXSample.test3Mode := 'TEST3';
end;
end.
皆さん、ありがとうございます。
とりあえず簡単にやれそうなのはなさそうなので、
TEST('test1' );
などで呼び出して、引数をTESTの中で判断してPropertyの使い分け
を行いたいと思います。
ツイート | ![]() |