Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Несколько модулей


Sonnik ©   (2004-06-29 01:56:00) 

Плиз. Напомните, есть несколько модулей.
Первый имеет в uses второй.
Вызываю из первого процедуру второго и работаю в процедуре второго с объявленными в interface второго данными. При возвращении назад в первый сразу вызываю  процедуру первого
----
 if OpenDialog1.Execute then
   if LoadData(OpenDialog1.FileName) then // LoadData - метод второго модуля.
     SetData(); // SetData - метод первого модуля.
---
В SetData обращаюсь к данным второго модуля и вижу старые данные, а не те которые были считаны в LoadData.
Что можно сделать что бы были видны считанные данные второго модуля. После повторного повторения процедур из формы все ок.


Sonnik   (2004-07-01 10:58:00) [1]

Проблемма - случайно подцепил в один из Edit'ов событие FormCreate. Как и когда произошло не помню. Но создалась очень интересная ситуация, когда в рамках одной процедуры происходит вызов процедур из нескольких модулей и произошла вышеописанная чехарда с данными. Пошагово прогнал - все выяснилось. Хотя и не сразу.


Гаврила   (2004-06-30 22:40:00) [2]

Если что не правильно зацеплено по Uses - так это просто не откомпилируется.
Другой вопрос - стиль программирования, но это действительно другой вопрос.
Если ошибка связана с неправильными данными - к структуре uses это отношения иметь не может


Sairex   (2004-06-30 21:52:00) [3]

ну вы млин даете. Сколько проектов не писал ( самый большой сейчас дописываю 230 метров) дык ни раз в onChange вставлял событие FormCreate. А между модулями там не должно возникать конфликтов с данными( разве что с DLL может быть)


TUser   (2004-06-29 11:31:00) [4]


> Первый имеет в uses второй.


> Это ж надо было так извратиться :-)))

:)


Ozone   (2004-06-29 10:51:00) [5]

>> на onChange повесилось событие FormCreate

Это ж надо было так извратиться :-)))


Mim1   (2004-06-29 10:35:00) [6]

Ночью наверное ворочился? Легспать то неудовлетворенным :).


Sonnik   (2004-06-29 10:26:00) [7]

Все ок. Проект большой несколько тыс. строк и все однообразное - потому все не кидал. Вырезал часть и пытался сделать рабочий проект - обнаружил что все работает. Ночью когда делал состояние уже было не рабочее. Разобрался - оказалось в одном из Edit'ов на onChange повесилось событие FormCreate - получался конфликт и не корректная работа.
А так все правильно организовано и проблем при множественном использовании одного модуля для других нет.


Ruslan   (2004-06-29 09:39:00) [8]

Может у тебя есть переменные или процедуры с одинаковыми именами. Попробуй:

Procedure TfmFirst.SetData();
begin
Edit1.Text := FloatToStr(mData.GTO);
end;

procedure TfmFirst.N1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
  if mData.LoadData(OpenDialog1.FileName) then
    SetData();
end;


Anatoly Podgoretsky   (2004-06-29 09:24:00) [9]

Не обманывай, данный код просто не откомпилируется.


Sonnik   (2004-06-29 09:18:00) [10]

unit mFirst;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Menus;

type

 TfmFirst = class(TForm)
   Edit1: TEdit;
   OpenDialog1: TOpenDialog;
   procedure N1Click(Sender: TObject);
 public
   Procedure SetData();
 end;

implementation

{$R *.dfm}

Uses mData;

Procedure TfmFirst.SetData();
begin
 Edit1.Text := FloatToStr(GTO);
end;

procedure TfmFirst.N1Click(Sender: TObject);
begin
 if OpenDialog1.Execute then
   if LoadData(OpenDialog1.FileName) then
     SetData();
end;

end.
// --------------------------------------------
unit mData;

interface

Uses SysUtils, Dialogs;

Var
   Gto : real;

Function LoadData(nf:string):boolean;

implementation

Var
f : text;

Function LoadData(nf:string):boolean;
 Var s : string;
begin
 Result := true;
 AssignFile(f,nf);
 Reset(f);
 ReadLn(f,s);
 GTO := FloatToStr(s);
 CloseFile(f);
end;


Германн   (2004-06-29 03:23:00) [11]

2 Sonnik   (29.06.04 01:56)
Если не лень, напиши тут в форуме все те строки текста, которые ты умолчал. И либо сам сразу увидишь ошибку, либо тебя в нее воткнут.


Наверх

Титульная страница Поиск, карта сайта Написать письмо