Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Delphi | Как сделать, чтобы в дочерней форме... (http://forum.oszone.net/showthread.php?t=71847)

Madmech 24-09-2006 19:05 488942

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

JASterus 25-09-2006 15:26 489265

грид на дочернюю форму

Madmech 25-09-2006 19:43 489435

Что есть грид? *смущенно*

XCodeR 25-09-2006 20:25 489464

Madmech
TDrawGrid....

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

(C++)...

Madmech 27-09-2006 20:12 490468

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

detrin 27-09-2006 23:05 490518

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

Madmech 27-09-2006 23:29 490527

Сделал уже давно! Все равно не помогает! Второй модуль видит эти переменные, при компиляции ничего не гавкает, но не воспринимает их значения, которые я задал в реализации методов в первом модуле.

В первом модуле:
Код:

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 491531

Во втором модуле не нужно объявлять глобальные переменные 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 491674

Спасибо! Проблема решена. Я сделал это так, если кому интересно:
Код:

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.


Время: 20:58.

Время: 20:58.
© OSzone.net 2001-