Войти

Показать полную графическую версию : [решено] Delphi | Как сделать, чтобы в дочерней форме...


Madmech
24-09-2006, 19:05
Проблема такова. При запуске программы в основной форме я ввожу некое число. Нажимаю ОК. Должна открыться дочерняя форма, в которой уже будет находиться несколько полей для ввода чисел (число полей равно числу, вводимому на основной форме). Далее с этими числами будет производиться некий счет и все они будут записываться в файл. Вопрос таков: как именно реализовать переход от основной формы к дочерней, чтобы было нужное количество полей?
P.S. Прошу прощения, если вопрос очень тупой, я в программировании почти полный ноль, но прогу нужно срочно написать, кровь из носу.

JASterus
25-09-2006, 15:26
грид на дочернюю форму

Madmech
25-09-2006, 19:43
Что есть грид? *смущенно*

XCodeR
25-09-2006, 20:25
Madmech
TDrawGrid....

а вообще просто динамически создаемы необходимое кол-во TEdit'ов...
TEdit *te=new TEdit;
te->Top=...;
te->Left=....;

(C++)...

Madmech
27-09-2006, 20:12
Хорошо, это я понял, а как тогда сделать, чтобы во 2-м модуле, где прописаны свойства и методы дочерней формы, использовались значения переменных из 1-го (основного) модуля? Дело в том, что значения переменных k и n, отвечающих за количество столбцов и строк в дочерней форме, задаются в реализации одного из методов 1-го модуля, то есть после implementation, и, значит, не видны для 2-го модуля.

detrin
27-09-2006, 23:05
Можно после implementation второго модуля написать строчку
uses Unit1;
После этого будет доступен первый модуль. Нужные переменные придется делать глобальными, чтоб можно было их считать.

Madmech
27-09-2006, 23:29
Сделал уже давно! Все равно не помогает! Второй модуль видит эти переменные, при компиляции ничего не гавкает, но не воспринимает их значения, которые я задал в реализации методов в первом модуле.

В первом модуле:
procedure TForm1.Button1Click(Sender: TObject);
begin
k := StrToInt(Trim(Edit1.Text));
n := StrToInt(Trim(Edit2.Text));
Form2.Show;
end;

Во втором модуле:
procedure TForm2.FormCreate(Sender: TObject);
var i, j: integer;
begin
with StringGrid1 do
begin
ColCount := n;
RowCount := 2*k+1+4;
for i := 1 to n do
Cells[i,0] := 'Шпангоут №'+IntToStr(i);
for j:= 1 to k do
Cells[0,j] := 'f(x'+IntToStr(j)+')';
for j:= k+1+4 to 2*k+4 do
Cells[0,j] := 'fкорр(x'+IntToStr(j-k-4)+')';
Cells[0,k+1] := 'fср';
Cells[0,k+2] := 'a1';
Cells[0,k+3] := 'b1';
Cells[0,k+4] := 'c2';
end;
end;

Все равно при компиляции k и n воспринимаются равными нулю, как будто я не задавал их значения.

detrin
30-09-2006, 08:47
Во втором модуле не нужно объявлять глобальные переменные k и n. А обращатся к ним нужно вот так:
Form1.k
Form1.n

Как вариант, можно обращаться непосредственно к Edit`у первой формы:
k := StrToInt(Trim(Form1.Edit1.Text));
n := StrToInt(Trim(Form1.Edit2.Text));

Madmech
30-09-2006, 18:56
Спасибо! Проблема решена. Я сделал это так, если кому интересно:
procedure TForm1.Button1Click(Sender: TObject);
begin
k := StrToInt(Trim(Edit1.Text));
n := StrToInt(Trim(Edit2.Text));
Application.CreateForm(TForm2, Form2);
Form2.Show;
end;

Нажимая на Button1 в 1-й форме, я перехожу во 2-ю, дочернюю форму, где строится таблица k x n.




© OSzone.net 2001-2012