![]() |
SyntaxHighlighting
Hi,
ich muss in einem RichEdit ein Syntaxhighlighting durchführen. Mein bisheriger Code sieht so aus:
Delphi-Quellcode:
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:
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; 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 |
Re: SyntaxHighlighting
Delphi-Quellcode:
for i := 0 to Linelen-1 do
|
Re: SyntaxHighlighting
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:
Hoffe jemand weiß wie das dann funktioniert.
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; ... ... Gruß AnyKey |
Re: SyntaxHighlighting
|
Re: SyntaxHighlighting
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 |
Re: SyntaxHighlighting
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 |
Re: SyntaxHighlighting
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:
Hoffe es hat einer eine Idee wie ich das hinbekommen kann.
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; Gruß AnyKey |
Re: SyntaxHighlighting
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! |
Re: SyntaxHighlighting
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 |
Re: SyntaxHighlighting
Danke für eure Hilfe!
Werde ich mir wohl selber noch ein paar gedanken drüber machen müssen... Gruß AnyKey |
Re: SyntaxHighlighting
hallo
warum benutzt du nicht z.B. ![]() |
Re: SyntaxHighlighting
Hallo,
kenn synedit nicht im Detail(nutze es nicht), aber auch dann muss doch angegeben(vorgegeben) werden, was eingefärbt werden soll, oder? |
Re: SyntaxHighlighting
wenn ich mich recht erinnere kann man dort filter erstellen die angeben was gefärbt werden soll. auf jeden fall wäre ein blick in den source code wohl interessant.
|
Re: SyntaxHighlighting
Hi,
danke für den Tipp mit dem Synedit. Ja, leider muss das selber gemacht sein... Also vielleicht schildere ich mal genau das Problem das ich hab. Ich habe eine Datei (ist ein logfile) in der Datei stehen viele verschiedene "Telegramme" also irgendwelche aufträge, Fehler, etc. dann habe ich eine XML Datei (existiert noch nicht, wollte erst das Grundgerüst schaffen), aus dieser XML geht dann hervor welcher Telegrammtyp wie gehighlightet wird. Kann dann also sein dass ich von zeichen 9, 5 zeichen Blau mache und beim nächsten Telegramm (nächste Zeile) dann aber von zeichen 5, 2 zeichen blau machen muss. Ich habe leider keinen Anhaltspunkt bei dem ich sagen kann z.B. ab < bis > blau oder von [ bis ] grün oder wie auch immer. Ich kann das wirklich nur über die Position des Wortes und die Länge machen (was im XML steht). Nur leider bekomm ich das nicht gebacken. :( Gruß AnyKey |
Re: SyntaxHighlighting
Hi,
hier ein kleines Codebeispiel:
Delphi-Quellcode:
diese Procedure kopierst du in einem Button und benennst die Richedit Komponente in 'redt1' um und wundere dich über das Ergebnis...procedure ...... var i : Integer; begin for i := 0 to Length(redt1.text) -1 do begin redt1.SelStart := i; redt1.SelLength := 1; if i mod 2 = 0 then begin redt1.SelAttributes.Color := clBlue; end else begin redt1.SelAttributes.Color := clRed; end; end; end; |
Re: SyntaxHighlighting
Hallo,
Zitat:
Delphi-Quellcode:
Erklärung: Selstart wird immer um die Länge der letzten Zeile weitergeschoben.
var z, Offset, Count, LineLength: Integer;
begin Offset:= 5; //kommt später aus XML Count := 2; //kommt später aus XML LineLength := 0; //initialisieren //Offset-1 => Index 0 ist SelStart-Index für erstes Zeichen RichEdit.SelStart := Offset-1; //initialisieren for z := 0 to RichEdit.Lines.Count-1 do begin RichEdit.SelStart := RichEdit1.SelStart + LineLength; RichEdit.SelLength := Count; RichEdit.SelAttributes.Color := clRed; LineLength := Length(RichEdit.Lines[z]) +2; //+2 = Zeilenumbruch berücksichtigen end; Der Code funktioniert natürlich nur zur Einfärbung eines Teilbereichs jeder Zeile, die Erweiterung auf mehrere Teilbereiche überlass ich Dir. Als auch die berücksichtigung von Randbedingungen, als da wären: -leere Zeilen im RichEdit -Zeilen die kürzer als Offset + Count sind - ... |
Re: SyntaxHighlighting
Hi,
habs jetzt mal so versucht, er färbt allerdings immer noch alle Zeilen Blau ein, hier mal der Quelltext, wäre schön wenn mal kurz einer drüber gucken könnte ob doch noch ein fehler drin ist.
Delphi-Quellcode:
Danke!!
class function TStringManipulation.SyntaxHighlighting(Edit: TRichEdit; Progressbar: TProgressbar): Bool;
var AResultList : TStringList; var Linelength : Integer; var Linemax : Integer; var Offset : Integer; var Count : Integer; var i : Integer; begin try Offset := 9; // später aus XML Count := 5; // später aus XML LineLength := 0; AResultList := TStringList.Create; AResultList.Assign(Edit.Lines); Linemax := Edit.Lines.Count-1; ProgressBar.Position := 0; ProgressBar.Max := Linemax; Edit.Lines.Clear; Edit.SelStart := Offset-1; for i := 0 to Linemax do begin with Edit do begin SelText := AResultList.Strings[i]+sLineBreak; SelStart := Edit.SelStart + Linelength; SelLength := Count; SelAttributes.Color := clBlue; SelAttributes.Style := [fsBold]; end; Linelength := Length(Edit.Lines[i])+2; //+2 wegen Zeilenumbruch! ProgressBar.Position := Progressbar.Position + 1; end; FreeAndNil(AResultList); result := true; except FreeAndNil(AResultList); result := false; end; end; Gruß AnyKey |
Re: SyntaxHighlighting
Hallo,
mehrere Fehler :wink: siehe Kommentare
Delphi-Quellcode:
Ich hatte schon in Beitrag #9 geschrieben: "lass mal die StringList weg, die hilft Dir nicht dabei"
class function TStringManipulation.SyntaxHighlighting(Edit: TRichEdit; Progressbar: TProgressbar): Bool;
var AResultList : TStringList; var Linelength : Integer; var Linemax : Integer; var Offset : Integer; var Count : Integer; var i : Integer; begin try Offset := 9; // später aus XML Count := 5; // später aus XML LineLength := 0; AResultList := TStringList.Create;//warum StringList ? AResultList.Assign(Edit.Lines); Linemax := Edit.Lines.Count-1; ProgressBar.Position := 0; ProgressBar.Max := Linemax; Edit.Lines.Clear; //löschen, um nachher wieder einzufügen ? Edit.SelStart := Offset-1; //RichEdit ist leer, Selstart bleibt 0 for i := 0 to Linemax do begin with Edit do begin //im vorigen Durchlauf eingefärbten Text überschreiben? SelText := AResultList.Strings[i]+sLineBreak; SelStart := Edit.SelStart + Linelength; SelLength := Count; SelAttributes.Color := clBlue; SelAttributes.Style := [fsBold]; end; Linelength := Length(Edit.Lines[i])+2; //+2 wegen Zeilenumbruch! ProgressBar.Position := Progressbar.Position + 1; end; FreeAndNil(AResultList); result := true; except FreeAndNil(AResultList); result := false; end; end; |
Re: SyntaxHighlighting
Hi,
danke für die Antwort ;) Ich lade das deshalb in eine StringList und leere das RichEdit weil das ganze sonst flimmert wenn ich das syntaxhighlighting mache. Mich würd das nich weiter stöhren aber die leute für die ich das mache finden das nich so prickelnd :) Und deswegen war meine Anweisung dann das so zu machen...
Delphi-Quellcode:
Diese Stelle soll ja eigetntlich nur die Zeilen aus der StringList wieder ins Richedit schreiben und die eingefügte Zeile dann formatieren. Ich steh da echt nen bisschen aufm schlauch... Ich hatte es ja mal so weit das es ging, aber dann wurde halt das mit dem Flimmern bemängelt und jetzt steh ich wieder da und es funktioniert nix. Bin froh das ihr mir helfen könnt!
with Edit do
begin //im vorigen Durchlauf eingefärbten Text überschreiben? SelText := AResultList.Strings[i]+sLineBreak; SelStart := Edit.SelStart + Linelength; SelLength := Count; SelAttributes.Color := clBlue; SelAttributes.Style := [fsBold]; end; Edit: hab das ganze jetzt mal geändert, also das mit der Stringlist rausgenommen, das funktioniert auch. allerdings tritt dann leider wieder dieses besagte flimmern auf :( -> und bei 100 Datensätzen/Zeilen sieht das wirklich ein bisschen doof aus. Gruß AnyKey |
Re: SyntaxHighlighting
Hallo,
damit würdest Du das Flackern aber nicht unterbinden, vermutlich eher vermehren. Die Menge dessen was eingefärbt werden muss wird doch dadurch nicht weniger. Ich würde dann das einfärben im Hintergrund realisieren, in einem nicht sichtbares RichEdit vornehmen oder den RTF-Code als Text zusammen basteln, und dann in das Anzeige-RichEdit übertragen. |
Re: SyntaxHighlighting
Hi,
noch mal vielen Dank für die Hilfe! Also ich habs jetzt so gemacht, dass ich das RichEdit für die Zeit, in der das Syntaxhighlighting läuft einfach unsichtbar mache, danach wird es wieder sichtbar gemacht. Sieht zwar ein bisschen komisch aus, aber so ist das Flimmern weg :D zumindest solange bis ich eine bessere Möglichkeit finde! Gruß und ein schönes Wochenende! AnyKey |
Re: SyntaxHighlighting
Hast Du es mal Edit.Lines.BeginUpdate am Anfang und Edit.Lines.EndUpdate am Ende versucht?
Delphi-Quellcode:
Edit.Lines.BeginUpdate;
try //ganz viel Code finally Edit.Lines.EndUpdate; end; |
SyntaxHighlighting
Hi,
ich bins mal wieder, muss das Thema doch noch einmal aufgreifen, weil ich wieder hänge.Hat vielleicht mal jemand ne Idee oder einen Vorschlag wie ich das mit dem Syntaxhighlighting machen kann? So sieht es im Moment gehighlightet aus: 12:01:01.178 000083 : 61************VTA1-SC16010******************************000000**1198877251663428****************** So solls aussehen: 12:01:01.178 000083 : 61************VTA1-SC16010******************************000000**1198877251663428****************** Habs versucht so zu programmieren wie ich es auch in echt machen würde, also Zeile für Zeile und Zeichen für Zeichen, funktioniert aber nicht wie man sieht. Hier mal noch der Quellcode:
Delphi-Quellcode:
ich hab keine Ahnung woran das liegt, vielleicht hat ja jemand eine Idee wie es funktionieren könnte.
for j := 0 to RichEdit1.Lines.Count-1 do
begin for i := 0 to spaltenZahl-1 do begin if spaltenInhalt.teltype[i] = StrToInt(copy(Trim(RichEdit1.Lines.Strings[j]),23,2)) then begin RichEdit1.SelStart := neuStart; RichEdit1.SelLength := spaltenInhalt.laenge[i]; //Length(RichEdit1.Lines.Strings[OldLine-1])+2; if myColor = clBlack then begin myColor := clLime; end else begin myColor := clBlack; end; RichEdit1.SelAttributes.Color := myColor; if i < spaltenZahl-1 then begin RichEdit1.SelLength := 0; neuStart := neuStart + spaltenInhalt.laenge[i]; end; end; end; end; Was halt das größte Problem ist, ist dass in jeder Zeile unterschiedlich gehighlightet werden muss, abhängig von einer bestimmten Zehl (die erste die in dem richtigen Beispiel fett markiert ist). Wäre super wenn mir jemand helfen könnte! Gruß AnyKey |
Re: SyntaxHighlighting
Liste der Anhänge anzeigen (Anzahl: 1)
Meine Aussagen von damals gelten immer noch!
Wenn du mal in meine angegebenen Beispiele reingeschaut hättest, dann wäre es für dich ein leichtes gewesen eine funktionierende Lösung zu realisieren. Naja, du braucht deine Einstellung ja nicht ändern, es gibt bestimmt immer wieder solche Deppen wie mich, die deine Arbeit machen. |
Re: SyntaxHighlighting
Liste der Anhänge anzeigen (Anzahl: 1)
Hier noch ein neuer Versuch, der etwas mehr "Luxus" bietet...
|
Re: SyntaxHighlighting
@omata
hübsch! das kann man ja zur not noch extern konfigurieren! mir gefällts! Gruß K-H |
Re: SyntaxHighlighting
Hi,
danke für eure Antworten! @Omata: ich sehs nich so das du nen depp bist der meine Arbeit macht, sondern mir eher ne hilfe bei meiner Arbeit bist. Der code sieht ja ganz gut aus, aber da es möglicherweise 6 oder mehr verschiedene Telegramme gibt, die alle in einer Datenbank stehen und deren Attribute in ein XML file gelesen werden, aus dem dann das Highlighting gemacht wird blick ich durch die Lösung nich wirklich durch, ist das dann code für jedes einzelne Telegramm oder wie ist das zu verstehen? naja ich habe hier mal meine eigene Lösung weiter bearbeitet, das ganze funktioniert auch ganz gut, allerdings nur für die ersten beiden Zeilen, hat vielleicht jemand ne Idee wo mein Fehler liegt?
Delphi-Quellcode:
Hoff mal ihr könnt mir bei meinem Problem helfen!
neuStart := 22;
for j := 0 to RichEdit1.Lines.Count-1 do begin for i := 0 to spaltenZahl-1 do begin if spaltenInhalt.teltype[i] = StrToInt(copy(Trim(RichEdit1.Lines.Strings[j]),23,2)) then begin RichEdit1.SelStart := neuStart; RichEdit1.SelLength := spaltenInhalt.laenge[i]; if myColor = clBlack then begin myColor := clLime; end else begin myColor := clBlack; end; RichEdit1.SelAttributes.Color := myColor; if i < spaltenZahl-1 then begin RichEdit1.SelLength := 0; neuStart := neuStart + spaltenInhalt.laenge[i]; end; end; end; neustart := (Length(RichEdit1.Lines.Strings[j])+2)+22; end; Gruß AnyKey |
Re: SyntaxHighlighting
Es beruhigt mich, dass ich dich nicht verscheucht habe (war nämlich auch nicht mein Vorhaben)
Allerdings macht es mich schon sehr traurig, dass du scheinbar lernresistent bist. Du willst scheinbar gar keine wirkliche Hilfe, zumindest artikulierst du dich hier so. Was passiert nach der zweiten Zeile? (die wir nicht mal kennen!) Wie auch immer, ich gebe auf, ich habe dir jetzt schon Beispielcode geliefert. Da du aber von deiner Lösung (die nicht funktioniert) nicht abweichen willst, du versuchst es ja nicht mal und du dir auch gar keine Mühe machst, dein Problem so zu schieldern und auch vorzubereiten, dass andere dir helfen können, kann dir keiner helfen (selbst wenn er wollte). Warum sollen wir dir hier alles aus der Nase ziehen? Du willst doch was von uns :wall: Du machst es einem hier echt nicht leicht. |
Re: SyntaxHighlighting
Lernresistent bin ich ganz bestimmt nicht! Ich versteh nur nich genau wie ich deine Lösung auf mein Problem anwenden kann, weil ich durch deinen Code und was du da genau machst nich druchblick, aber statt es mir mal zu erklären, damit ich auch auf ne andere Lösung kommen kann, maulst du hier nur rum. Außerdem bin ich der meinung das ich schon viele Infos gegeben habe, du fragst ja auch nich nach dem was ich vergessen habe oder was dich interessieren könnte, woher soll ich denn wissen was dich interessiert um mir zu helfen?
Ich kann dir nur noch einmal sagen, in dem RichEdit befinden sich 50 Datensätze, diese sollen gehighlightet werden, es handelt sich nicht um Quellcode, sondern um Telegramme. Wie die aussehen ist oben schon oft genug erklärt worden. Es gibt keine Ahnung wieviele Telegramm arten, die über die Telegrammnummer gekennzeichnet werden, was also 60, 67, 80, 99, 1, 3, usw. sein kann. Da ich also nicht sagen kann in welcher Zeile welcher Telegrammtyp steht, muss ich es irgendwie herausfinden, also auslesen, für jede Zeile. Jenachdem welcher Typ dann dort steht soll der Text ab dieser Stelle gehighlightet werden. Mein Code macht das auch ganz richtig, allerdings werden nur die ersten zwei zeilen gehighlightet der rest nicht, weiß echt nich was ich dazu noch mehr erklären soll.... Also @omata wenn du mir nich mehr helfen willst dann trotzdem danke bis hier her, wie gesagt dein Quellcode, schön und gut, nur ne kleine erklärung wär nich schlecht. Ich versteh das so, dass du für jedes Telegramm ne eigene funktion schreibst, das wird aber bei 10 oder mehr telegrammen sehr unübersichtlich (finde ich), außerdem habe ich ja extra um das Automatisch durchzuführen diese XML Datei erstellt, in der alle informationen stehen. Das thema steht noch, wenn mir noch jemand helfen möchte dann bitte ich darum Problem sollte ja jetzt genug erklärt sein, wenn nicht dann fragt halt wenn die infos zu drüftig sind. Wäre super nett wenn mir jemand helfen könnte, wenn jetzt keiner mehr lust hat auch gut, find ichs ja vielleicht alleine raus. Edit: noch mal kurz zur erklärung, bei dem was ich mit "die ersten beiden Zeilen" gemeint habe, handelt es sich nicht um Quellcode, sondern um die Zeilen im Richedit! Die interessieren ja aber keinen für die lösung oder?! Gruß AnyKey |
Re: SyntaxHighlighting
Hi,
also ich weiß jetzt wo mein Fehler liegt! hier noch mal der Quellcode:
Delphi-Quellcode:
In Dieser Zeile ist der Fehler:
neuStart := 22;
for j := 0 to RichEdit1.Lines.Count-1 do begin for i := 0 to spaltenZahl-1 do begin if spaltenInhalt.teltype[i] = StrToInt(copy(Trim(RichEdit1.Lines.Strings[j]),23,2)) then begin RichEdit1.SelStart := neuStart; RichEdit1.SelLength := spaltenInhalt.laenge[i]; //Length(RichEdit1.Lines.Strings[OldLine-1])+2; if myColor = clBlack then begin myColor := clLime; end else begin myColor := clBlack; end; RichEdit1.SelAttributes.Color := myColor; if i < spaltenZahl-1 then begin RichEdit1.SelLength := 0; neuStart := neuStart + spaltenInhalt.laenge[i]; end; end; end; neuStart := (Length(RichEdit1.Lines.Strings[j])+2)+22; end;
Delphi-Quellcode:
Ich nehme hier die Länge der Spalte +2 (wegen Zeilenumbruch) und noch einmal +22 um an die Stelle ab der eingefärbt werden soll zu kommen. Was ich aber eigentlich machen müsste wäre: neuStart = neuStart + ((der Rest der Zeile ab neustart)+2)+22
neuStart := (Length(RichEdit1.Lines.Strings[j])+2)+22;
Der Rest des Codes scheint zu stimmen :) Edit: Also ich habs geschafft, es scheint jetzt alles richtig zu funktionieren :) Ich hab einfach noch einen Merker eingebaut, der mir die Länge der einzelnen eingefärbten Strings zusammenzählt und dann später von der Gesamtlänge der Zeile abzieht, damit ich dann in der Nächsten Zeile über die Variable neuStart wieder direkt an die Stelle komme, ab der gehighlightet werden soll :-D Hier noch der richtige Code:
Delphi-Quellcode:
Danke noch mal allen die mir geholfen haben :)
neuStart := 22;
for j := 0 to RichEdit1.Lines.Count-1 do begin LenMerker := 0; for i := 0 to spaltenZahl-1 do begin if spaltenInhalt.teltype[i] = StrToInt(copy(Trim(RichEdit1.Lines.Strings[j]),23,2)) then begin RichEdit1.SelStart := neuStart; RichEdit1.SelLength := spaltenInhalt.laenge[i]; LenMerker := LenMerker + spaltenInhalt.laenge[i]; if myColor = clBlack then begin myColor := clLime; end else begin myColor := clBlack; end; RichEdit1.SelAttributes.Color := myColor; if i < spaltenZahl-1 then begin RichEdit1.SelLength := 0; neuStart := neuStart + spaltenInhalt.laenge[i]; end; end; end; neuStart := neuStart + ((Length(RichEdit1.Lines.Strings[j])-LenMerker)+2); end; Gruß AnyKey |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz