ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4396259
Jetzt (Chat):
18 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-
"LPICEC" von Hanno Becker (Hanno)


Hiho

Hier seht ihr den inzwischen dritten Screenshot aus meinem aktuellen Projekt "Low Performance IDE Code Editing Control" ( kurz: LPICEC ). Es handelt sich hierbei um ein von Grund auf selber geschriebenes TextControl, welches darauf ausgerichtet ist, in kleineren IDE's, wie z.B. der von NHCommander ( eines der letzten IOTW's ) eingesetzt zu werden. Bisher bietet das Control eine paar HotKeys und Sonderfunktionen sowie das Auslesen von Syntax Highlighting Daten aus einer Scheme ( XML Format ) Datei.

Hier erst mal die Hotkeys:

==>Beim Drücken von STRG + [+] werden alle markierten Zeilen um 1 Leerzeichen eingerückt

==> Beim Drücken von STRG + [-] werden alle markierten Zeilen ( wenn möglich ) um 1 Leerzeichen verkürzt

==> Beim Drücken von STRG + DELETE wird der Rest der aktuellen Zeile ab dem Cursor gelöscht

==> Beim Drücken von STRG + POS1 geht er nicht wie gewohnt an das erste Wort der Zeile, sondern ganz an den Anfang zurück

Diese Zusatzeigenschaften werden in einer Bitflag gespeichert und können wie auch das automatische Einrücken u.a. ein- und ausgeschaltet werden.



Eine Scheme Datei ist wie folgt aufgebaut:



HTML
empty



RGB[0,0,0]
0
0
0


RGB[220,20,20]
0
0
0
case,break,while,for,end,do,out,ref,int,long,double,decimal


RGB[40,0,180]
1s
0
0
<
>
1



....






Zuerst gibt man unter dem Namen General die Standardformatierung des TextControls an, dann

hat man die Möglichkeit Keywords zu definieren und am Ende können dann Elemente definiert werden,

welche alle wiederum "Kinderelemente" ( s.o. "childs" ) beinhalten können.



Im Groben unterscheidet sich die Textbox in einem Punkt wesentlich von der RichTextBox oder der normalen TextBox:

Ein Punkt auf der Textbox ist kein Offset der angibt, das wievielte Zeichen gemeint ist, sondern ein Zeiger auf eine Instanz

einer LogicalPosition Klasse, welche eine Position auf der Textbox durch Zeile und Offset in der Zeile beschreibt.

Durch diese Änderung fällt der Einbau von Sondertasten- und Funktionen sehr viel leichter.



Was nicht möglich sein wird ist das nachträgliche Ändern von Farben oder Formatierungen innerhalb der TextBox.

Alle Färbungen und Formatierung werden vollkommen aus der scheme Datei eingelesen und sind auch die einzigen.

Es ist nicht möglich, wie man das gewohnt ist, SelectionStart und SelectionLength zu definieren und dann SelectionColor

einfach zu ändern.



Eine kleine Spielerei sind die vielen bunten Farben, die man der Textbox verpassen kann, um sie mal ein wenig anders

aussehen zu lassen. Folgende Farben können angepasst werden:

==> Hintergrund

==> Gutter Farbe ( Zeilenzähler Links )

==> Selektionsfarbe

==> Farbe des Selektionsrands

Der Selektionsrand kann wie die Flags oben optional ein und ausgeschaltet werden.



Im Moment ist das LPICEC noch völlig unbrauchbar, da das errechnen der Syntax Highlighting Farben ( wenn jemand am Prinzip

interessiert ist, kann er es schreiben, dann werde ich das hier kurz erläutern ) mit bis zu 100ms noch viel zu lange dauert. Dazu kommen dann noch 15 ms durch das lahme GDI+ für das Drucken das Textes. Mit dieser "Geschwindigkeit" ist noch kein flüssiges Eingeben und erstrecht kein Scrolling möglich. Darauf wird auch mein Hauptaugenmerk liegen in den nächsten Tagen, dass ich die Geschwindigkeit noch verbessern kann.

Geplant sind für die nächsten Wochen / Monate noch folgende Features:

==> CodeCompletition ( daten dazu werden aus der Scheme Datei ausgelesen, HTML wäre somit möglich, aber kein intelligentes

C++ Parsen und Komplettieren )

==> Geschwindigkeit für Berechnen und Anzeigen auf unter 20ms drücken ( bescheidener Wunsch )

Im Moment glaube ich, dass man so etwas nicht verkaufen kann, aber ich will die Chance auch nutzen und einmal fragen, ob man mit so etwas Geld verdienen kann. Ich habe es eigentlich nicht vor, aber fragen kostet ja nichts.

Wenn ich es dann, wie ich es erwarte, als FreeWare anbiete, kann man es in seinen Mini-IDE's kostenlos einsetzen.

Schreibt mal eure Meinung

Grüße
Hanno






Von DrBassS am 20.08.2003, 00:18:29 Uhr
erster

scheint nen nettes projekt zu werden wenn du den algo noch was schneller machst.
alleerdings glaube ich nich ds man damit geld verdienen kann.


PS: da is noch das Bild vom letzten iotw,
da scheint irgendwas falsch zu laufen.

Von joeydee am 20.08.2003, 08:50:12 Uhr
Passiert wohl öfters, das mit den Bildern... Ist ja nicht weiters tragisch, aber wenn zu Stoßzeiten manche IOTWs nur 2 Tage aktuell sind, kann das schon ärgerlich sein...

