条件によりconstの値を変えるには?

解決


angelica  2008-03-04 12:18:16  No: 30040  IP: 192.*.*.*

globalに定義する真の定数MaxValueを
条件によって、例えば今日の日付が2008/04/01以前ならばconst MaxValue =237、
以降ならばconst MaxValue =123と記述する方法は?

編集 削除
もにゃ  2008-03-04 12:29:07  No: 30041  IP: 192.*.*.*

それはconstの定義から外れます。
普通に変数を使いましょう

編集 削除
紅玉  2008-03-04 12:54:25  No: 30042  IP: 192.*.*.*

>angelicaさん
もにゃさんが書かれているとおり、そういう場合は変数を使うのが作法かな。

しかし、どうしても宣言部に定数を明示したいということなら、

const IntArray: array[0..1] of Integer = (123, 237);

procedure TForm1.Button1Click(Sender: TObject);
begin
   if 条件 then
      Label1.Caption := IntToStr(IntArray[0])
      else
      Label1.Caption := IntToStr(IntArray[1])
end;

書いてはみたけど、やはり、これは無作法ですね。

編集 削除
angelica  2008-03-04 13:16:34  No: 30043  IP: 192.*.*.*

バージョンアップがglobal定数の変更だけであるときに、
事前に(2008/04/01以前に)条件付で定義できたら・・・
と思って質問してみました。
global定数を変更すること自体が反道徳的?

編集 削除
KHE00221  2008-03-04 13:29:08  No: 30044  IP: 192.*.*.*

たとえば

if Date < 2008/04/01 then const MaxValue := 237 else const MaxValue := 123;

のような事が出来たとしても

I := MaxValue とした場合実行時には I := 237 となっていますので

再構築は必要ですよ

条件を付けれるとしてもあくまでコンパイル時の条件になります
(バージョン判定とかと同じように)

編集 削除
angelica  2008-03-04 13:39:37  No: 30045  IP: 192.*.*.*

了解しました。
low levelの質問にお付き合いくださった、もにゃ様、紅玉様、KHE00221様ありがとうございました。

編集 削除
igy  2008-03-04 13:41:39  No: 30046  IP: 192.*.*.*

>バージョンアップがglobal定数の変更だけであるときに、

{$DEFINE APPVER1}  // <=バージョンアップしたらAPPVER1をAPPVER2とかに変えること

const
{$IFDEF APPVER1}
    MaxValue = 237;
{$ELSE}
    MaxValue = 123;
{$ENDIF}

みたいにするのは、どうです?

編集 削除
angelica  2008-03-04 13:49:46  No: 30047  IP: 192.*.*.*

条件付コンパイルは未体験領域ですので(^^;)、しばし時間を・・
igy様ありがとうございました。

編集 削除
KHE00221  2008-03-04 15:19:30  No: 30048  IP: 192.*.*.*

こんな感じかな

var
  Form4: TForm4;
  MemoryStream: TMemoryStream;

implementation

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
begin
    MemoryStream.Position := 0;
    DBGrid1.Columns.LoadFromStream(MemoryStream);
end;

procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    MemoryStream.Free;
end;

procedure TForm4.FormCreate(Sender: TObject);
begin
    MemoryStream := TMemoryStream.Create;
    DBGrid1.Columns.SaveToStream(MemoryStream);

end;

編集 削除
KHE00221  2008-03-04 15:20:28  No: 30049  IP: 192.*.*.*

↑のは書き込み場所ミス

編集 削除