Тебе надо при этом прервать цикл.
Код:
procedure TForm3.btn2Click(Sender: TObject);
var
m,i: Integer;
f: TextFile;
flag:boolean;
begin
flag:=false;
mmo1.Lines.Clear;
assignFile (f,'c:\file1.txt');
reset(f);
while not eof(f) do
begin
while not Eoln(f) do
begin
read(f,i);
if (i<0) then
begin
m:=i;
flag:=true;
mmo1.Text:=mmo1.Text+' '+IntToStr(i);
mmo1.Lines.Add('первое отрицательное ='+inttostr(m));
break;
end;
if flag then break;
Readln(f);
mmo1.Lines.Add('');
end;
CloseFile(f);
Первый бряк прерывает внутренний цикл по строке.
Второй - внешний по строкам (файлу).
Но я бы сделал подругому (бо как понятнее). Я бы сначала считал файл во временный массив, а уже в нем бы делал все поиски. И выносил бы их, если это возможно, в отдельные функции, бо как из функции можно сделать Exit, установив выходное ее значение.