Продолжнение "Вызывает антирес и такой ишо разрез" Как можно осуществить событие для динамически созданного компонента? Проблема в том, что программа модульная и "процедура не описана как метод формы".
procedure MyOnClick(Sender: TObject); begin form1.Label1.Caption:=inttostr(form1.MainMenu1.Items.IndexOf(sender as TMenuItem)); end;
procedure CreateSubMenu(MainMenu: TMainMenu; p: TP); var i,j: integer; k: longint; N: TMenuItem; begin k:=3; //... SetLength(MenuItemArray, 2, k); for j:=0 to k-1 do for i:=0 to 1 do begin N:=TMenuItem.Create(MainMenu); n.Caption:=inttostr(i)+inttostr(j); n.OnClick:=MyOnClick; //вот здесь пишет Incompatible types: 'method pointer and regular procedure' MainMenu.Items[i+1].items[1].Insert(j,n); MenuItemArray[i][j]:=n; end; end;
Сама программа: VstupInfo.rar ( 275.13 килобайт )
Кол-во скачиваний: 565
Итак, я нашел, что не давало открывать проект в D2009 - одно из свойств TIdHTTP уже отсутствует, поэтому проект не открывался. Открыл. Посмотрел... Могу подсказать, что надо будет сделать, чтобы оно заработало в 2009/2010, если тебя интересует (в том виде, в котором это сейчас - оно не очень-то работает, только при совпадении некоторых условий, а это плохой стиль программирования). Но это - не главное, что я хотел сказать. Главное - в другом.
У тебя парсинг сделан "в лоб". А зачем? Можно же воспользоваться средствами, которые тебе предоставляет Дельфи, и тогда вот это:
Цитата
procedure FindWreckersOnline(var Memo: TMemo;source: string); var prev,i: longint; s,n,m: string; poem: ansistring; begin // ... тут - получение строки Poem prev:=0; while PosEx('<tr><td>',poem,prev+1)<>0 do begin s:=''; prev:=PosEx('<tr><td>',poem,prev+1); for i:=prev to PosEx('</td></tr>',poem,prev) do s:=s+poem[i]; for i:=1 to 6 do delete(s,pos('<',s),pos('>',s)-pos('<',s)+1); n:=''; i:=1; while s[i] in Digits do begin n:=n+s[i]; inc(i); end; delete(s,1,length(n)); i:=1; while (s[i] in Letters)or (s[i]=' ') do inc(i); m:=''; while s[i] in Digits do begin m:=m+s[i]; inc(i); end; delete(s,pos('<',s)-length(m),length(s)-pos('<',s)+length(m)+1); Memo.Lines.Append(Format('%-5s',[n])+Format('%-7s',[m])+s); end; end;
Memo.Lines.BeginUpdate; for i := 0 to counter do begin Memo.Lines.Add(Format('%-5s%-7s %s', [SL.Strings[6*i + 0], StringReplace(SL.Strings[6*i + 1], '_', ' ', [rfReplaceAll]), SL.Strings[6*i + 2]])); end; Memo.Lines.EndUpdate;
finally SL.Free; end; end;
Ошибиться, как видишь, практически негде... Работает абсолютно так же, как твой код, только я один пробел (между фамилией и баллом, добавил, чтоб лучше смотрелось)