[delphi] najprostsze kolorowanie składni html

0

dalem tu ostatnio temat ale znikł ... chciałbym zeby wszystkie tagi ( <tag> ) w moim edytorze www były kolorowane na bieŻąco (Boże, widzisz takie błędy i nie grzmisz) na kolor czerwony ...

bez zadnych syneditow .... itp ... pragne najprostszego rozwiazania ... szukalem tematow podobny ale rozwiazania zadnego oprocz propozycji synedit i cos tam edit nie znalazlem .... // DDD

0

<ort>najprostrze </ort>to synedit ;p

moze sprawdzaj czy wcisniety klawisz to < albo > i zmieniaj kolor na czerwony aha i jeszcze np. blokade jezeli wcisles " to przy < nie koloruje <ort>dopuki </ort>drugiego " sie nie wcisnie ... takie cos :)

0

Topic był poruszany milion razy.. skorzystaj z wyszukiwarki - albo użyjesz jakiegoś komponentu np. synedit albo podepniesz swoją procedurkę w OnChange używanej kontrolki..

0

Beznadziejnie zoptymalizowany kod, ale:

procedure TForm1.RichEdit1Change(Sender: TObject);
var
  q, From, OldFrom, OldLength: Integer;
  Selected: Boolean;
begin
  OldFrom := RichEdit1.SelStart;
  OldLength := RichEdit1.SelLength;
  for q := 1 to Length(RichEdit1.Lines.Text) do begin
    if RichEdit1.Lines.Text[q] = '<' then begin
      RichEdit1.SelStart := q -1;
      Selected := True;
      From := q;
    end else begin
      if ((RichEdit1.Lines.Text[q] = '>') and Selected) then begin
        RichEdit1.SelLength := q - From + 1;
        RichEdit1.SelAttributes.Color := clRed;
        RichEdit1.SelStart := q;
        RichEdit1.SelAttributes.Color := clBlack;
        Selected := False;
      end;
    end;
  end;
  RichEdit1.SelStart := OldFrom;
  RichEdit1.SelLength := OldLength;
end;
0

ja tez dam swoj kodzik, tez nienajszybszy :) : (zmiana/poprawa go nie jest chyba trudna)

procedure HTMLSyntaxC(RichEdit: TRichEdit; TextCol, TagCol, DopCol: TColor);
var  
  i, iDop: Integer; 
  s: string; 
  Col: TColor; 
  isTag, isDop: Boolean; 
begin 
  iDop := 0; 
  isDop := False; 
  isTag := False; 
  Col := TextCol; 
  RichEdit.SetFocus; 

  for i := 0 to Length(RichEdit.Text) do 
  begin 
    RichEdit.SelStart := i; 
    RichEdit.SelLength := 1; 
    s := RichEdit.SelText; 

    if (s = '<') or (s = '{') then isTag := True; 

    if isTag then 
      if (s = '"') then 
        if not isDop then 
        begin 
          iDop  := 1; 
          isDop := True; 
        end  
        else 
          isDop := False; 

    if isTag then 
      if isDop then 
      begin 
        if iDop <> 1 then Col := DopCol; 
      end  
      else 
        Col := TagCol 
    else 
      Col := TextCol; 

    RichEdit.SelAttributes.Color := Col; 

    iDop := 0; 

    if (s = '>') or (s = '}') then isTag := False; 
  end; 
   
  RichEdit.SelLength := 0;
  richedit.setfocus;
end; 

1 użytkowników online, w tym zalogowanych: 0, gości: 1