wie versprochen stelle ich hier meine Editor Projekt vor. Im Moment nur als Ausführbare Linux Anwendung.
Wenn Intresse besteht werde ich auch noch eine Windows Anwendung Komplieren.
Den Soruce Code gibt es aus verschiedenen gründen noch nicht.
Das ist eine sehr sehr sehr frühe Anfangst Version. Aber ich dachte mir da sie schon recht weit ist, wollte ich sie
euch mal vorstellen.
ICH BITTE EUCH NUR ANTWORTEN WENN IHR ES ERNST MEINT. Mir ist diese Komponente eigentlich sehr wichtig, auch wenn ich es als Spielerei bezeichne. Ich möchte schon diese Komponente eines Tages nutzen können.
Es ist eine sehr früher Anfangs Version der Editor Klasse. Ich habe viele versuche gemacht. Dieser Ansatzt finde ich von allen am besten. Die TObjectListen die ich im Moment nutze werde ich später austauschen, das ist recht leicht.
Im Moment gehen folgende dinge
Texte laden
Es wird einfach nur eine einfache Text Datei direct beim Start geladen. Den Text habe ich aus einem Forum.
Texte da stellen.
TextCursor steuern mit
Pfeiltasten
Pos 1
End
Strg+Pos1
Strg+End
Strg+Linke Pfeiltaste
Strg+Rechte Pfeiltaste
Texte abspeichern mit F3
es wird eine tmp Datei erzeugt im gleichen verzeichnis wie sich die andere Text Datei befindet
Texte Eingeben und Bearbeiten
Lösch Tasten(beide)
Enter
Normale Zeichne ohne Umlaute und Unicode Zeichen, hier muss ich schauen wie das bei SynEdit gemacht wurde.
Hintergrund, Vordergrund, Rand Farbe
kann Direct von der Oberfläche aus geändert werden
Es gibt 4 Verschiedene Hintergrund arten:TI_GradientHori,TI_GradientVerti, TI_Rect, TI_FillRect
Überschreiben mit der Insertaste(Einfg)
Diese sachen gehen leider noch nicht:
- Cursor mit der Maus setzten
- Markieren
- Scrollen
- Undo/Redo
Hier habe ich auch keine Idee wie ich das machen könnte
Im Anhang befindet sich ein ScreenShot der Beispiel Anwendung, und einmal ein gepacktes Zip Archiv mit dem Beispiel Programm.
Die Weitere Entwicklung Stelle ich mir im Moment so vor:
Erstmal die Komponente so weit bekommen das sie mit einem einfachen Memo vergleichbar ist.
D.H. folgende Funktionen möchte ich noch hinzufügen:
Scrollen, Markieren, Undo/Redo, Suchen/Ersetzten, drucken
Sobald das alles Fertig ist möchte ich eine RichEdit ähnliche Komponente machen.
D.h. Farben sollen im Text Geändert werden können. Dafür ist schon vorgesorgt. Im Moment fällt einfach nur eine weitere Klasse dafür.
Wenn ich das so weit habe möchte ich noch eine art SynEdit Komponente drauß machen. D.H. Ich möchte Soruce higleiten können wobei ich versuchen möchte au UniSyn zurückzugreifen, die können immerhin über 300 Sprachen verstehen.
Wenn ich das soweit habe möchte ich eine weitere Komponente erstellen die mit der RichEdit Komponente von Delphi kompatibel ist.
Wie weit ich kommen werde weiß ich nicht. Ich versuche schon zimlich lange so eine Komponente zu erstellen.
Dieser Ansatzt ist jetzt MEIN vielversprechender Ansatzt den ich je gehabt habe.
Bis jetzt konnte ich fast alle Probleme gut lösen.
Es gibt aber leider noch einige Da Stellungs Probleme. Die ich in den nächsten Tagen wohl in den Griff bekommen werde.
Bei jedem neuen Hochladen wird sich die letzte stelle der Version ändern.
Viel Spaß beim Testen. Gespeichert wird eigentlich nix. Es sei den ihr drückt auf F3 dann wird der Text abgespeichert in einer Extra Datei also nicht in der gleichen.
Die Einstellungen werden noch nicht gespeichert. Werde ich aber evlt. hinzufügen.
Ich hoffe ich bekomme von euch Vorschläge, Tipps, und natürlich ernst gemeinte Kritik.
Wenn ihr was über den aufbau der Komponente wissen möchtet, müsst ihr es nur sagen.
Dann lade ich den Soruce Code hoch, und erkläre wie der Editor Intern arbeitet. Es ist nur ein Versuch. Aber ein Versuch der Spaß macht. Ich denke das ist das wichtiges ein Projekt muss Spaß machen und es muss immer weiter gehen. Sonst schläft es ein.
Edit00: Dienstag, 08.April.2008
Titel nach dem Vorschlag von theo angepasst !
Edit01: Montag, 12.Mai.2008
Da ich Probleme mit dem Scrollen habe, habe ich ein kleines Test Projekt vorbereitet, wegen dem Scrollen.
Ich hoffe das einer von euch sich überwinden kann dort die Scroll Funktion einzubauen.
Das währe richtig Toll. Denn die gleiche Technik könnte ich auch bei meiner Listbox hinzufügen.
Es würde auch reichen erstmal nur Vertikales Scrollen oder Horizontales Scrollen. oder halt beides, je nach dem.
Ich möchte gerne so ein Scorll Verhalten haben wie die SynEdit Komponenten und wie z.b. der Windows Editor Notepad oder der Linux Editor GEdit haben.
Mein Problem dabei ist das anpassen der Scrollbalken, sobald die Cursor Position gesetzt wird(der Blickende Strich den man bewegen kann mit den Pfeiltasten und der Maus).
Diese Bitte habe ich auch heute im DelphiGL Forum gepostet:
http://www.delphigl.com/forum/viewtopic ... 2453#62453" onclick="window.open(this.href);return false;
Ich dachte mir da soviel zeit verstrichen ist, kann das nicht schaden. Und sobald sich jemand meldet werde ich es dort in meinem Ersten Beitrag posten.
Edit02, Dienstag den 06.Januar.2009
Habe das Projekt ende letzten Jahres komplett neu angefangen. Hier einige Gründe die zu diesem Entschloss geführt haben:
01 - Code zu unsauber
02 - Schlechte Einteilung. >> Das Kern Projekt war nicht OOP Kompatibel
03 - Viele zu viele "Baustellen". Ich hatte die Übersicht darüber verloren was jetzt geht und was nicht
04 - "Baustellen/Bereiche" Angefangen die noch gar nicht dran sind.
04 - Textverwaltung.
Das neue Projekt ist zwar noch nicht so weit wie das alte aber immerhin, gibt es Fortschritte.
Diese 05 Gründe haben dazu geführt das ich das Projekt neu angefangen habe. Ich denke es hat sich gelohnt:
Das Projekt ist im Moment in drei Units aufteilt. Es gibt Pro Unit eine Klasse.
01. - uPLEdit / TPLEdit
Hauptklasse. Sie leitet die User Anfragen weiter. Mit dieser Klasse wird der User es "nur" noch zu tun haben. TPLEdit ist direkt von TCustomControl abgeleitet.
Eine Absracte Bases Klasse für den "TextBuffer". Diese Klasse enthält Buchstäblich alle Methoden die mit dem TextBuffer zu tun haben. Ein kleiner Auszug aus dem Code:02. - uPLEdit_TextBuffer_Base / TPLEdit_TextBuffer_Base
Code: Alles auswählen
procedure Move_Caret_Left(aShift:TShiftState); Virtual; Abstract;
procedure Move_Caret_Right(aShift:TShiftState); Virtual; Abstract;
procedure Move_Caret_Top(aShift:TShiftState); Virtual; Abstract;
procedure Move_Caret_Bottom(aShift:TShiftState); Virtual; Abstract;
procedure Move_Caret_LineEnd(aShift:TShiftState); Virtual; Abstract;
procedure Move_Caret_LinePos1(aShift:TShiftState); Virtual; Abstract;
procedure Move_Caret_PageLineDown(aShift:TShiftState); Virtual; Abstract;
procedure Move_Caret_PageLineUP(aShift:TShiftState); Virtual; Abstract;
procedure Sel_All; Virtual; Abstract;
procedure Edit_InsertChar(const aKey:TUTF8Char); Virtual; Abstract;
procedure Edit_BackChar(aShift:TShiftState); Virtual; Abstract;
procedure Edit_DeletetChar(aShift:TShiftState); Virtual; Abstract;
procedure Edit_NewLine; Virtual; Abstract;
procedure Edit_Copy(const aStrList:TStrings=nil); Virtual; Abstract;
procedure Edit_Cut; Virtual; Abstract;
procedure Edit_Paste Virtual; Abstract;
03. - uPLEdit_TextBuffer_StringList / TPLEdit_TextBuffer_StringList
Eine TextBuffer Klasse die von "TPLEdit_TextBuffer_Base" abgeleitet ist und eine StringList beinhaltet.
Das sind die drei Hauptklassen. Es werde noch weitere Units/Klassen folgen.
Diese Aufteilung den Primären Vorteil das ich verschiedene TextBuffer Klassen einbauen kann mit der Zeit. Z.B. meine PLLineList. Die es ermöglich Bunten Formatierten Text verwalten und auch Zeichen kann. Z.B. Währe es auch denkbar das der nächste TextBuffer mit Unterschiedlich große Buchstaben(Chars) umgehen kann.
Ich habe mir eine "aufgaben" liste erstellen um die Übersicht zu behalten was geht und was noch nicht geht. In der Liste sind über 35 Verschiedene Aufgaben. Mein Primäres Ziel ist es ersteinmal eine Standard Editor Komponente zu Entwickeln. Vergleichbar mit dem Memo. Im nächsten schritt lege ich die Grundlagen für den dritten Schritt.
Die Aufgabenliste ist in Phasen aufgeteilt. Da das Projekt nach sehr früh am Anfang ist gibt es noch nichts vorzuweisen. Außer das viele Aufgaben aus der ersten Phase schon eigentlich ganz gut Funktionieren.
Noch einmal meine Gründe für das Projekt:
01 - Weil ich dazu in der Lage bin.
02 - Weil ich z.b. viele Möglichkeiten einbauen möchte mit den man den Text Hintergrund gestalten kann. Z.B. ein Farbverlauf, eine Hintergrund Grafik,...
03 - Weil ich schon lange(Mehrer Jahre) den Wunsch habe so eine Komponente zu erstellen
04 - Weil es in Lazarus noch nicht viele Allativen gibt. Schaut euch mal im Editor Bereich in Delphi um. Dort gibt es recht viele....
05 - Weil es unter anderem auch Spaß macht. Warum schreibt jemand ein Snake Clone ? Davon gibt doch schon zig Tausende ? Genauso wie ein Supermario Clone, warum schreibt jemand seine eigene Programmiersprache ? Es gibt mehr als genug aus den man eine wählen kann/könnte
Ich denke jeder von uns hat seine eigenen Interessen beim Programmieren. Egal was er oder sie auch schreibt. Der eine schreibt lieber Spiele der andere lieber normale Anwender Software. Außerdem schreiben glaube ich die wenigsten die Programme 1 zu 1 genauso wie es das Vorbild tut. Es werden immer kleine Erweiterungen eingebaut, kleine oder große sachen die sich verändert haben. Die den wünschen des Entwicklers entsprechen.
Sonst würde es keine Hobby Programmier geben. Da es ja schon für jede Aufgabe mind. ein Programm gibt. Meistens sonder noch viel mehr. Als man Überblicken kann.
Ich denke das jeder von uns sich Projekt Themen auswählt die einem Intrisieren. Neben den Wunsch eine Editor Komponente zu schreiben, habe ich aber noch andere Bereiche z.b. die Spiele Entwicklung. Früher Primär mit Canvas. Inzwischen versuche ich mich in SDL/OpenGL/Andorra einzuarbeiten. Oder auch der Audio/Video Bereich. Es gibt einige Bereiche die mich sehr Intrisieren. Ich denke da sind wir alle gleich, oder ?
Ich nehme das verhalten von Gedit und das Verhalten von SynEdit mit in meinem Projekt auf.Z.b. ist mir dadurch aufgefallen das bei SynEdit STRG+ENTF(VK_DELETE) nicht geht. Aber STRG+BACK(VK_BACK) geht. Das ist Wortweise Löschen.
Zur Zeit versuche ich die Grundlagen Funktionen einzubauen. Ich hoffe mit dieser neuen Strategie bin ich in der Lage das Projekt soweit Fertig zu stellen das wir es nutzen können bzw. das es für un einen brauchbaren nutzen hat.
Ob das Projekt dann jemand nutzt oder nicht Spielt für mich keine Rolle. Ich denke für ein Vorhaben muss jeder selbst entscheiden welche Komponenten dafür geeignet sind. Jemehr es gibt desto schwieriger wird es natürlich. Aber auch desto Interessanter wird es.
Wenn ihr noch wünsche habt die ihr bei SynEdit/Memo vermisst und ich in der Lage bin diese Wünsche aufzunehmen werde ich es Natürlich versuchen.
Es kann auch gut sein das ich eure Wünsche ebenfalls schon einplane aber noch nicht erwähnt habe.
Eine Grobe Übersicht über geplante aufgaben:
Gatter
01 - Zeilenanzeige
02 - Sprungmarken Anzeige
03 - Codefolding
04 - Änderungen anzeigen(So wie neuerdings in SynEdit)
Tastenmanger
Der User soll über ein Config Dialog alle Funktionen mit einer Tasteversehen können. Es soll Tastenschmen geben.
Configdialog
Ein Standard Konfiguierungs Dialog, über das der User bequem die Möglichkeit hat die Komponente anzupassen. In den ersten Versionen soll es hauptsächlich der Optische Teile sein später auch noch andere z.b. der Tatenmanger soll hierdrin sein. Es soll Skinbar sein
Es soll umfassende Möglichkeit geben einen geladenen Text auszudrucken.
Syntax Hervorhebung
Hier möchte ich wie schon oft erwähnt versuchen auf die uniSynEdit(Heißen die so) Dateien zu zurückzugreifen die XML Dateien habe ich schon in meinem Projekt Verzeichnis. So währe ich in der Lage auf einem Schlag über 300 Sprachen zu unterstützen.
Suchen, Ersetzen
Neben den Standard Funktionen, soll es auch möglich sein mit "reguläre Ausdrücke" zu suchen und zu ersetzten.
Ausführbare Anwendungen, den Soruce-Code, ein Screenshot sowie den Entwicklungsplan(Die Aufgabenliste) gibt es zu einem späteren Zeitpunkt oder auf Nachfrage.
Edit03: Freitag den 09.Januar.2009
Im Anhang findet ihr eine PDF Datei mit meinen Aufgaben die ich hier lösen möchte. Ich habe mir bevor ich neu angefangen habe eine Komplette Aufgaben Liste erstellen bzw, komplett ist sie noch lange nicht aber mit den Grundlagen aufgaben. Die Aufgaben sind in Phasen unterteilt. Jede Phase enthält jetzt ein Aufgaben Set.
In Jeder Aufgabe steht jetzt auch der Aufgaben Name, der Status und soweiter drin. So habe ich eine Übersicht über das was Fertig ist und was noch nicht. Weil sowas gerät schnell in Vergessenheit. Die Liste ist noch lange nicht "Fertig" aber schonmal ein kleiner Anfang würde ich sagen.
Wenn ihr noch Vorschläge habt für Aufgaben die in "Phase 1 - Grundlagen" rein gehören könnt ihr sie gerne Posten. Auch wenn ihr nicht ganz sicher seit.
Welche Aufgaben in "Phase 2" kommen und wie "Phase 2" heißt bzw. welchen Schwerpunkt setzt weiß ich noch nicht. Da "Phase 1" noch nicht Fertig ist. Ich gehe jetzt auch anders an das Projekt ran: Erstmal wirklich "nur" die WICHTIGEN Aufgaben. Die Wirklich an der Reihe sind.
Ich glaube mit dieser Taktik könnte ich es wirklich schaffen. Da es hier im Moment das Thema UTF8 und CO sehr "IN" ist, werde ich natürlich den Code entsprechen anpassen sobald die Themen "Abgeschlossen" sind . Im Code verwende ich eigentlich nur "WideString"
Edit04, Mittwoch der 28.Januar.2009
Das Projekt kommt gut voran. Das Markieren ist zu 95% Fertig, genau so wie die Undo und Reundo Funktion. Jeweils auch zu 95%. Die letzten 5% sind nicht so einfach hinzubekommen. Außerdem gibt es eine Doppeltklick Funktion für Wörter.
"Phase 1", nähert sich langsam aber sicher zum Ende. Es werden täglich immer weniger Aufgaben. Bevor ich den Soruce-Code hochlade möchte ich jedoch die Komponente ausreichend Testen um Fehler und Bugs zu aufzuspüren und zu elemenieren. Ich denke mit diesem Konzept müsste ich es eigentlich schaffen.
Mein Ziel zu erreichen. Hoffe ich. Bald gibt es auch ein Aktualisieren Entwicklungs Plan.