Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2011, 21:35   #1
Astat
Пользователь
 
Регистрация: 30.06.2010
Сообщений: 16
По умолчанию Модули

Всем привет!
Проблема моя вот в чем. Осваиваю Делфи.Как я понимаю каждая форма относится к определенному модулю. Суть в том что в 1-ом модуле я произвожу вычисления и у меня там хранятся данные. Из первой формы я вызываю вторую форму, тем самым открывается второй модуль. И мне нужно вывести на вторую форму данные из 1ого модуля. Как мне это сделать? Подскажите пожалуйста! Буду очень благодарен.
P.S. Может быть я не четко выразился т.к. новичек, если кому не ясно что я имел ввиду отпишитесь пожалуйста, я объясню тогда по другому.
Astat вне форума Ответить с цитированием
Старый 31.03.2011, 21:52   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Ну, ты код покажи, как вторую форму показываешь. Тебе покажут, чего куда приписать.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 31.03.2011, 21:59   #3
Astat
Пользователь
 
Регистрация: 30.06.2010
Сообщений: 16
По умолчанию

Код:
procedure tabl(a:mas; var b:mas);
//вот в этой процедуре я произвожу нужые расчеты
end;
procedure TForm1.Button1Click(Sender: TObject);
..............//Забираю с ячеек данные и заношу их в матрицу
tabl(a,b);
end.

procedure TForm1.Button2Click(Sender: TObject);
begin
form2.show(); // вызываю вторую форму нажатием на кнопку, и вот как раз в этой форме должны появится данные которые я вычисляю в процедуре tabl :)
end;
Код заменил комментариями в целях экономии места и читабельности
Ну а во втором модуле ничего не написано, все что приведено выше это все с первого модуля. Заранее спасибо!
Astat вне форума Ответить с цитированием
Старый 31.03.2011, 23:04   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Делай глобальной переменную для хранения данных.

Затем в uses второй формы, добавь первую.
И в событии OnShow второй высывай данные из глоб. массива.


о можно и проще.

Код:

var
   a:blabla; //Глабольная переменная

implementation 

procedure tabl(a:mas; var b:mas);
//вот в этой процедуре я произвожу нужые расчеты
{Загоняй всё в глоб перемнную a}
end;

procedure TForm1.Button1Click(Sender: TObject);
..............//Забираю с ячеек данные и заношу их в матрицу
tabl(a,b);
end.

procedure TForm1.Button2Click(Sender: TObject);
begin
form2.show(); // вызываю вторую форму нажатием на кнопку, и вот как раз в этой 
Form2.{Куда-то посылаем данные}:=a;
форме должны появится данные которые я вычисляю в процедуре tabl :)
end;
Человек_Борща вне форума Ответить с цитированием
Старый 31.03.2011, 23:54   #5
Astat
Пользователь
 
Регистрация: 30.06.2010
Сообщений: 16
По умолчанию

Спасибо! Попробую разобратся. Надеюсь все получится
А Можно пожалуйста поподробней об этой строчке:
Цитата:
Form2.{Куда-то посылаем данные}:=a;
Сделал все как вы сказали(только данные у меня в масиве b, ест-нно присваивал массив b) и вылезает ошибка, действительно сам не понимаю, разве можно так массив присвоить к форме?
И правильно я понимаю что в Delphi так же как и в паскале объявляются локальные переменные, работают функции и процедуры, также есть головная часть программы? Или я ошибаюсь? С паскалем просто проблем нет. Просто меня путают например в разделе описаний пользовательских типов какие-то не ясные описания которые создаются самой программой, но ведь суть самого раздела такая же как и в паскале? И тоже ли самое с разделом var (я про головную часть программы)? Буду очень благодарен за ответы на мои вопросы. Спасибо!

Последний раз редактировалось Astat; 01.04.2011 в 00:05.
Astat вне форума Ответить с цитированием
Старый 01.04.2011, 00:10   #6
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от Astat Посмотреть сообщение
Код заменил комментариями в целях экономии места и читабельности
Перестарался. Из приведённого кода не ясно, какие данные нужно показать на Form2.

