globalに定義する真の定数MaxValueを
条件によって、例えば今日の日付が2008/04/01以前ならばconst MaxValue =237、
以降ならばconst MaxValue =123と記述する方法は?
それはconstの定義から外れます。
普通に変数を使いましょう
>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;
書いてはみたけど、やはり、これは無作法ですね。
バージョンアップがglobal定数の変更だけであるときに、
事前に(2008/04/01以前に)条件付で定義できたら・・・
と思って質問してみました。
global定数を変更すること自体が反道徳的?
たとえば
if Date < 2008/04/01 then const MaxValue := 237 else const MaxValue := 123;
のような事が出来たとしても
I := MaxValue とした場合実行時には I := 237 となっていますので
再構築は必要ですよ
条件を付けれるとしてもあくまでコンパイル時の条件になります
(バージョン判定とかと同じように)
了解しました。
low levelの質問にお付き合いくださった、もにゃ様、紅玉様、KHE00221様ありがとうございました。
>バージョンアップがglobal定数の変更だけであるときに、
{$DEFINE APPVER1} // <=バージョンアップしたらAPPVER1をAPPVER2とかに変えること
const
{$IFDEF APPVER1}
MaxValue = 237;
{$ELSE}
MaxValue = 123;
{$ENDIF}
みたいにするのは、どうです?
条件付コンパイルは未体験領域ですので(^^;)、しばし時間を・・
igy様ありがとうございました。
、
こんな感じかな
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;
↑のは書き込み場所ミス
ツイート | ![]() |