Текущий архив: 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