Classに設定しているPropertyの使い分け

解決


じゅん  2010-01-26 19:45:29  No: 37282

教えて下さい。

クラスに

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); <--呼び出し)

とすれば問題ありませんが、どうしても上のようなやり方で
やりたいのですが、何かいい方法ありますでしょうか?
わかりづらい説明ですいません。

よろしくおねがいします。


じゅん  2010-01-26 20:07:41  No: 37283

続けてすいません。
先ほどの質問につづいてですが

procedure TEST(TestNo:String);
begin
 i := Example.('Test'+TestNo+'Mode');
end;

(TEST('1'); <--呼び出し)

のようなことでもいいのでできませんか?


HOta  2010-01-26 20:44:17  No: 37284

iは「何ですか?
propertyで何をするのですか?


ぽむぽむ  2010-01-26 21:05:25  No: 37285

ぴんとこないけど、こんなの?

  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;


KHE00221  2010-01-26 21:44:41  No: 37286

出来るけど・・・・普通は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.


じゅん  2010-01-26 22:56:00  No: 37287

皆さん、ありがとうございます。

とりあえず簡単にやれそうなのはなさそうなので、
TEST('test1' );
などで呼び出して、引数をTESTの中で判断してPropertyの使い分け
を行いたいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加