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

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

вызвать B из A


начинающий1993 ©   (2011-01-11 16:26:00) 

как можно в процедуре A вызвать процедуру B, которая объявлена позже. Можно ли обойтись без объявления перед используемой процедурой.


program Project2;

{$APPTYPE CONSOLE}

uses
 SysUtils;

procedure A;
begin
 B;
end;

procedure B;
begin
 ShowMessage('B');
end;

begin
 try
   { TODO -oUser -cConsole Main : Insert code here }
 except
   on E: Exception do
     Writeln(E.ClassName, ': ', E.Message);
 end;

end.


Медвежонок ХМЛ   (2011-01-11 17:30:00) [1]

Гибчее вместо всей этой дури написать одну функцию перебора узлов по переданному ей выражению xpath
и несколько специфичных callback функций для конкретных проверок-модификаций.


Плохиш   (2011-01-11 17:26:00) [2]


>  procedure WorkXMLLoad(const AFileName: string);
>

совместить с конструктором

>  TestWorkXMLAnalyseErrorHandling(Msg);
>

добавить два параметра старое и новое значение и выкинуть ерунду написанную в описании в скобках


Ega23   (2011-01-11 17:24:00) [3]

TTestWorkXML = class(TObject)
private
FWorkXML: TXMLDocument;
procedure WorkXMLLoad(const AFileName: string);
public
constructor Create(const AFileName: string);
function WorkXMLAnalyseErrorHandling: string;
procedure WorkXMLSave;
end;


использование класса:


with TTestWorkXML.Create('Work.xml') do
 try
   WriteLn(AnalyseErrorHandling);
   Save('Work.xml');
 finally
   Free;
 end;


начинающий1993   (2011-01-11 17:19:00) [4]

Задача: Открыть xml-файл, пройти по всем узлам, включая вложенные, проверить значение атрибута "error_handling", если значение равно "critical" заменить его на "not_critical" (В будущем таких проверок может быть больше, на каждую проверку отдельная процедура). Если файл был изменен, сохранить изменения.

Основные процедуры:

WorkXMLLoad(const AFileName: string); // загружает XML-файл в объект TXMLDocument
WorkXMLAnalyseErrorHandling; // анализирует содержимое XML-файла
WorkXMLSave; // сохраняет изменения

Сначала думал объединить все в класс.

TTestWorkXML = class(TObject)
private
 FWorkXML: TXMLDocument;
public
 constructor Create;
 procedure WorkXMLLoad(const AFileName: string);
 procedure WorkXMLAnalyseErrorHandling(out AMsg: string);
 procedure WorkXMLSave;
end;

использование класса:

TestWorkXML := TTestWorkXML.Create;
try
 TestWorkXML.WorkXMLLoad('Work.xml');
 TestWorkXMLAnalyseErrorHandling(Msg);
 WriteLn(Msg);
 TestWorkXMLSave('Work.xml');
finally
 TestWorkXML.Free;
end;


Ega23   (2011-01-11 16:58:00) [5]


> Может объединить все процедуры в один класс?


Может и объединить. А может и нет.
Всё зависит от задачи.


начинающий1993   (2011-01-11 16:50:00) [6]


> у меня консольное приложение и несколько взаимосвязанных
> процедур


приложение по сути разбирает xml-файл (для этого используются написанные процедуры) и выводит WriteLn сообщения. Может объединить все процедуры в один класс?


sniknik   (2011-01-11 16:47:00) [7]

правильнее их взаиморазвязать


начинающий1993   (2011-01-11 16:43:00) [8]

а как будет правильнее, у меня консольное приложение и несколько взаимосвязанных процедур


Amoeba_   (2011-01-11 16:41:00) [9]


> как можно в процедуре A вызвать процедуру B, которая объявлена
> позже.

Так, просто объявив ее без реализации, но с директивой forward:

program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;

procedure B; forward;

procedure A;
begin
B;
end;

procedure B;
begin
ShowMessage('B');
end;

begin
try
  { TODO -oUser -cConsole Main : Insert code here }
except
  on E: Exception do
    Writeln(E.ClassName, ': ', E.Message);
end;

end.


MBo   (2011-01-11 16:37:00) [10]

можно использовать ключевое слово forward


Закончивший давно   (2011-01-11 16:37:00) [11]

Можно.
Если B в другом модуле и если он в юзес


Наверх

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