Перенос переменных между формами
Всем доброго времени суток! Работаю с делфи недавно и вот появился вопрос, на который я легко нашел ответ в интернете. Но теперь что то не работает и я никак не могу найти ошибку.
У меня есть три модуля. TV1 - основной и два вспомогательных: MO и Unite3. Задача: из MO загрузить массив в TV1, откуда она попадет в Unite3.
При проверке оказалось, что значения в TV1передаются и даже записываются в Form3.*переменная* но вот в самой Form3 не выводятся почему. Ну не получает форма значения, ну никак. Помогите найти ошибку, пожалуйста.
Код:
unit MO;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Math, Grids;
type
TForm2 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Memo: TMemo;
Label3: TLabel;
SG: TStringGrid;
Label4: TLabel;
Label5: TLabel;
procedure FormActivate(Sender: TObject);
procedure FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
M : double;
Mass : Array[1..100] of double;
end;
const
Form2: TForm2 = nil;
Var
PO : Array[1..10] of real;
implementation
Uses TV1, Unit3;
{$R *.dfm}
procedure TForm2.FormActivate(Sender: TObject);
Var
i,j,p,op:integer;
Chr:String;
Sum,s:double;
begin
//Вывод общего Мо
Label2.Caption:='Математическое ожидание= '+FloatToStr(M)+#13+#13+'Матeматическое ожидание рассчитывает'
+' по формуле: M=x1*p1+x2*p2+... где x-это номинал, а p-вероятность.'+#13+'Мат. Ожидание=Сумме произведения'
+' номинала на вероятность.';
// Рассчет и вывод оценки
Memo.Lines.Insert(0, 'Оценка Математического ожидания'+#13);
Memo.Lines.Insert(1, '');
Memo.Lines.Insert(2, 'Оценка Математического ожидания считается по формуле: 1\n(x1+...xn). Все результаты округлены до 4 цифр после запятой.');
p:=10; op:=1;
for i:=3 to 22 do
Begin
sum:=0;
Chr:='';
for j:=1 to p do
Begin
Sum:=sum+Mass[j];
Chr:=Chr+FloatToStr(Mass[j])+' + ';
End;
Delete(Chr,Length(Chr)-2,3);
if (i mod 2)=0 then Memo.Lines.Insert(i,'') else
begin
Memo.Lines.Insert(i,'M'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
SG.Cells[op-1,0]:=IntToStr(p);
SG.Cells[op-1,1]:=FloatToStr(RoundTo(Sum/p,-4));
PO[op]:=RoundTo(Sum/p,-4);
p:=p+10;
op:=op+1;
End;
End;
for i:=1 to 10 do Form1.PO[i]:=PO[i];
end;
//Прокрутка вверх и вниз
procedure TForm2.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
VertScrollBar.Position:=VertScrollBar.Position+10;
end;
procedure TForm2.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
VertScrollBar.Position:=VertScrollBar.Position-10;
end;
end.
Код:
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Math, Grids;
type
TForm3 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Mem: TMemo;
Label3: TLabel;
Memo12: TMemo;
Memo13: TMemo;
Memo14: TMemo;
Memo15: TMemo;
Memo16: TMemo;
Memo17: TMemo;
Memo18: TMemo;
Memo19: TMemo;
Memo110: TMemo;
Memo11: TMemo;
SG: TStringGrid;
Label4: TLabel;
Label5: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
procedure FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
D : double;
Mass : Array[1..100] of double;
PO : Array[1..10] of real;
end;
Const
Form3: TForm3 = nil;
implementation
uses TV1, MO;
{$R *.dfm}
procedure TForm3.FormCreate(Sender: TObject);
Var
i,j,p,op:integer;
Chr:String;
Sum,s:double;
begin
Label2.Caption:='Дисперсия= '+FloatToStr(D)+#13+#13+'Дисперсия рассчитывается'
+' по формуле: D=x1^2*p1+x2^2+p2...-M где M- мат. ожидание'+#13;
Mem.Lines.Insert(0, 'Оценка дисперсии'+#13);
Mem.Lines.Insert(1, '');
Mem.Lines.Insert(2, 'Оценка дисперсии считается по формуле: 1\n((x1-M1)^2+...+(xn-Mn)^2). Все значение округлены до 4 знаков после запятой.');
p:=10; op:=1;
for i:=3 to 22 do
Begin
sum:=0;
Chr:='';
for j:=1 to p do
Begin
Sum:=sum+Power(Mass[j]-PO[op],2);
Chr:=Chr+'('+FloatToStr(Mass[j])+' - '+FloatToStr(PO[op])+')'+'^'+'2'+' + ';
End;
Delete(Chr,Length(Chr)-2,3);
if (i mod 2)=0 then Mem.Lines.Insert(i,'') else
begin
Mem.Lines.Insert(i,'D'+IntToStr(op)+'= '{+'1/'+IntToStr(p)+'*'+'('+Chr+')= '}+FloatToStr(RoundTo(Sum/p,-4))+#13);
SG.Cells[op-1,0]:=IntToStr(p);
SG.Cells[op-1,1]:=FloatToStr(RoundTo(Sum/p,-4));
Case op of
1 : Memo12.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
2 : Memo13.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
3 : Memo14.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
4 : Memo15.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
5 : Memo16.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
6 : Memo17.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
7 : Memo18.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
8 : Memo19.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
9 : Memo110.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
10 : Memo11.Lines.Insert(1,'D'+IntToStr(op)+'= '+'1/'+IntToStr(p)+'*'+'('+Chr+')= '+FloatToStr(RoundTo(Sum/p,-4))+#13);
End;
p:=p+10;
op:=op+1;
End;
End;
end;
procedure TForm3.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
VertScrollBar.Position:=VertScrollBar.Position-10;
end;
procedure TForm3.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
VertScrollBar.Position:=VertScrollBar.Position+10;
end;
procedure TForm3.FormActivate(Sender: TObject);
begin
if Form2=nil then
begin
ShowMessage('Вы не посчитали математическое ожидание!');
Exit;
End;
end;
end
Код:
program Project1;
uses
Forms,
TV1 in 'TV1.pas' {Form1},
MO in 'MO\MO.pas' {Form2},
Unit3 in 'DISCR\Unit3.pas' {Form3};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
|