16. august 2002 - 21:55
				#2
						
		 
		
			Jeg skal da aldrig lave en parser!!!
Nå, men selv om det sikkert er ret meget slam-kode, så virker det da... Smæk en TMemo, en TListBox og en TButton ind på din form... Sæt noget HTML-kode ind i Memo'en og fra knappens OnClick-event kalder du så følgende kode:
procedure TForm1.Button1Click(Sender: TObject);
  function GetLinks(S: String; var ReturnStr: TStringList): Boolean;
    function MinNotZero(A, B: Integer): Integer;
    begin
      if (A > B) and (B <> 0) then
        Result := B
      else Result := A;
    end;
  var
    I: Integer;
    S1: String;
  begin
    Result := False;
    I := Pos('<', S);
    while I <> 0 do
    begin
      S := Copy(S, I+1, Length(S));
      S := TrimLeft(S);
      if (S[1] = 'a') or (S[1] = 'A') then
      begin
        I := Pos('href', LowerCase(S));
        if I = 0 then Exit;
        S1 := Copy(S, I+Length('href'), Length(S));
        S1 := TrimLeft(S1);
        S1 := Copy(S1, 2, Length(S1)); //Væk med "="
        S1 := TrimLeft(S1);
        if S1[1] = '"' then
        begin
          Delete(S1, 1, 1);
          S1 := Copy(S1, 0, Pos('"', S1)-1);
        end
        else
        
          S1 := Copy(S1, 0, MinNotZero(Pos(' ', S1), Pos('>', S1))-1);
        ReturnStr.Add(S1);
        S := Copy(S, Pos('>', S)+1, Length(S));
        Result := True;
      end;
      I := Pos('<', S);
    end;
  end;
var
  I: Integer;
  sl: TStringList;
begin
  sl := TStringList.Create;
  ListBox1.Clear;
  for I := 0 to Memo1.Lines.Count -1 do
    GetLinks(Memo1.Lines.Strings[I], sl);
  ListBox1.Items.Assign(sl);
end;
Bemærk lige at jeg bare har skrevet koden uden at optimere ret meget... Jeg haaader at parse!!! :)
Nå, men jeg håber da det kan bruges!
//hermandsen
		
		
	 
	
		
								
					
				19. august 2002 - 10:59
				#4
						
		 
		
			Tak for kommentarerne, men jeg har faktisk allerede lavet det selv. Problemet er at jeg ikke kan være 200% sikker på at jeg har taget højde for alle tænkelige måder links/frames kan stå i HTML, derfor ville jeg gerne have en komponent som er brugt af andre, og derfor testet mere end jeg kan teste min egen kode.