Я хочу показать пользователю сводку всех соответствующих сообщений, которые произошли во время выполнения кода (например, синтаксический анализ, алгоритм, преобразование, проверка и т. Д.). Сообщения должны отображаться вместе, когда процесс выполняется.Отображение накопленных сообщений пользователю
Подобный инцидент не может произойти ни один, ни один раз. Пользователь должен быть уведомлен об инциденте. Может быть несколько типов инцидентов.
Я не уверен, если сценарий ясен, но, возможно, какой-то код поможет:
псевдокод:
begin
//Execute computing process//
repeat
Set a flag if an incident occurs
Set another flag if another incident occurs
until done
//Show message to user//
if AnyFlagIsSet then
ShowPrettyMessageToUser
end;
EXECUTABLE DELPHI КОД:
program Test;
{$APPTYPE CONSOLE}
uses
SysUtils, StrUtils;
var
i: Integer;
tmpFlags: Array[1..4] of Boolean;
tmpMessage: String;
tmpChar: Char;
begin
Randomize;
repeat
//Initialization//
for i := 1 to 4 do
tmpFlags[i] := False;
//Will insident occur?//
for i := 0 to 5 do
begin
if (Random(10) = 0) then tmpFlags[1] := True;
if (Random(10) = 0) then tmpFlags[2] := True;
if (Random(10) = 0) then tmpFlags[3] := True;
if (Random(10) = 0) then tmpFlags[4] := True;
end;
//Show message//
tmpMessage := '';
if tmpFlags[1] then tmpMessage := tmpMessage + IfThen(tmpMessage <> '', #13#10+#13#10) + 'Incident 1';
if tmpFlags[2] then tmpMessage := tmpMessage + IfThen(tmpMessage <> '', #13#10+#13#10) + 'Incident 2';
if tmpFlags[3] then tmpMessage := tmpMessage + IfThen(tmpMessage <> '', #13#10+#13#10) + 'Incident 3';
if tmpFlags[4] then tmpMessage := tmpMessage + IfThen(tmpMessage <> '', #13#10+#13#10) + 'Incident 4';
Writeln('----------');
Writeln(tmpMessage);
Writeln('----------');
Writeln;
Write('Again? (Y/N) ');
Readln(tmpChar);
until tmpChar <> 'y';
end.
Код на итерации - это, конечно, тихий комплекс в реальной жизни. И сообщения также более информативны и даже могут быть отформатированы и многослойны.
Итак ...
Есть ли лучшая практика или шаблон, который можно использовать для этого?
Любой компонент Delphi, который обрабатывает это?
@Smasher: Мне нравится этот, и я много использую TStringList (может быть, слишком много). Но как вы можете проверить, зарегистрировано ли сообщение? «Какой-то намек». следует добавлять только в список один раз. Вы не хотите показывать «Документ содержит недопустимый символ [s]» несколько раз. –
Я отредактировал ответ. Вы можете просто установить 'TStringList.Duplicates' в' dupIgnore'. – jpfollenius
Конечно, но 'dupIgnore' требует, чтобы список отсортировался. Это может не всегда быть предпочтительным ... –