AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SyntaxHighlighting

Ein Thema von AnyKey · begonnen am 28. Sep 2009 · letzter Beitrag vom 5. Mär 2010
Antwort Antwort
Seite 1 von 3  1 23      
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#1

SyntaxHighlighting

  Alt 28. Sep 2009, 11:36
Hi,

ich muss in einem RichEdit ein Syntaxhighlighting durchführen. Mein bisheriger Code sieht so aus:

Delphi-Quellcode:
Textlen := Edit.GetTextLen;
    Linelen := Edit.Lines.Count;
    for i := 0 to Linelen do
    begin
      with Edit do
      begin
        x := posex('[',Edit.Text,x)+1;
        SelStart := x-15;
        SelLength := 12;
        SelAttributes.Color := clRed;
        SelAttributes.Style := [fsBold];
        ProgressBar.Position := ProgressBar.Position + 1;
      end;
    end;
    x := 0;
    for i := 0 to Linelen do
    begin
      with Edit do
      begin
        x := posex('[',Edit.Text,x)+1;
        SelStart := posex('[',Edit.Text,x)-1;
        SelLength := 25;
        SelAttributes.Color := clGreen;
        SelAttributes.Style := [fsBold];
        ProgressBar.Position := ProgressBar.Position + 1;
      end;
    end;
Ich hatte also genaue punkte, an denen ich das Syntaxhighlighting durchführen musste, nach denen ich im Text suchen konnte. Jetzt sieht es so aus, dass ich später aus einer XML Datei die Infos bekomme, wie Lang die strings sind, etc. Diese Datensätze sehen dann ungefähr folgendermaßen aus:

Uhrzeit Fehler : FehlertextFehlerquelleFüllzeichenGerätenummerFüllz eichenAuftragsnummerFüllzeichen

Das ganze ist dann so etwa 120 zeichen lang. Jetzt soll folgendes passieren, es sollen Fehler, Fehlertext, Gerätenummer, Auftragsnummer (nur als Beispiel) hervorgehoben werden. Jetzt meine frage, wie schaffe ich es diese Textstellen zu highlighten, wenn ich nicht wie vorher bestimmte Zeichen hab an denen ich fest machen kann wann ich highlighte und wann nicht, sondern nur die Zeichenlänge habe. Ich habe es schon einmal versucht einfach über die Länge und die Position zu machen, allerdings wird das dann nur in der ersten Zeile geändert und nicht im ganzen Text. Weiß jemand wie ich das hinbekomme immer an der stelle zu highlighten wo sich diese Info befindet?

Hoffe mir kann jemand helfen!

Gruß
AnyKey
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: SyntaxHighlighting

  Alt 28. Sep 2009, 11:38
for i := 0 to Linelen-1 do
Markus Kinzler
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#3

Re: SyntaxHighlighting

  Alt 28. Sep 2009, 12:04
Hi,

danke für deine Antwort, das bringt mich aber leider nicht viel weiter. Er geht ja mit meinem Quellcode auch alles durch, mein problem ist jetzt aber dass ich kein Zeichen mehr als startpunkt nehmen kann so wie im Quelltext im ersten post, sondern dass ich ihm sagen muss an welcher position sich das jetzt befindet (was irgendwie nicht funktinoiert, weil er sich nur in der ersten Zeile damit aurhält).

Machen muss ich aber ungefähr sowas wie hier.

Delphi-Quellcode:
for i := 0 to Linelen-1 do
    begin
      with Edit do
      begin
        SelStart := 13;
        SelLength := 6;
        SelAttributes.Color := clBlue;
        SelAttributes.Style := [fsBold];
        ProgressBar.Position := ProgressBar.Position + 1;
      end;
      with Edit do
      begin
        SelStart := 22;
        SelLength := 2;
        SelAttributes.Color := clBlue;
        SelAttributes.Style := [fsBold];
        ProgressBar.Position := ProgressBar.Position + 1;
      end;
      ...
      ...
Hoffe jemand weiß wie das dann funktioniert.

Gruß
AnyKey
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: SyntaxHighlighting

  Alt 28. Sep 2009, 12:22
Vielleicht hilft dir das hier oder hier weiter.
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#5

Re: SyntaxHighlighting

  Alt 28. Sep 2009, 13:59
