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

Вниз

вызвать B из A   Найти похожие ветки 

 
начинающий1993   (2011-01-11 16:26) [0]

как можно в процедуре 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.


 
MBo ©   (2011-01-11 16:37) [1]

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


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

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


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


> как можно в процедуре 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.


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

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


 
sniknik ©   (2011-01-11 16:47) [5]

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


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


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


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


 
Ega23 ©   (2011-01-11 16:58) [7]


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


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


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

Задача: Открыть 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 17:24) [9]

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;


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


>  procedure WorkXMLLoad(const AFileName: string);
>

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

>  TestWorkXMLAnalyseErrorHandling(Msg);
>

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


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

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



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

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

Наверх




Память: 0.49 MB
Время: 0.011 c
2-1294996934
12
2011-01-14 12:22
2011.04.10
Error creating variant or safe array. Из-за чего?


15-1292773811
Kto_tyT_a
2010-12-19 18:50
2011.04.10
Нужен компонент, аналог TChart


6-1233550485
vann
2009-02-02 07:54
2011.04.10
Как задать таймаут при определении имени хоста?


15-1292954454
TUser
2010-12-21 21:00
2011.04.10
Помидор - это овощ или фрукт?


2-1294653381
softi
2011-01-10 12:56
2011.04.10
сохранение JPEG из буфера обмена