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 3 von 3     123   
AnyKey

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

Re: SyntaxHighlighting

  Alt 9. Okt 2009, 10:59
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 zumindest solange bis ich eine bessere Möglichkeit finde!

Gruß und ein schönes Wochenende!
AnyKey
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.539 Beiträge
 
Delphi 11 Alexandria
 
#22

Re: SyntaxHighlighting

  Alt 9. Okt 2009, 12:22
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
AnyKey

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

SyntaxHighlighting

  Alt 2. Mär 2010, 09:27
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:
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;
ich hab keine Ahnung woran das liegt, vielleicht hat ja jemand eine Idee wie es funktionieren könnte.
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
  Mit Zitat antworten Zitat
omata

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

Re: SyntaxHighlighting

  Alt 2. Mär 2010, 13:34
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.
Angehängte Dateien
Dateityp: zip richedithighlighter_965.zip (1,8 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
omata

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

Re: SyntaxHighlighting

  Alt 2. Mär 2010, 15:17
Hier noch ein neuer Versuch, der etwas mehr "Luxus" bietet...
Angehängte Dateien
Dateityp: zip richedithighlighter_689.zip (2,2 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#26

Re: SyntaxHighlighting

  Alt 2. Mär 2010, 17:02
@omata

hübsch! das kann man ja zur not noch extern konfigurieren!

mir gefällts!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
AnyKey

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

Re: SyntaxHighlighting

  Alt 4. Mär 2010, 12:57
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:
    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;
Hoff mal ihr könnt mir bei meinem Problem helfen!

Gruß
AnyKey
  Mit Zitat antworten Zitat
omata

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

Re: SyntaxHighlighting

  Alt 4. Mär 2010, 21:28
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

Du machst es einem hier echt nicht leicht.
  Mit Zitat antworten Zitat
AnyKey

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

Re: SyntaxHighlighting

  Alt 5. Mär 2010, 07:13
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
  Mit Zitat antworten Zitat
AnyKey

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

Re: SyntaxHighlighting

  Alt 5. Mär 2010, 09:21
Hi,

also ich weiß jetzt wo mein Fehler liegt!

hier noch mal der Quellcode:
Delphi-Quellcode:
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;
In Dieser Zeile ist der Fehler:
neuStart := (Length(RichEdit1.Lines.Strings[j])+2)+22; 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

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

Hier noch der richtige Code:

Delphi-Quellcode:
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;
Danke noch mal allen die mir geholfen haben

Gruß
AnyKey
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 11: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