Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.11.2013, 03:05
Vavilon11 Vavilon11 вне форума
Прохожий
 
Регистрация: 10.11.2013
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Перенос переменных между формами

Всем доброго времени суток! Работаю с делфи недавно и вот появился вопрос, на который я легко нашел ответ в интернете. Но теперь что то не работает и я никак не могу найти ошибку.
У меня есть три модуля. TV1 - основной и два вспомогательных: MO и Unite3. Задача: из MO загрузить массив в TV1, откуда она попадет в Unite3.
При проверке оказалось, что значения в TV1передаются и даже записываются в Form3.*переменная* но вот в самой Form3 не выводятся почему. Ну не получает форма значения, ну никак. Помогите найти ошибку, пожалуйста.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
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

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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  
Старый 10.11.2013, 03:07
Vavilon11 Vavilon11 вне форума
Прохожий
 
Регистрация: 10.11.2013
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

В коде могут быть не оптимизированные моменты, буду рад, если вы мне о них скажете и расскажите, как это исправить
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
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  
Старый 10.11.2013, 03:43
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Зачем что-то куда-то передавать? Массив буде доступен любому юниту, который подключит юнит с массивом. При условии, что массив находится в секции public или обозначен как var и находится в секции interface.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #4  
Старый 10.11.2013, 17:52
Vavilon11 Vavilon11 вне форума
Прохожий
 
Регистрация: 10.11.2013
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

В TV1 формы создаются и, что бы не париться с этим делом, я просто передаю их туда.
Ошибка то в том, что в 358 строчке (for i:=1 to 10 do Form3.PO[i]:=PO[i] массив передаётся и можно вывести переменные Form3.PO[i] и PO[i];
Но вот в Form3 ничего нет и все равно 0.
Ответить с цитированием
  #5  
Старый 10.11.2013, 19:05
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Объявляю вас победителем в номинации "Лучший говнокод-китайкод месяца"

__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 10.11.2013 в 19:10.
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
PhoeniX (10.11.2013)
  #6  
Старый 10.11.2013, 19:17
Vavilon11 Vavilon11 вне форума
Прохожий
 
Регистрация: 10.11.2013
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо, приятно.
Но если вы поподробнее расскажите, что же такого страшного в моей писанине, то в будущем постараюсь такого не писать.
Ответить с цитированием
  #7  
Старый 10.11.2013, 19:32
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ну там процентов на 90 можно код сократить, ибо код повторяется.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #8  
Старый 10.11.2013, 19:45
Vavilon11 Vavilon11 вне форума
Прохожий
 
Регистрация: 10.11.2013
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
ибо код повторяется.

Тогда вопрос. Есть вот такой блок:
Код:
1
2
3
4
5
6
7
8
9
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  
Старый 10.11.2013, 20:42
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Код:
1
2
3
4
5
6
7
8
9
10
11
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]);
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #10  
Старый 10.11.2013, 21:19
Vavilon11 Vavilon11 вне форума
Прохожий
 
Регистрация: 10.11.2013
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Код:
1
2
3
4
5
6
7
8
9
10
11
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]);

Спасибо, применю. А по поводу ошибки, ради которой и создавалась тема нет идей?

Цитата:
Сообщение от Veider
Вообще все проблемы этого кода растут из того факта, что автор не умеет в ООП.
Да, учусь только.

Последний раз редактировалось M.A.D.M.A.N., 10.11.2013 в 22:44.
Ответить с цитированием
  #11  
Старый 10.11.2013, 21:37
Аватар для Veider
Veider Veider вне форума
Прохожий
 
Регистрация: 02.11.2012
Сообщения: 2
Репутация: 10
По умолчанию

А можно запилить класс-наследник TEdit и добавить ему нужных методов/полей. А потом с помощью известного хака подменить им стандартный TEdit, для простоты использования.

Вообще все проблемы этого кода растут из того факта, что автор не умеет в ООП.

Нет, вы учитесь "просто что-то кодить".
А ООП требует отдельного понимания, которое порой никак не идёт. Зато когда наконец доходит - сразу глубоко проникаешься этими идеями.

По сабжу:
А переменная Form3 где объявлена?
Вот это что ли?
Код:
1
2
Const
  Form3: TForm3 = nil;
Я честно уже давненько не кодил, но вот на такой изврат раньше не натыкался, и что-то мне подсказывает, что виновато оно.

Последний раз редактировалось M.A.D.M.A.N., 10.11.2013 в 22:45.
Ответить с цитированием
  #12  
Старый 10.11.2013, 23:09
Vavilon11 Vavilon11 вне форума
Прохожий
 
Регистрация: 10.11.2013
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Этот изврат работает. У меня передаётся значение из TV1 в MO так же и все хорошо. А вот в третий модуль - никак.
А по ооп почитаю, постараюсь разобраться.
Ответить с цитированием
  #13  
Старый 10.11.2013, 23:11
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Многие извраты работают, но этим не стоит гордиться.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:23.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025