Also falls ihr noch ne andere Idee hättet wäre ich euch sehr dankbar. Dieses RegExpr hilft mir irgendwie nich sehr viel weiter... so wie ich das verstehe sucht der ja auch in dem Text nach bestimmten zeichen und so, die, oder ab denen er etwas markieren soll. Ich weiß aber wie lang die Felder sind und an welcher stelle sie stehen und will sie einfärben. Also, ab Stelle 13 in Zeile 1 färbe für 6 zeichen rot, dann ab Stelle 20 in Zeile 1 färbe für 12 zeichen rot, ab Stelle 13 in Zeile 2 färbe für 6 zeichen rot, usw. versteht ihr wie ich meine?

Hoffe mal ihr könnt mir helfen.

Gruß
AnyKey
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#6

Re: SyntaxHighlighting

  Alt 29. Sep 2009, 11:15
Hi,

an der Situation hat sich ein wenig verändert, daher werde ich nun die Funktion umschreiben. Ich werde das ganze jetzt so aufziehen, dass ich mir den kompletten Text aus dem Richedit in eine StringList speichere und aus ihr jeden Datensatz (jede zeile) einzeln wieder ins RichEdit schreiben werde und zu diesem Zeitpunkt auch jeweils für diese Zeile das Syntaxhighlighting machen werde. Ich denke dass es so funktionieren sollte. Ich lasse das ganze mal noch als offene Frage stehen, falls ich dabei noch probleme bekommen sollte, wegen dem Highlighting.

Gruß und danke für eure Hilfe!!
AnyKey
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#7

Re: SyntaxHighlighting

  Alt 1. Okt 2009, 15:21
So,

ich habe jetzt hier den neuen Quelltext, es funktioniert allerdings immer noch nicht nur einen bereich einzufärben wie z.B. in Zeile 1 von Stelle 9 im text 5 zeichen blau, danach wieder schwarz und in Zeile 2 das selbe durchführen.

Delphi-Quellcode:
class function TStringManipulation.SyntaxHighlighting(Edit: TRichEdit; Progressbar: TProgressbar): Bool;
var i : Integer;
var Linemax : Integer;
var AResultList : TStringList;
begin
  try
    AResultList := TStringList.Create;
    AResultList.Assign(Edit.Lines);
    Linemax := Edit.Lines.Count-1;
    ProgressBar.Position := 0;
    ProgressBar.Max := Linemax;
    Edit.Lines.Clear;
    for i := 0 to Linemax do
    begin
      with Edit do
      begin
        SelText := AResultList.Strings[i]+sLineBreak;
        SelStart := 9;
        SelLength := 5;
        SelAttributes.Color := clBlue;
        SelAttributes.Style := [fsBold];
      end;
      ProgressBar.Position := Progressbar.Position + 1;
    end;
    FreeAndNil(AResultList);
    result := true;
  except
    FreeAndNil(AResultList);
    result := false;
  end;
end;
Hoffe es hat einer eine Idee wie ich das hinbekommen kann.

Gruß
AnyKey
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: SyntaxHighlighting

  Alt 2. Okt 2009, 01:11
Meine Links hast du ja scheinbar nicht mal im Ansatz angeschaut, deine Problembeschreibung ist eigentlich auch nicht wirklich vorhanden, wie soll man dir eigentlich helfen?

Konkretes Beispiel!
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#9

Re: SyntaxHighlighting

  Alt 2. Okt 2009, 12:25
Hallo,


Dein Code kann auch nicht funktionieren, denn SelStart wird immer auf 9 gesetzt, lass mal die StringList weg, die hilft Dir nicht dabei.

Wenn Du die jeweiligen Zeilenlängen bei SelStart berücksichtigst, sollte es funktionieren.
PseudoCode:
Code:
Zeile 1 -> SelStart := 9
Zeile 2 -> SelStart := SelStart + Länge Zeile 1
Zeile 3 -> SelStart := SelStart + Länge Zeile 2
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#10

Re: SyntaxHighlighting

  Alt 5. Okt 2009, 09:36
Danke für eure Hilfe!

Werde ich mir wohl selber noch ein paar gedanken drüber machen müssen...

Gruß
AnyKey
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 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