Von GodThatFailed am 20.08.2003, 09:18:19 Uhr
Hi,

sieht doch schon mal ganz gut aus soweit man das auf dem kleinen Bild erkennen kann ..

Du hast was von Line + Offset erwähnt was darauf schliessen lässt, dass die Komponente nicht auf der RichTextBox basiert. Wie representierst du den Text intern, als eine Linked List?

Dann würde mich noch interessieren wie du das Syntax HL implementiert hast.

Zu Geld Verdienen, schau dir mal www.richtextbox.com an. Ich denke schon, dass man mit Editorkomponenten Geld verdienen kann, allerdings muss das Produkt ziemlich stabil sein und eine hohe Funktionsvielfalt bieten. Oder du kannst deine IDE als Shareware anbieten.

-- GTF

Von Stefan Zerbst am 20.08.2003, 09:44:04 Uhr
Hi,

ups :)

Wir werden das richtige Bild so schnell wie möglich nachliefern. Natürlich bleibt das dann länger stehen und wir werden die Darstellungszeiten auch auf drei Tage für die folgenden Bilder ausdehnen damit jeder auf sein Recht kommt ;)

Ciao,
Stefan

Von SPech am 20.08.2003, 10:03:04 Uhr
Bild mäßig passt es jetzt. Größen mäßig nicht :D

@Hanno
Meine Meinung kennst du ja schon. Also weiter so.

Von Stefan Zerbst am 20.08.2003, 10:25:20 Uhr
Hi,

ja die große Version des Bildes muss Hanno leider nochmal nachliefern weil die anscheinend durch das andere Bild von gestern überschrieben wurde :)

Ich sollte weniger schlafen und mehr Kaffee trinken :D

Ciao,
Stefan

Von Eisflamme am 20.08.2003, 12:08:36 Uhr
Klingt sehr nett. :)
Hm, aber du hast eine ziemlich niedrige Auflösung, wie mir scheint. :D

Von Cygon am 20.08.2003, 12:42:42 Uhr
Also ich kann bei dem jetzigen Screenshot in Thumbnail-Grösse leider nicht viel erkennen ;)

Aber warum Strg-[+] & Strg-[-] ?
Wäre doch sicher praktischer, die vorhandenen Standards (Tab und Shift-Tab) zu verwenden, mit denen man in den meisten Quellcode-Editoren wie auch VisualC++ Blöcke ein- und ausrücken kann.

-Maruks-

Von BlackAnger am 20.08.2003, 13:49:24 Uhr
man kann damit locker geld verdienen, aber dazu musst du es so programmieren, das man es locker in bestehenden Projekte einbauen kann.

es muss flexibel und kompatibel sein :)
ansonsten sag ich nur, sehr gute leistung!

Von MX35 am 20.08.2003, 15:07:46 Uhr
So ich habe jetzt ein Bild eingeschickt, ich hoffe es klappt bald. Inzwischen, seit dem einschicken des bildes vor 2 Wochen hat sich einiges getan. Ich habe das komplette control auf c++ mit winAPI umgeschrieben um eine höhere GEschwindigkeit zu erzielen, was auch sehr gut gelingt. Zu euren Fragen:

--> Das control wurde von absolut nichts abgeleitet, am Anfang war es ein schwarzer Bildschirm, absolut nichts war vorgefertigt

--> Zum SyntaxHighlighting: Im Moment ist das SH noch sehr sehr problematisch, da ich immer nur in einer Zeile nach den Start und End Delimetern suche. MEhrzeilige Kommentare sind somit absolut nicht möglich. Deshalb plane ich folgendes Konzept:
Ich unterteile den Text in sogenannte Spans, welche alle eine eigene formatierung haben. Ein Span repräsentiert z.B. einen HTML Tag oder einen C++ Kommentar. Wenn ich einen Span ändere prüfe ich, ob es sich um ein Keyword oder ein element mit start und End Delimeter handelt. Im ersten Fall wird der span gelöscht und in den übergeordneten Span eingegliedert ( die Spans sind wie Bäume aufgebaut ) Nun wird der übergeordnete Span durchsucht und evt. ein neuer Span eingegliedert ( falls z.b. durch die Änderung ein neues Keywords entstanden ist ). Bei Änderung eines Elementes gibt es wieder 2 Fälle. Entweder wurde nur der Inhalt des Spans geändert, dann wird Teil, wo eingegeben wurde, durchsucht und evt. neue Spans erstellt. Wenn die Delimeter geändert wurden, dann wird des komplette Span ausgeklinkt, was heißt, dass er in den übergeordneten Span eingegliedert wird und seine formatierung verliert. Nun wird der übergeordnete Span neu berechnet.

Folgende Fragen beschäftigen mich noch, bevor ich anfange, diese Planung zu implementieren:
--> woher weiß ich, auf welchem Span der Cursor steht
--> was mache ich, wenn größere Mengen Text gelöscht bzw. eingefügt wurden

Wenn ich diese Fragen gelöst habe, werde ich mich an das neue SH geben. Das alte hat mir aber dennoch für ein IOTD gereicht, da ich die fehler ja so geschickt verborgen hab ;)

Falls noch Fragen bestehen, fragt ruhig.

Von Seraph am 20.08.2003, 16:01:27 Uhr
Ehrlich gesagt mögen wir hier keine Doppelaccounts!

Von MX35 am 20.08.2003, 16:36:14 Uhr
huch, davon wusste ich gar nichts! tut mir leid, war nicht meine absicht.