Вот функция: PHP: function TForm1.Parsing(text:String): string; var i:integer; Sk: TStringList; NewMsg,name:string; New:TStringList; begin sk:= TStringList.Create; sk.Text:=text; For I := 0 To sk.Count -1 do begin If Pos('id="homelink"', sk[I]) <> 0 Then begin id := sk[I]; id := Copy(id, Pos('href="', id), Length(id)); Delete(id, Pos('">', id),Length(id)); id := Copy(id, Pos('id', id), Length(id)); Delete(id, 1,2); end; end; For I := 0 To sk.Count -1 do begin If Pos('<div class="shah">', sk[I]) <> 0 Then begin name := sk[I]; name := Copy(name, Pos('">', name), Length(name)); delete(name,Pos('<', name), Length(name)); delete(name, 1, 2); end; end; For I := 0 To sk.Count -1 do begin If Pos('<a href="/mail.php?id=', sk[I]) <> 0 Then begin mesage := sk[I]; mesage := Copy(mesage, Pos('<a href="/mail.php?id=', mesage), 100); if Pos('</b>', mesage) <>0 then begin delete(mesage, Pos('</b>', mesage),Length(mesage)); delete(mesage, Pos('<a href=', mesage),pos('(<b>',mesage)); delete(mesage, 1,3); end else mesage:='нет'; end; end; if strtoint(id) <>0 then begin label3.Caption:='У вас '+mesage+' новых сообщений.'; Label1.Caption:='Здраствуйте '+name; Label2.Caption:='Ваш ИД: '+id; NewMsg:=name+', у вас '+mesage+' новых сообщений'; memo1.lines.add(NewMsg); end else begin NewMsg:='Вы не авторизованы!'; memo1.lines.add(NewMsg); new.Free; sk.Free; end; Она выдаёт ошибку когда её вызываеш опять другой кнопкой HTML: projekt raised exception class EAccess Violation with message:" Access violation at address 00000020.Read of address 00000020",Progres stopped ... И ещё вапрос,как сделать чтоб приложение ело меньше опиротивы??
Ну по конкретному приложению помочь немогу... а вообще - поменьше использовать "повторялки" одного и того-же кода...
не инициализирована new добавь строчку new := TStringList.Create; Code: function TForm1.Parsing(text:String): string; var ... begin [B]new := TStringList.Create;[/B] sk:= TStringList.Create; sk.Text:=text; ... end;
1. Код можно было уменьшить в 2, а то и в 3 раза. Как сказал DeepBlue7, повтор есть. На пример: Цикл, зачем 3 раза, если можно 1 раз, всеравно нет глобально зависящих переменных. 2. Насчет ошибки, при повторном запуске он пробует считать данных которых нет. Следовательно F8 и смотри, где убиваются они.
Код ужасен, его невозможно читать. Юзай регулярки. А если хочешь сэкономить память то создавай объект регулярки перед использованием и сразу уничтожай. Кстати, установи себе EurekaLog, подключи к проекту и все утечки как на ладони, профит.
Ок пасмотрим) в принцыпе немного изменив код(сразу вставил в кнопку) нашол проблемму, она вылетает на строке sk := TStringList.Create;