En cuanto a la primera pregunta, tienes varias formas:
Si tienes que usar un procedure, deberá añadir un parámetro que se modifica según convenga. Creo que lo propio es usar una función; te dejo ambos ejemplos:
Código Delphi
[-]
procedure Hazlo( var ObjetivoCumplido:Boolean);
begin
if NoError then
ObjetivoCumplido := true
else
ObjetivoCumplido := false;
end;
function HacerTarea :Boolean;
begin
if noerror then
Result := true
else
Result := false;
end;
procedure Preguntando;
var Cumplido:Boolean;
Cumplido := false;
Hazlo(cumplido);
if Cumplido then
ShowMessage(' hizo bien la tarea')
else
ShowMessage(' NO hizo bien la tarea');
cumplido := HacerTarea;
ShowMessage(BooltoStr(cumplido, true));
if HacerTarea then
begin
end;
end;