Ладно, в любом случае план таков:
1. Открываем модуль 2 с Form2 и создаём новый метод:

Код:
unit Unit2;

interface

...

type
  TForm2 = class(TForm)
  ...
  public
    procedure Setup(const I: Integer; const S: String);
  end;

var
  Form2: TForm2;

implementation

...

procedure TForm2.Setup(const I: Integer; const S: String);
begin
  Caption := 'Ура, нас вызвали с ' + IntToStr(I) + ' и ' + S;
  Label1.Caption := IntToStr(I);
  Label2.Caption := S;
end;

end.
Здесь предполагается, что тебе на форме 2 надо отобразить число I и строку S. Если тебе надо что-то другое (а тебе надо другое), то меняй список параметров в процедуре Setup на нужный.

Также тут предполагается, что на форме есть две метки - на которых мы, собственно, и отображаем данные. Понятно, у тебя данные могут отображаться иначе.

Теперь в модуле 1 достаточно написать:

Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
  form2.Setup(5, 'Show me the money');
  form2.show;
end;
Понятно, тебе надо снова подставить свои данные.

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Делай глобальной переменную для хранения данных.
Зачем плохому учишь?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 01.04.2011, 00:25   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

А есть статья "Почему глобальные переменные, плохо?"
Человек_Борща вне форума Ответить с цитированием
Старый 01.04.2011, 00:36   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

У меня - нед

А вообще - ну например или так.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 01.04.2011, 00:37   #9
Astat
Пользователь
 
Регистрация: 30.06.2010
Сообщений: 16
По умолчанию

Спасибо за отзыв! Теперь все ясней, только вопросик есть
Цитата:
Перестарался. Из приведённого кода не ясно, какие данные нужно показать на Form2.
Мне требуется вывести 20 элементов массива. Соотв. по одному элементу на лейбл формы 2.
Цитата:
form2.Setup(5, 'Show me the money');
можете пожалуйста пояснить параметры этой процедуры? Я про число 5.

И вот такой вопрос. Например чтобы забрать с edit1 данные мне нужно прописать,
a[i,j]:=strtoint(edit1.text);

А суть в том что у меня этих edit'ов 20 штук, приходится писать соотественно 20 строк. А нельзя ли обойтись вложенным циклом? В нем будут изменятся индексы массива, а вот можно ли изменять сам edit1.text например на editi.text где i параметр цикла, т.е. должно же получится edit1.text.edit2.text edit3.txt....edit20.txt, или так делать нельзя?

Цитата:
Зачем плохому учишь?
Хм... поясните пожалуйста, а что плохого в использовании глобальных перемнных? Ведь это действительно иногда необходимо или же просто удобней.
Astat вне форума Ответить с цитированием
Старый 01.04.2011, 00:47   #10
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от Astat Посмотреть сообщение
можете пожалуйста пояснить параметры этой процедуры? Я про число 5.
Взяты от балды. Думаешь, 42 было бы лучше?

Цитата:
Сообщение от Astat Посмотреть сообщение
И вот такой вопрос. Например чтобы забрать с edit1 данные мне нужно прописать,
a[i,j]:=strtoint(edit1.text);

А суть в том что у меня этих edit'ов 20 штук, приходится писать соотественно 20 строк. А нельзя ли обойтись вложенным циклом?
Можно и циклом. Но для начала: может лучше эти 20 edit-ов заменить одним TStringGrid с 20 строчками?

Цитата:
Сообщение от Astat Посмотреть сообщение
Хм... поясните пожалуйста, а что плохого в использовании глобальных перемнных? Ведь это действительно иногда необходимо или же просто удобней.
В двух словах не объяснить. Можешь поверить на слово, почитать по ссылкам выше или найти ответ самостоятельно.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Модули В С++ daniil2010 Помощь студентам 1 30.04.2010 13:19
модули for_tuna Паскаль, Turbo Pascal, PascalABC.NET 0 27.04.2010 18:02
Модули Klyan Паскаль, Turbo Pascal, PascalABC.NET 1 02.11.2009 17:02
Модули. СИ. pif Помощь студентам 3 06.04.2009 01:00
Модули Sirega Помощь студентам 5 03.02.2009 22:35