Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

Несколько модулей   Найти похожие ветки 

 
Sonnik   (2004-06-29 01:56) [0]

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


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

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


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

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;


 
Anatoly Podgoretsky ©   (2004-06-29 09:24) [3]

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


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

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

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;


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

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


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

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


 
Ozone ©   (2004-06-29 10:51) [7]

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

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


 
TUser ©   (2004-06-29 11:31) [8]


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


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

:)


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

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


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.07.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.037 c
1-1089112517
Borealis
2004-07-06 15:15
2004.07.18
О переводе исходников с языка C++ на Object Pascal


3-1087989291
quQuev
2004-06-23 15:14
2004.07.18
Не получается считать из BLOB поля больше 32Kb


6-1085218415
trix
2004-05-22 13:33
2004.07.18
Как сменить сетевую итендификацию ?


14-1088372089
SergP
2004-06-28 01:34
2004.07.18
dcu --> pas???


4-1086531338
Max
2004-06-06 18:15
2004.07.18
Чем заменить Application.ProcessMessages?