定数の内容は変更できますか?

解決


初心者  2004-01-08 20:45:17  No: 6609  IP: 192.*.*.*

Constで定義している定数の内容は変更できますか?
  HeaderControlのSectionを動的に作成しています。

Const
  HdrSecDivision = 0;
  HdrSecSetUp    = 1;

begin
  Case HeaderControl1.Sections.index of
   HdrSecDivision  : 処理
   HdrSecSetUp     : 処理
  

  の時にSectionのindexを変更した時に、それに対応してCaseに対応している定数の内容を変更したいのですがIntegerで宣言した整数値では、Case文の部分で定数式を指定してくださいとエラーがでます。
 やり方がありましたらご教授ください。

編集 削除
Q  2004-01-08 22:31:29  No: 6610  IP: 192.*.*.*

var
  HdrSecDivision,HdrSecSetUp: integer;

begin
  case HeaderControl1.Sections.index of
   0: HdrSecDivision:=1;
   1: HdrSecSetUp:= 5;
  end;
end;

こんなのではダメでしょうか?

編集 削除
にしの  2004-01-08 22:40:30  No: 6611  IP: 192.*.*.*

値が変えられたら「定数」じゃないですよ^^;
仕様を見直した方がよろしいかと思います。

どうしても変えたい場合は、実行時に定数を使用しているアドレスを取得し、書き換えてやればよいかと思います。
定数を使用している箇所全てです。単純に定数名から得られるアドレスではダメです。
定数は、コンパイル時点で値に置き換えられている場合があるためです。

編集 削除
初心者  2004-01-09 09:46:43  No: 6612  IP: 192.*.*.*

やはり変更は無理ですよね^^;
ありがとうございます!!
何か違う方法を見つけてみます!!

編集 削除
HOta  2004-01-09 11:01:57  No: 6613  IP: 192.*.*.*

型付き定数というのがありますよ。これは変更可能です。

編集 削除
のり  2004-01-11 18:04:06  No: 6614  IP: 192.*.*.*

>型付き定数というのがありますよ。これは変更可能です。

Const
  HdrSecDivision : Integer 0;
  HdrSecSetUp    : Integer 1;

のような、事でしょうか?
これでやったのですが、これでも定数式を入れてくださいと言われエラーが出ます。
IF文での分岐を使って解決したので、処理が汚くなってしまいましたが^^;
大丈夫だと思いますwありがとうございますw

編集 削除
初心者  2004-01-11 18:07:12  No: 6615  IP: 192.*.*.*

ちなみに
  
  のり=初心者ではなく

  のりさんは、学友ですw

  詳しく早く教えてくださる方が多いと聞きこのサイトを教えてもらいましたw

編集 削除
Mr.XRAY  URL  2004-01-11 21:13:47  No: 6616  IP: 192.*.*.*

型付き変数ですが,

>Const
>  HdrSecDivision : Integer 0;
>  HdrSecSetUp    : Integer 1;

= が抜けています.

 HdrSecDivision : Integer=0;
 HdrSecSetUp    : Integer=1;

また場合によっては,コンパイルのオプションに{$J+}を指定する
必要があります.

編集 削除
jok  2004-01-11 22:23:23  No: 6617  IP: 192.*.*.*

ま、いずれにしても case 文のケースリストには使えないわけだが

編集 削除
Mr.XRAY  URL  2004-01-11 23:21:09  No: 6618  IP: 192.*.*.*

まっ,元々,

>値が変えられたら「定数」じゃないですよ^^;
>仕様を見直した方がよろしいかと思います。

ということです.定数は定数だから定数なのであって
変化する値は変数ですからね.

編集 削除