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

解決


angelica  2008-03-04 21:18:16  No: 30040

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


もにゃ  2008-03-04 21:29:07  No: 30041

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


紅玉  2008-03-04 21:54:25  No: 30042

>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 22:16:34  No: 30043

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


KHE00221  2008-03-04 22:29:08  No: 30044

たとえば

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

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

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

再構築は必要ですよ

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


angelica  2008-03-04 22:39:37  No: 30045

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


igy  2008-03-04 22:41:39  No: 30046

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

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

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

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


angelica  2008-03-04 22:49:46  No: 30047

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


KHE00221  2008-03-05 00:19:30  No: 30048

こんな感じかな

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-05 00:20:28  No: 30049

↑のは書き込み場所ミス


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

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






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