Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.04.10;
Скачать: [xml.tar.bz2];

Вниз

вызвать 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
2-1294871283
Ghost del vonte
2011-01-13 01:28
2011.04.10
Проблема при удалении последней вкладки на TabSet


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


2-1294899349
12
2011-01-13 09:15
2011.04.10
Control.Enable := False Но, чтоб визуально не изменился.


2-1294643049
Mitroshin
2011-01-10 10:04
2011.04.10
Как включить в FastReport показ миниатюр по умолчанию?


15-1293312589
Юрий
2010-12-26 00:29
2011.04.10
С днем рождения ! 26 декабря 2010 воскресенье





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский