Announcement

Collapse
No announcement yet.

großes Problem mit RichEdit

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • großes Problem mit RichEdit

    Hallo, ich schreibe den Quelltext einer HTML Seite in eine Richedit. Nun will ich per klick auf einen Button, das jede überall wo "//" oder "{" vor einer Zeile steht, jeweils vor "//" oder "{" das Tag <i> geschrieben wird. Genauso will ich auch das am ende jeder Zeile wo das "//" oder das "{" stehen das Tag </i> geschrieben wird.

    Beipiel

    //Change the RGB value to change the color

    soll dann so aussehen

    <kursiv>//Change the RGB value to change the color<kursiv>

    Kann mir da mal bitte jemand helfen?

  • #2
    Hallo Enrico,<br>
    <br>
    meinst Du das so?<br>
    <br>
    <pre>
    procedure TForm1.Button1Click(Sender: TObject);

    var
    lIndex : LongInt;

    begin
    for lIndex := 0 to RichEdit1.Lines.Count-1 do
    begin
    if (pos('//',RichEdit1.Lines[lIndex]) = 1)
    or
    (pos('{',RichEdit1.Lines[lIndex]) = 1) then
    begin
    RichEdit1.Lines[lIndex] := '<kursiv>'+RichEdit1.Lines[lIndex]+'</kursiv>';
    end;
    end;
    end;
    </pre>
    <br>
    Ciao<br>
    Chri

    Comment


    • #3
      Das ist echt super, Danke.

      Kann mir jetzt auch noch einer sagen, wie ich anstelle dem anfügen von <kursiv>, die Schriftfarbe des Textes hinter "//" und zwischen "{" und "}" verändern kann?

      Wenn das jemand wüßte, wäre Weinachten gerettet :-

      Comment


      • #4
        Hallo Enrico,<br>
        <br>
        dann ist ja Weihnachten für Dich gerettet :-)<br>
        <br>
        So geht's:<br>
        <pre>
        procedure TForm1.Button1Click(Sender: TObject);

        var
        lIndex : LongInt;
        lPosCount : DWord;

        begin
        lPosCount := 0;
        for lIndex := 0 to RichEdit1.Lines.Count-1 do
        begin
        if (pos('//',RichEdit1.Lines[lIndex]) = 1) then
        begin
        RichEdit1.SelStart := lPosCount+2;
        RichEdit1.SelLength := Length(RichEdit1.Lines[lIndex])-2;
        RichEdit1.SelAttributes.Color := clRed;
        RichEdit1.SelLength := 0;
        end;
        if (pos('{',RichEdit1.Lines[lIndex]) = 1) then
        begin
        RichEdit1.SelStart := lPosCount+1;
        RichEdit1.SelLength := Length(RichEdit1.Lines[lIndex])-1;
        RichEdit1.SelAttributes.Color := clRed;
        RichEdit1.SelLength := 0;
        end;
        inc(lPosCount,Length(RichEdit1.Lines[lIndex])+2);
        end;
        end;
        </pre>
        <br>
        Da intern noch die Zeilenumbrüche (#13#10) in den Zeilen enthalten sind, muss beim Hochzählen der Position immer um zwei weiter hochgezählt werden, als die Zeile lang ist.<br>
        <br>
        Ciao und Frohes Fest<br>
        Chri

        Comment


        • #5
          Vielen Dank, bloß leider ist daß auch nicht ganz das was ich suche.

          Wenn ich einen Text in RichEdit eingebe und z.B. "//und der Text" nicht ganz vorn im RichEdit beginnt sondern irgendwo im Richedit dann wird es nicht in der Farbwahl nicht beachte

          Comment


          • #6
            Hallo Enrico,<br>
            <br>
            so etwas hatte ich mir fast schon gedacht :-)<br>
            Dann sollte es funktionieren, wenn Du bei der Abfrage die Zeile vorher trimmst (NUR bei der Abfrage). Dann muessen noch SelStart und SelLength angepasst werden<br>
            <br>
            if (pos('//',<b>trim(</b>RichEdit1.Lines[lIndex]<b>)</b>) = 1) then<br>
            ...SelStart := lPosCount+pos('//',RichEdit1.Lines[lIndex])+1;
            ...SelLength := Length(RichEdit1.Lines[lIndex])-pos('//',RichEdit1.Lines[lIndex])-1;
            <br>
            Dadurch werden alle Leer- und Steuerzeichen am Anfang und Ende der Zeile gelöscht (NUR für pos, nicht im Text), so dass auch eingerückte Zeilen erkannt werden, und der zu markierende Text wird auch entsprechend gekürzt. Für { geht's dann analog.<br>
            Diesmal hab' ich's nicht getestet, sollte aber funktionieren.<br>
            Da jetzt die Position der gesuchten Zeichen mit in den Start und die Länge einfliesst, heisst es nicht mehr +2, sondern +1 vorher wäre pos nämlich 1 gewesen, so dass es in der Summe auch gestimmt hätte.<br>
            <br>
            Ciao<br>
            Chri

            Comment

            Working...
            X