Jag håller på och göra en text editor som ska checka syntax för diverse skript språk. Mitt problem är att jag inte vet hur jag ska få det att fungera smidigt(och snabbt): Här har du ett exempel som färgar kod - dock inte via en editor: Jag tror du missförstod mig lite :). Jag beskriver mitt problem på ett helt annat vis:Text editor
För att kunna checka syntaxen så behöver jag veta vilken rad användaren befinner sig på och var raden börjar och slutar. Hur gör jag det? Med en loop som checkar antalet enterslag fram till cursorpositionen? Det kan bli väldigt långsamt....
Jag vet att man kan få fram den aktuella raden med följande kod:
<code>
Private Sub DispCaretPos()
On Local Error Resume Next
' cursor position i rtfkontrollen (med CR & LF om de finns, 0-baserad)
overallCursorPos = SendMessageLong(RichTextBox1.hwnd, EM_GETSEL, 0, 0&) \ &H10000
' aktuell kolumn position (Notera: 0-baserad)
currLinePos = SendMessageLong(RichTextBox1.hwnd, EM_LINEFROMCHAR, _
overallCursorPos, 0&)
' antal tecken fram, men före början av aktuell rad
chrsBeforeCurrLine = SendMessageLong(RichTextBox1.hwnd, EM_LINEINDEX, _
currLinePos, 0&)
' cursor position endast på aktuell rad
CurrLineCursorPos = overallCursorPos - chrsBeforeCurrLine
RichTextBox1.SetFocus
StatusBar1.Panels(1).Text = "Pos: " & CStr(currLinePos + 1) & ":" & _
CStr(CurrLineCursorPos + 1) & Space(1)
End Sub
</code>
Felet med denna koden är att jag inte får reda på var raden börjar och var den slutar vilket är nödvändigt för att kunna färga raden.
Är jag helt inne på fel spår?
Tack på förhand
/CythSv: Text editor
http://www.pellesoft.nu/upload/colorize.exe
http://www.pellesoft.nu/upload/FormatSource.zip
/PelleSv: Text editor
Användaren befinner sig på en viss rad i min rtbtextbox. Det enda jag vet är rtbtextbox.selstart.
Jag vill nu markera all texten på den rad han är på. För att kunna göra det så måste jag veta:
*var raden börjar
*var raden slutar
man kan lösa detta på ett vis(väldigt långsamt när det gäller stora filer) och det är en loop som tar sig fram till enterslaget som ligger innan rtbtextbox.selstart och noterar positionen.
För att sedan ta reda på var raden slutar så letar man upp det första enterslaget efter .selstart och noterar positionen. Med dessa två värden så kan man sedan markera(och delar av raden) raden.
Felet är att det blir oerhört långsamt(borde bli) när man loopar igenom större filer så ni kanske har ett snabbare/bättre förslag på hur jag tar reda på de 2 värdena?