Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wörter farbig markieren (https://www.delphipraxis.net/7706-woerter-farbig-markieren.html)

ByteLord 19. Aug 2003 14:55


Wörter farbig markieren
 
Hallo Leute,
weiß jemand wie ich folgendes realisieren kann:
Wenn ich eine Datei in ein Rechedit lade, sollen alle Buchstaben und Zeichen die zwischen < und > stehen rot markiert werden.
z.B.:
Folgendes:

Homepage

soll dann so:

Homepage

aussehen.

Ich würd mich sehr über eure Hilfe freuen.

Cya
ByteLord

S - tefano 19. Aug 2003 15:18

Re: Wörter farbig markieren
 
Hi,

zunächst musst du wissen an welchen Stellen die von dir gewünschten Zeichen stehen. Da ist eigentlich das schwierigste daran. Es gibt da Methoden wie FindFirst und FindNext (glaube ich), aber damit habe ich noch nie gearbeitet. Ich gehe den Text (anstatt Richedit.Lines etc. findest du in Richedit.Text einen zusammenhängenden String der den gesamten Text im Richedit darstellt) mit ner Schleife durch, also bspw einer for-to-do Schleife, bei der ich i von 1 bis length(Richedit.Text) laufen lasse. Wo genau du anfangen und aufhören musst zu suchen, müsstest du dann deinen Bedürfnissen anpassen.

Mit so einer Schleife hast du die Möglichkeit, dir jedes einzelne Zeichen des Textes anzugucken. Zusätzlich brauchst du noch zwei Integer- Variablen. In der einen speicherst du dir die Position vom Startzeichen (<), und in der anderen die von dem Stopzeichen (>).

Da du ja in der Schleife jedes Zeichen vom Anfang bis zum Ende durchgehen kannst, musst du nur noch wissen, was an der aktuellen Stelle steht.
Das geht per Richedit.Text[i]. Dann guckst du, ob das Zeichen entweder mit "<" oder ">" gleichzusetzen ist und merkst dir dann dementsprechend die i-Werte in einer der beiden Variablen.

Dann hast du alles was du brauchst. Jetzt sagst du dem Richedit, wo die Formatierung, die du durchführen willst, stattfinden soll.
Dafür hat es die Eigenschaften SelStart und SelLength. SelStart musst du dann den Wert der "IndexVariable", die du für "<" gefunden hast geben, SelLength ist dann die Differenz zwischen den beiden Indexvariablen.

Du kannst deine Formatierung dann mit der Eigenschaft Richedit.SelAttributes durchführen. Damit kannst du dann alles einstellen, such in der Delphi- Hilfe mal nach "TTextAttributes". Da kannst du dir angucken, was du mit SelAttributes alles verstellen kannst.

Dann noch gutes Gelingen,

S - tefano

Alexander 19. Aug 2003 15:24

Re: Wörter farbig markieren
 
Das hier sollte genau das richtige für dich sein:
Delphi-Quellcode:
procedure HTMLSyntax(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;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  RichEdit1.Lines.BeginUpdate;
  HTMLSyntax(RichEdit1, clBlue, clRed, clGreen);
  RichEdit1.Lines.EndUpdate;
end;
Der code stammt von Ronald Rethfeldt.

ByteLord 19. Aug 2003 15:59

Re: Wörter farbig markieren
 
Vielen Dank für den code und die schnelle Antwort.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz