以下をglobal変数で宣言して、
Form1 :TForm1;
dateN :Tdate;
strDate :string;
Zaikei :array[0..12] of string;
c :array[0..21] of Tcolor;
Sg :array[0..12] of TStringGrid;
------
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
For i:=1 to 12 do Sg[i]:=findcomponent('StringGrid'+inttostr(i)) as TStringGrid;
shokika;
end;
------
procedure TForm1.Shokika;
begin
Sg[1].colcount:=2;
・
・
end;
------
と記述し、実行しますとエラーになります。
global変数の宣言順を変更して、
Form1 :TForm1;
Sg :array[0..12] of TStringGrid;
dateN :Tdate;
strDate :string;
Zaikei :array[0..12] of string;
c :array[0..21] of Tcolor;
------
と記述しますとOKでした。
global変数の宣言順序になにかルールがあるのでしょうか?
(WinXp,D7-pro)
最初の記述でエラーでませんでした。
どのようなエラーが出ていますか?
(WinXp SP2,D7-Enterprise)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private 宣言 }
procedure Shokika;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
dateN :Tdate;
strDate :string;
Zaikei :array[0..12] of string;
c :array[0..21] of Tcolor;
Sg :array[0..12] of TStringGrid;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
For i:=1 to 12 do Sg[i]:=findcomponent('StringGrid'+inttostr(i)) as TStringGrid;
shokika;
end;
procedure TForm1.Shokika;
begin
Sg[1].colcount:=2;
end;
end.
Ru様、検証ありがとうございました。
原因は宣言順序とは無関係でした(m--m)
Shokika procedure の中で、c[0..21]の読み込みがあるのですが、
配列が21を超える場合があってのエラーでした。
procedure TForm1.Shokika;
begin
Sg[1].colcount:=2;
Colorling(c);
end;
投稿者の不注意によりご迷惑をかけましたことを深くお詫び致します。
ツイート | ![]() |