ERLEDIGT
NEIN
NEIN
ANTWORTEN
12
12
ZUGRIFFE
3249
3249
EMPFEHLEN
-
Ich versuche innerhalb einer RichText-Box Syntaxhighlighting zu realisieren. Dazu hatte ich mehrere Ansätze, die aber alle nicht funktionieren. Zum Beispiel versuchte ich die Funktion InStr() dazu zu verwenden, aber im Gegensatz zu anderen Dialekten gibt mir diese Funktion nur zurück ob der gesuchte String gefunden wurde, nicht aber dessen Position im String.
Kennt vielleicht jemand eine Möglichkeit einen String innerhalb eines Strings zu finden und gleichzeitig seine Pos. zu erfahren?
P.S.: Ich teile .Text mit Split auf um den Inhalt der RichText in einzelne Zeilen zu zerlegen.be bloxed!
-
05.10.02 18:08 #2
- Registriert seit
- Nov 2001
- Ort
- Gießen
- Beiträge
- 4.091
natürlich gibt dir die instr-funktion die position des ersten zeichens vom suchtext zurück. wenn der suchstring nicht gefunden wurde, gibt die funktion 0 zurück.
"You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse
-
Du hast Recht, dennoch ****t es irgendwie nicht. Ich kenne zwar die Methoden, verstehe aber nicht deren Anwendung. Hier mal ein Beispiel mit einem festen String:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
Private Sub RichTextBox1_Change() Dim pos As Long With RichTextBox1 pos = InStr(.Text, "Hallo") If pos Then .SelStart = pos - 1 .SelLength = pos + 5 .SelColor = vbRed .SelText = "Hallo" Else .SelColor = vbBlack End If End With End Sub
Es funktioniert einfach nicht. Wie kann ich erreichen daß nur das Wort "Hallo" eingefärbt wird, der restliche Text aber unberührt bleibt und ich normal weiterschreiben kann?be bloxed!
-
P.S: Ich will während der Eingabe bestimmte Schlüsselworte formatieren.
be bloxed!
-
06.10.02 18:42 #5
- Registriert seit
- Nov 2001
- Ort
- Gießen
- Beiträge
- 4.091
eine andere möglichkeit wäre, dass du dich einfach mal mit dem aufbau der rtf-steuerzeichen auseinandersetzt. dann kannst du evtl. jedes vorkommen deines schlüsselwortes mit der replace-funktion anhand der steuerzeichen formatieren.
"You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse
-
Danke für den Tipp, daran habe ich noch garnicht gedacht.
be bloxed!
-
06.10.02 20:04 #7
- Registriert seit
- Nov 2001
- Ort
- Gießen
- Beiträge
- 4.091
ich hab mir das gerade noch mal etwas durch den kopf gehen lassen und dabei ist noch folgender code rausgekommen. ist keine besonders tolle lösung, aber vielleicht hilft es dir ja etwas weiter:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
Dim nPos As Long Dim nStart As Long nPos = rtf.Find("Hallo", nStart) Do While nPos >= 0 If rtf.SelLength > 0 Then rtf.SelBold = True rtf.SelStart = Len(rtf.Text) nPos = rtf.Find("Hallo", nPos + 5) Else rtf.SelBold = False End If Loop rtf.SelBold = False"You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse
-
Nee, sorry. Das funktioniert auch nicht.
be bloxed!
-
07.10.02 18:20 #9
- Registriert seit
- Nov 2001
- Ort
- Gießen
- Beiträge
- 4.091
bei mir funktioniert das, es sind allerdings noch ein paar kleine schönheitsfehler drin. aber es soll auch keine musterlösung sein, sondern ein denkanstoss.
"You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse
-
Du hattest Recht, es funktioniert sehr gut.
Allerdings denke ich daß es dennoch der falsche Ansatz ist. Einserseits durch die Tatsache daß ständig der gesamte Text durchsucht werden muß, andererseits weil man kaum Kontrolle über das Geschehen hat.
Ich will es nun so versuchen, daß ich einen zzweiten String "mitschleppe" in den ich den geparsten Text packe. Nur will mir kein vernünftiger Ansatz dafür einfallen ... vielleicht jemand eine Idee?
Ich will während der Eingabe des Textes Schlüsselwörter farbig darstellen, nach bestimmten Kombinationen von Schlüsselwörtern den Text einrücken, Tabs soll auch in der nächsten Zeile erhalten bleiben und ich will die Länge der Tabs ständig kontrollieren können ... *phew* ... starker Tobakbe bloxed!
-
10.10.02 15:36 #11
- Registriert seit
- Nov 2001
- Ort
- Gießen
- Beiträge
- 4.091
das problem bei deinem vorhaben ist einfach nur, dass du ja vorher nicht weisst, an welcher stelle der text geändert wird. du könntest dich zwar immer auf die umgebung der aktuellen cursor-position beschränken, aber du weisst auch nicht, wieviel text geändert wird.
also bleibt dir wahrscheinlich nichts andere übrig, als immer den gesamten text zu durchsuchen.
falls mir trotzdem noch eine andere lösung einfällt, meld ich mich nochmal."You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse
-
Ich habe es jetzt folgendermaßen in Angriff genommen: Mit einem Timer hole ich mir alle 125ms die Cursorposition (onChange geht ja nicht, da die Positionierung des Cursors keine Änderung darstellt) und will jetzt bei einer Änderung die komplette Zeile bis zum nächsten vbCrLf rausfinden. Aber genau das ist noch das Problem, irgendwie finde ich nicht heraus wo die Zeile beginnt...
be bloxed!
-
12.10.02 12:25 #13
- Registriert seit
- Nov 2001
- Ort
- Gießen
- Beiträge
- 4.091
du kannst auch die dafür wichtigsten ereignisse nehmen (onclick, onchange, onkeydown, etc.) und miteinander verknüpfen. über die eigenschaft selstart kriegst du die cursorposition im gesamten text der richtextbox raus.
einen timer würde ich für sowas eher vermeiden, weil dadurch zu viele systemressourcen verbraucht werden.
und das problem bei deinem vorhaben ist, dass du immer nur eine zeile bis zum zeilenende parsen würdest. wenn jemand per copy and paste mehrere zeilen einfügt, dann könnte man das highlighting umgehen."You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse
Ähnliche Themen
-
[VB] RichText Highlighter
Von sub7even im Forum .NET Windows FormsAntworten: 22Letzter Beitrag: 13.01.10, 20:58 -
Itext: Zugriff auf Inhalt nur über Acroforms?
Von pizza1234 im Forum JavaAntworten: 1Letzter Beitrag: 10.07.09, 16:19 -
Zugriff auf denn Inhalt des div tags
Von Gerold Kumpfhuber im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 16.11.04, 11:35 -
Zugriff auf den Inhalt der mysql_fetch_array() Funktion
Von Ralf Dillenburger im Forum PHPAntworten: 2Letzter Beitrag: 16.06.04, 15:30 -
Zugriff auf den Inhalt eines Textfeldes einer OCX
Von Smuddle im Forum .NET ArchivAntworten: 0Letzter Beitrag: 11.09.03, 18:46





Zitieren
Login





