![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем доброго времени суток! Работаю с делфи недавно и вот появился вопрос, на который я легко нашел ответ в интернете. Но теперь что то не работает и я никак не могу найти ошибку.
У меня есть три модуля. 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.
|
|
#2
|
|||
|
|||
|
В коде могут быть не оптимизированные моменты, буду рад, если вы мне о них скажете и расскажите, как это исправить
Код:
unit TV1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShellApi, StdCtrls, Grids, Math;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
StringGrid1: TStringGrid;
Label3: TLabel;
Label4: TLabel;
Edit2: TEdit;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Label8: TLabel;
Edit6: TEdit;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Button2: TButton;
StringGrid2: TStringGrid;
Label12: TLabel;
Label13: TLabel;
Label2: TLabel;
Label14: TLabel;
Edit10: TEdit;
Button3: TButton;
Label16: TLabel;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
OpenDialog: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure Edit4KeyPress(Sender: TObject; var Key: Char);
procedure Edit5KeyPress(Sender: TObject; var Key: Char);
procedure Edit6KeyPress(Sender: TObject; var Key: Char);
procedure Edit7KeyPress(Sender: TObject; var Key: Char);
procedure Edit8KeyPress(Sender: TObject; var Key: Char);
procedure Edit9KeyPress(Sender: TObject; var Key: Char);
procedure Edit10KeyPress(Sender: TObject; var Key: Char);
procedure Edit1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
PO : Array[1..10] of real;
end;
Var
Form1: TForm1;
M,D: double;
Mass:Array[1..100] of double;
implementation
Uses MO, Unit3;
{$R *.dfm}
//Открытие формы
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Visible:=false;
StringGrid2.Visible:=false;
Label12.Visible:=false;
Label13.Visible:=false;
Label2.Visible:=false;
Button4.Visible:=false;
Button5.Visible:=false;
Button6.Visible:=false;
Button3.Visible:=false;
Label16.Visible:=false;
FillChar(Mass, SizeOf(Mass), 0);
end;
procedure TForm1.Edit1Click(Sender: TObject);
begin
Edit1.Text:='';
end;
//чтение файла
procedure TForm1.Button1Click(Sender: TObject);
var
f: TextFile;
fName,buf: String[80];
i,j,p,res:integer;
answ: word;
Ms:Array[1..100] of String;
begin
p:=1;
fName:=Edit1.Text;
AssignFile(f, fName);
StringGrid1.Visible:=true;
Button3.Visible:=true;
Label16.Visible:=true;
//Запись из файла в массив
For i:=1 to 100 do Readln(f,Ms[i]);
//Проверка и изменение целых чисел с точкой
For i:=1 to 100 do
Begin
buf:=Ms[i];
For j:=1 to 5 do //Буду надеяться, что в файле не будет числа с целой частью больше 5
Begin
if buf[j]='.' then begin
buf[j]:=',';
Ms[i]:=buf;
end;
End;
End;
//Запись в таблицу
For i:= 0 To 9 do
For j:= 0 To 9 do
Begin
StringGrid1.Cells[j,i]:=Ms[p];
p:=p+1;
End;
//Превращение строкового массива в целый
For i:=1 to 100 do Mass[i]:=StrToFloat(Ms[i]);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
matr:array[1..2,1..8] of real;
i,j,kol:integer;
begin
//Если поля пустые - заменяем их 0
if Edit2.Text='' then Edit2.Text:='0';
if Edit3.Text='' then Edit3.Text:='0';
if Edit4.Text='' then Edit4.Text:='0';
if Edit5.Text='' then Edit5.Text:='0';
if Edit6.Text='' then Edit6.Text:='0';
if Edit7.Text='' then Edit7.Text:='0';
if Edit8.Text='' then Edit8.Text:='0';
if Edit9.Text='' then Edit9.Text:='0';
if Edit10.Text='' then Edit10.Text:='0';
matr[1,1]:=StrToInt(Edit2.Text);
matr[1,2]:=StrToInt(Edit3.Text);
matr[1,3]:=StrToInt(Edit4.Text);
matr[1,4]:=StrToInt(Edit5.Text);
matr[1,5]:=StrToInt(Edit6.Text);
matr[1,6]:=StrToInt(Edit7.Text);
matr[1,7]:=StrToInt(Edit8.Text);
matr[1,8]:=StrToInt(Edit9.Text);
//проверка полей
kol:=StrToInt(Edit10.Text);
If kol=0 then
Begin
ShowMessage('Количество монет не может быть равно 0!');
Exit;
End;
if kol<>StrToInt(Edit2.Text)+StrToInt(Edit3.Text)+StrToInt(Edit4.Text)+StrToInt(Edit5.Text)+StrToInt(Edit6.Text)
+StrToInt(Edit7.Text)+StrToInt(Edit8.Text)+StrToInt(Edit9.Text) then begin
ShowMessage('Количество монет не ровняется количеству монет, введёным в поля!');
Exit;
end;
StringGrid2.Visible:=true;
Label12.Visible:=true;
Label13.Visible:=true;
Label2.Visible:=true;
Button4.Visible:=true;
Button5.Visible:=true;
Button6.Visible:=true;
for i:=1 to 8 do matr[2,i]:=RoundTo(matr[1,i]/kol,-4);
StringGrid2.Cells[0,0]:='10';
StringGrid2.Cells[1,0]:='5';
StringGrid2.Cells[2,0]:='2';
StringGrid2.Cells[3,0]:='4';
StringGrid2.Cells[4,0]:='3';
StringGrid2.Cells[5,0]:='0,1';
StringGrid2.Cells[6,0]:='0,05';
StringGrid2.Cells[7,0]:='0,01';
for i:=0 to 7 do StringGrid2.Cells[i,1]:=FloatToStr(matr[2,i+1]);
M:=0;
D:=0;
For i:=0 to 7 do M:=M+StrToFloat(StringGrid2.Cells[i,0])*StrToFloat(StringGrid2.Cells[i,1]); //Мат ожидание
For i:=0 to 7 do D:=D+exp(2*ln(StrToFloat(StringGrid2.Cells[i,0])))*StrToFloat(StringGrid2.Cells[i,1]); //Дисперсия
D:=D-M;
end;
//тут происходит магия и блокируются все плохие буквы.
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9': ; // цифра
#8 : ; // клавиша <Back Space>
#13 : Edit3.SetFocus ; // клавиша <Enter>
else Key :=Chr(0); // символ не отображать
if Key='' then Edit2.Text:='0';
end;
end;
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9': ; // цифра
#8 : ; // клавиша <Back Space>
#13 : Edit4.SetFocus ; // клавиша <Enter>
else Key :=Chr(0); // символ не отображать
if Key='' then Edit2.Text:='0';
end;
end;
procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9': ; // цифра
#8 : ; // клавиша <Back Space>
#13 : Edit5.SetFocus ; // клавиша <Enter>
else Key :=Chr(0); // символ не отображать
if Key='' then Edit2.Text:='0';
end;
end;
procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9': ; // цифра
#8 : ; // клавиша <Back Space>
#13 : Edit6.SetFocus ; // клавиша <Enter>
else Key :=Chr(0); // символ не отображать
if Key='' then Edit2.Text:='0';
end;
end;
procedure TForm1.Edit6KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9': ; // цифра
#8 : ; // клавиша <Back Space>
#13 : Edit7.SetFocus ; // клавиша <Enter>
else Key :=Chr(0); // символ не отображать
if Key='' then Edit2.Text:='0';
end;
end;
procedure TForm1.Edit7KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9': ; // цифра
#8 : ; // клавиша <Back Space>
#13 : Edit8.SetFocus ; // клавиша <Enter>
else Key :=Chr(0); // символ не отображать
if Key='' then Edit2.Text:='0';
end;
end;
procedure TForm1.Edit8KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9': ; // цифра
#8 : ; // клавиша <Back Space>
#13 : Edit9.SetFocus ; // клавиша <Enter>
else Key :=Chr(0); // символ не отображать
if Key='' then Edit2.Text:='0';
end;
end;
procedure TForm1.Edit9KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9': ; // цифра
#8 : ; // клавиша <Back Space>
#13 : ; // клавиша <Enter>
else Key :=Chr(0); // символ не отображать
if Key='' then Edit2.Text:='0';
end;
end;
procedure TForm1.Edit10KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9': ; // цифра
#8 : ; // клавиша <Back Space>
#13 : ; // клавиша <Enter>
else Key :=Chr(0); // символ не отображать
if Key='' then Edit2.Text:='0';
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
i,p:integer;
begin
if Form2=nil then Form2:= TForm2.create( self );
p:=0;
Form2.M:=RoundTo(M,-4);
for i:=1 to 100 do if Mass[i]<>0 then p:=p+1;
if p<>0 then for i:=1 to 100 do Form2.Mass[i]:=Mass[i]
else
Begin
ShowMessage('Вы не загрузили файл или все значения равны нулю!');
Exit
End;
Form2.Show;
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
OpenDialog.InitialDir := ExtractFilePath( Application.exename );
if OpenDialog.Execute then Edit1.Text:=OpenDialog.FileName;
end;
procedure TForm1.Button5Click(Sender: TObject);
var
i,p:integer;
begin
if Form3=nil then Form3:= TForm3.create( self );
p:=0;
Form3.D:=RoundTo(D,-4);
ShowMessage('D= '+FloatToStr(D)+' '+'FD= '+FloatToStr(Form3.D));
for i:=1 to 100 do if Mass[i]<>0 then p:=p+1;
if p<>0 then for i:=1 to 100 do Form3.Mass[i]:=Mass[i]
else
Begin
ShowMessage('Вы не загрузили файл или все значения равны нулю!');
Exit
End;
p:=0;
for i:=1 to 10 do Form3.PO[i]:=PO[i];
Form3.Show;
end;
End.
|
|
#3
|
||||
|
||||
|
Зачем что-то куда-то передавать? Массив буде доступен любому юниту, который подключит юнит с массивом. При условии, что массив находится в секции public или обозначен как var и находится в секции interface.
|
|
#4
|
|||
|
|||
|
В TV1 формы создаются и, что бы не париться с этим делом, я просто передаю их туда.
Ошибка то в том, что в 358 строчке (for i:=1 to 10 do Form3.PO[i]:=PO[i] массив передаётся и можно вывести переменные Form3.PO[i] и PO[i];Но вот в Form3 ничего нет и все равно 0. |
|
#5
|
||||
|
||||
|
Объявляю вас победителем в номинации "Лучший говнокод-китайкод месяца" ![]() Последний раз редактировалось M.A.D.M.A.N., 10.11.2013 в 19:10. |
| Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
PhoeniX (10.11.2013)
| ||
|
#6
|
|||
|
|||
|
Спасибо, приятно.
Но если вы поподробнее расскажите, что же такого страшного в моей писанине, то в будущем постараюсь такого не писать. |
|
#7
|
||||
|
||||
|
Ну там процентов на 90 можно код сократить, ибо код повторяется.
|
|
#8
|
|||
|
|||
|
Цитата:
Тогда вопрос. Есть вот такой блок: Код:
if Edit2.Text='' then Edit2.Text:='0'; if Edit3.Text='' then Edit3.Text:='0'; if Edit4.Text='' then Edit4.Text:='0'; if Edit5.Text='' then Edit5.Text:='0'; if Edit6.Text='' then Edit6.Text:='0'; if Edit7.Text='' then Edit7.Text:='0'; if Edit8.Text='' then Edit8.Text:='0'; if Edit9.Text='' then Edit9.Text:='0'; if Edit10.Text='' then Edit10.Text:='0'; Как его сократить? С делфи работаю не так долго, поэтому не знаю, как изменять номера Edit-ов и что бы при этом все работало. |
|
#9
|
||||
|
||||
|
Код:
procedure Nvl_(const AEdList: array of TEdit);
var
i: integer;
begin
for i := 0 to Length(AEdList) - 1 do
with AEdList[i] do
if Text = '' then
AEdList[i].Text := '0';
end;
...
Nvl_([edit1, edit2, edit3...edit100]); |
|
#10
|
|||
|
|||
|
Цитата:
Спасибо, применю. А по поводу ошибки, ради которой и создавалась тема нет идей? Цитата:
Последний раз редактировалось M.A.D.M.A.N., 10.11.2013 в 22:44. |
|
#11
|
||||
|
||||
|
А можно запилить класс-наследник TEdit и добавить ему нужных методов/полей. А потом с помощью известного хака подменить им стандартный TEdit, для простоты использования.
Вообще все проблемы этого кода растут из того факта, что автор не умеет в ООП. Нет, вы учитесь "просто что-то кодить". А ООП требует отдельного понимания, которое порой никак не идёт. Зато когда наконец доходит - сразу глубоко проникаешься этими идеями. По сабжу: А переменная Form3 где объявлена? Вот это что ли? Код:
Const Form3: TForm3 = nil; Последний раз редактировалось M.A.D.M.A.N., 10.11.2013 в 22:45. |
|
#12
|
|||
|
|||
|
Этот изврат работает. У меня передаётся значение из TV1 в MO так же и все хорошо. А вот в третий модуль - никак.
А по ооп почитаю, постараюсь разобраться. |
|
#13
|
||||
|
||||
|
Многие извраты работают, но этим не стоит гордиться.
|