Главная страница
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.032 c
14-1088428826
Sandman25
2004-06-28 17:20
2004.07.18
Нужно ли "объяснять" Pi


3-1087986665
Leech
2004-06-23 14:31
2004.07.18
Переносимость базы...


1-1089025841
killer
2004-07-05 15:10
2004.07.18
Раскрыто ли PopupMenu


3-1087345149
Смертник
2004-06-16 04:19
2004.07.18
Помогите пожалуйста с DBGrid.


4-1086173517
Vlad40
2004-06-02 14:51
2004.07.18
TaskBar Auto hide