[GELÖST] MaxGUI - Syntaxhighlighting in TextArea?
Übersicht

CO2ehemals "SirMO"Betreff: [GELÖST] MaxGUI - Syntaxhighlighting in TextArea? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich bastel mir gerade einen Editor für eine scriptsprache. Nun sollen die verwendeten befehle (falls vorhanden) gehighlightet werden... Ich habe mir also eine Liste gemacht, die alle Befehle beinhaltet und gehe sie in der hauptschleife immer durch. So, nun kommt der fehler: irgendwie ist es immer so, das wenn ich den befehl zum ersten mal hinschreibe, nur die ersten beiden buchstaben gehighlightet werden. schreibe ich danach weiter wird auf einmal alles gehighlightet (also wirklich alles, auch wenn es kein befehl ist)... Hier mal der pseudocode: BlitzMax: Import maxgui.drivers Ich weiß nicht woran es liegt... stehe komplett aufm schlauch. |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
- Zuletzt bearbeitet von CO2 am Mo, Jan 23, 2012 22:36, insgesamt einmal bearbeitet
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
eine Frage dazu:
BlitzMax: FormatTextAreaText(scriptarea, 0, 0, 255, TEXTFORMAT_BOLD, command, Len(x)) wofür steht dieses x in Len(x) und wo wird es festgelegt? |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich mache jetzt genau das, was ich letztens nicht machen wollte... Ich gebe dir einen verbesserten Codeschnipsel von deiner Hauptschleife.
BlitzMax: Repeat Versuch aber wenigstens daraus schlau zu werden! Da steckt auch noch jede Menge Optimierungspotenzial drin. Es wird nämlich bei jedem Buchstaben den du tippst die komplette Liste deiner Keywords durchlaufen. Das muss nicht sein. Es reicht auch bei Leerzeichen und Return, Backspace usw.. Außerdem solltest du dir ein schnelleres System für die Keywords ausdenken. So ein Listendurchlauf kostet viel Zeit, vor allem wenn die Liste sehr lang wird und das Keyword ganz hinten ist. Außerdem wird dir das gleiche passieren, was auch in der MaxIDE passiert: Je länger der Code desto langsamer wird das alles! Es gäbe noch die Möglichkeit klepto2's Scintilla Modul zu verwenden, allerdings glaube ich nicht, dass du damit klar kommen wirst. Das soll kein Angriff sein, aber deine Fragen deuten darauf hin, dass du noch recht unerfahren mit Modulen und BlitzMax im allgemeinen bist. @Midimaster Len(x) müsste eigentlich die Länge des Keywords sein. Allerdings ist sein ganzer Code irgendwie daneben. Denn er würde (wenn er denn funktionieren würde) in jedem Schleifendurchlauf alle Keywords neu formatieren, was noch wesentlich langsamer ist als meine Version! Grüße |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok,
@ Midimaster: Oh, hatte davor einen anderen Code... in dem war das x als String im kopf der for-next-schleife deklariert, muss ich wohl übersehen haben ![]() @ d-bug: Zitat: Es reicht auch bei Leerzeichen und Return, Backspace usw.. - Einige Codezeilen (in der scriptsprache) sehen aber wie folgt aus:
Code: print["Hallo"]; Hier ist kein Leerzeichen enthalten... ebenso kann man mehrere befehle hintereinanderschreiben, was auch die möglichkeit mit [Enter] vernichtet... Das einzige was meiner meinung nach ginge wäre die möglichkeit, das die geschriebene codezeile überprüft wird, wenn das Semikolon getippt wurde. - Werde auf jedenfall experimentieren/optimieren! ![]() Ich werde das thema jetzt als "Gelöst" taggen, da mein Problem ja vorerst gelöst wurde, also danke an alle die halfen ![]() mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
Macintosh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du könntest zwischen zahlen, buchstaben , whitespace und sonderzeichen unterscheiden und bei jedem wechsel das letzte wort neu higlighten.
Also so in etwa |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hier dann gleich noch ein vorschlag meinerseits:
Damit du nicht ewig eine liste durchgehen musst, welches keyword nun vorkommen könnte, machs wie folgt: Erstell einen array mit 26 einträgen (wahlweise auch 29, je nachdem, ob du funktionen mit ü,ö,ä am anfang verwendest., bzw evtl auch 52 oder 58, wenn du zwischen groß/klein unterscheidest, etc,etc,etc.) Nun kannst du für jeden buchstaben den ascii-code nehmen und um X verringern (genauen wert googlen - x steht für "minus asciicode von 'a'" (oder auch ascii-code von 'A' -> groß/kleinschreibung) und als array index verwenden. BlitzBasic: Jede dieser array einträge kriegt nun ein weiteres Array oder Type rein, in welchem du die Funktionen verwaltest, die ein highlight bekommen. Type bietet sich an, um evtl andere Farbcodes etc zu speichern. Prüfe, nachdem ein leerzeichen + neues zeichen getippt wurde, welches der erste buchstabe ist, nehm seinen Ascii-code und rechne die differenz runter. Nun kannst du schonmal auf die liste zugreifen, welche nurnoch mögliche funktionen beinhaltet. Optional: Kopiere diese liste und kicke jeden eintrag raus, welcher durch weitere buchstaben nichtmehr möglich ist (Highlightliste: Apfel, Armeise - Geschrieben : 'A' -> Möglich: Apfel, Armeise. Weiter gehts: Geschrieben : 'Ar' -> Möglich: Armeise --> Apfel fliegt aus der liste.) So wirst du die durchläufe ziemlich heftig minimieren können. Mit der raus-kick-methode hast du sogar die möglichkeit, die durchläufe auf eine hand voll zu verringern. Es bringt nix, wörter mit 'A' am anfang zu prüfen, wenn man Z eingetippt hat. Gruß, PhillipK |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group