Aktuelle Zeit: 19.06.2019 16:42

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: [Module] EditorEx (Custom Editor Gadget)
BeitragVerfasst: 14.11.2018 10:38 
Offline
Benutzeravatar

Registriert: 04.02.2005 15:40
Wohnort: Kaufbeuren
Für ein plattformübergreifendes Projekt musste ich für die erweiterten Funktionen die Windows API-Befehle umgehen.
Die einzige wirklich praktikable Lösung war ein eigenes Editor Gadget zu erstellen:

Extended EditorGadget Module

  • Automatischer Zeilenumbruch & Silbentrennung
  • 'Weiches' Trennzeichen bzw. bedingter Trennstrich
  • Manueller Zeilenumbruch für WordWrap/Silbentrennung (Return bzw. Ctrl-Return bei vorhandenem automatischen Umbruch)
  • Fließtext für automatische Silbentrennung und WordWrap
  • Undo / Redo
  • Einfache Syntax-Hervorhebung (z.B. für Rechtschreibkontrolle)
  • (Automatische) Rechtschreibkontrolle (Highlighting u./o. Liste mit falschen Wörtern)
  • Automatisches Ausblenden der Scrollbars

Code:
;{ ===== Module Commands =====

  ; EditEx::AddItem()                - Add text row at 'Position' (or #FirstRow / #LastRow)
  ; EditEx::AddToUserDictionary()    - Add a new word to user dictionary
  ; EditEx::AddWord()                - Add word to syntax highlighting
  ; EditEx::AttachPopup()            - Attach 'PopUpMenu' to gadget
  ; EditEx::ClearWords()             - Delete the list with the words for syntax highlighting
  ; EditEx::ClearUndo()              - Delete the list with Undo/Redo steps
  ; EditEx::Copy()                   - Copy selected text to clipboard
  ; EditEx::Cut()                    - Cut the selected text and copy it to the clipboard
  ; EditEx::DeleteSelection()        - Delete selected text (Remove selection: #True/#False)
  ; EditEx::DeleteWord()             - Delete word from syntax highlighting
  ; EditEx::EnableAutoSpellCheck()   - Activate automatic spelling correction
  ; EditEx::EnableSyntaxHighlight()  - Enable syntax highlighting (#False/#CaseSensitiv/#NoCase)
  ; EditEx::EnableUndoRedo()         - Enable 'Undo/Redo' function (#True/#False)
  ; EditEx::FreeDictionary()         - Removes the loaded dictionary from memory
  ; EditEx::GetAttribute()           - Returns value of attribute (#ReadOnly/#WordWrap/#Hyphenation/#AutoHide/#Border/#CtrlChars)
  ; EditEx::GetColor()               - Returns color of attribute (#FrontColor/#BackColor/#SyntaxColor/#SelectionColor)
  ; EditEx::GetItemText()            - Returns text row at 'Position'
  ; EditEx::GetSelection()           - Returns selected text (Remove selection: #True/#False)
  ; EditEx::GetText()                - Returns all text rows seperated by 'Seperator'
  ; EditEx::InsertText()             - Insert text at cursor position (or replace selection)
  ; EditEx::IsRedo()                 - Checks if an redo is possible
  ; EditEx::IsSelected()             - Returns whether a selection exists
  ; EditEx::IsUndo()                 - Checks if an undo is possible
  ; EditEx::LoadDictionary()         - Load the dictionary for spell checking
  ; EditEx::LoadHyphenationPattern() - Load hyphenation pattern for selected language (#Deutsch/#English/#French)
  ; EditEx::Redo()                   - Perform Redo
  ; EditEx::ReDraw()                 - Redraw the gadget
  ; EditEx::RemoveGadget()           - Releases the used memory and deletes the cursor thread
  ; EditEx::Paste()                  - Inserting text from the clipboard
  ; EditEx::SaveUserDictionary()     - Save user dictionary
  ; EditEx::SetAttribute()           - Enable/Disable attribute (#ReadOnly/#WordWrap/#Hyphenation/#AutoHide/#Border/#CtrlChars)
  ; EditEx::SetColor()               - Set or change color of attribute (#FrontColor/#BackColor/#SyntaxColor/#SelectionColor)
  ; EditEx::SetFont()                - Set or change font FontID(#Font)
  ; EditEx::SetItemText()            - Replace text row at 'Position'
  ; EditEx::SetText()                - Set or replace all text rows
  ; EditEx::SpellCheck()             - Checks the spelling of the word (returns: #True/#False)
  ; EditEx::SpellChecking()          - Check the spelling in the editor gadget (#Highlight/#WrongWords)
  ; EditEx::Undo()                   - Perform Undo
  ; -----------------------
  ; EditEx::Gadget()                 - Creates an editor gadget
  ; -----------------------

;} ===========================


Download: EditorExModule.pbi (mit Hyphen-Pattern & Wörterbuch)

Download: Sprachpakete

_________________
Meine PureBasic-Projekte:
EasySetup - Setups für eigene Programme erstellen
___________________________________________
[Windows 10 x64] | [PB V5.7x]
Bild


Zuletzt geändert von Thorsten1867 am 04.04.2019 19:27, insgesamt 12-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Module] EditorEx (Custom Editor Gadget)
BeitragVerfasst: 14.11.2018 21:20 
Offline
Benutzeravatar

Registriert: 10.09.2004 09:59
Puuh ein EditorGadget mit einem CanvasGadget... darüber hatte ich auch mal (kurz) nachgedacht, aber da gab es mir ehrlich gesagt viel zu viele Stolpersteine.
Mit Deiner Version hier sind mir bei einem kurzen Test die folgenden Merkwürdigkeiten aufgefallen:

  • Setze den Cursor hinter das letzte Zeichen einer Zeile (mit der Maus!), und drücke "DEL" ->die ganze Zeile wird gelöscht, anstatt das letzte Zeichen
  • Setze den Cursor an die letzte Stelle hinter "Affenschar" mit der Maus und drücke Enter -> keine neue Zeile, der Cursor springt an den Anfang besagter Zeile
  • Wenn ich ein paar Leerzeilen am Ende habe und den Cursor in die letzte (leere) Zeile bewege, kann ich per Enter keine neuen Zeilen mehr erzeugen
  • Diese Fehler hier hatte ich auch mal, weiss gerade nicht mehr, wie ich sie heraufbeschworen habe:
    Zitat:
    [20:07:02] [ERROR] EditorEx.pbi (Zeile: 1889)
    [20:07:02] [ERROR] SelectElement(): SelectElement(): Index-Wert kann nicht negativ sein.

    und
    Zitat:
    [20:11:00] [ERROR] EditorEx.pbi (Zeile: 1719)
    [20:11:00] [ERROR] Die Liste hat kein aktuelles Element.
  • Doppelklicke unterhalb der letzten Zeile mit "Affenschar" ->
    Zitat:
    [20:24:17] [ERROR] EditorEx.pbi (Zeile: 1936)
    [20:24:17] [ERROR] Die Liste hat kein aktuelles Element.
  • Füge ein paar Leerzeilen ans Ende dazu (bis sie ausserhalb des sichtbaren sind), dann gehe per Cursor-Up mit dem Cursor nach oben -> Da ist kein Cursor mehr
    (übrigens sollte der Text hier auch nach oben herausscrollen)

_________________
Link tot?
Ändere h3x0r.ath.cx in hex0rs.coderbu.de und alles wird gut.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Module] EditorEx (Custom Editor Gadget)
BeitragVerfasst: 15.11.2018 10:21 
Offline
Benutzeravatar

Registriert: 04.02.2005 15:40
Wohnort: Kaufbeuren
Du hast völlig recht, so ein Editor Gadget ist wirklich tückisch und hat mich schon einige Nerven gekostet mit plötzlich auftretenden seltsamen Phänomen.

Ich versuche deinen Beobachtungen auf den Grund zu gehen.

_________________
Meine PureBasic-Projekte:
EasySetup - Setups für eigene Programme erstellen
___________________________________________
[Windows 10 x64] | [PB V5.7x]
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Module] EditorEx (Custom Editor Gadget)
BeitragVerfasst: 15.11.2018 13:39 
Offline
Benutzeravatar

Registriert: 04.02.2005 15:40
Wohnort: Kaufbeuren
Ich hoffe, ich habe alle Bugs erwischt:

Code:
;{ ----- History -----
  ; [15/11/18] Bugfixes (Linked List/Return/Cursor)
;} -------------------

_________________
Meine PureBasic-Projekte:
EasySetup - Setups für eigene Programme erstellen
___________________________________________
[Windows 10 x64] | [PB V5.7x]
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Module] EditorEx (Custom Editor Gadget)
BeitragVerfasst: 15.11.2018 22:32 
Offline
Benutzeravatar

Registriert: 10.09.2004 09:59
Wird besser!
Damit Dir nicht langweilig wird:
  • Schiebe (in Deinem Beispiel) die Scrollbar ganz nach rechts, um das letzte Wort zu sehen, platziere den Cursor mit der Maus ganz hinten und drücke Enter -> Die Scrollbar sollte wieder nach links rücken und der Text sich entsprechend verschieben
    Bewege ich danach den Cursor mit Pfeil-Links, bewegt er sich aus dem Sichtfeld.
  • Setze den Cursor mit der Maus nach Affen, drücke Enter. -> Erst mal der Effekt von oben, das "schar" sieht man nicht. Aber ich würde erwarten einmal "Entf" zu drücken, würde die "schar" wieder herholen, ich muss aber zweimal drücken
  • Füge einige Leerzeilen ans untere Ende ein, und klicke in eine beliebige leere Zeile -> Der Cursor ist ein Zeichen zu weit rechts, und ich muss auch wieder zweimal Pfeil links drücken, um an den Rand zu kommen.
  • Selbes Beispiel, diesmal doppelklicken auf eine beliebige leere Zeile -> der Cursor verschwindet, bei einem Editor sollte der Cursor eigentlich nie verschwinden oder aus dem sichtbaren Bereich entschwinden
  • Kopiere die ersten beiden Zeilen und füge sie ans Ende ein -> Der Zeilenumbruch ist verschwunden.

Wenn's Dich nervt höre ich auf, im Moment würde ich das eh nicht brauchen, aber hier und da hätte ich sicherlich Verwendung dafür.
Aber dann sollte es sich schon wie ein "echter" Editor anfühlen und verhalten.

_________________
Link tot?
Ändere h3x0r.ath.cx in hex0rs.coderbu.de und alles wird gut.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Module] EditorEx (Custom Editor Gadget)
BeitragVerfasst: 22.11.2018 15:31 
Offline
Benutzeravatar

Registriert: 04.02.2005 15:40
Wohnort: Kaufbeuren
Nachdem ich mich tagelang mit der Selektion mittels Cursor-Tasten (v.a. hoch/runter) herumgeschlagen habe und "nur knapp dem Wahnsinn entronnen bin", hier ein neues Update zum Testen.
(Wer weiß, vielleicht gibt es ja noch eine Ausnahme bei der Selektion, die mir bisher entgangen ist. Also bitte gründlich testen.)

Code:
;{ ----- History -----
; [22/11/18] Syntax highlighting improved / Selection and cursor routines completely revised / Problems with unvisible control characters fixed
;} -------------------

; EditEx::EnableSyntaxHighlight() - Enable syntax highlighting (#False/#CaseSensitiv/#NoCase)
; EditEx::AddWord()               - Add word To syntax highlighting
; EditEx::DeleteWord()            - Delete word from syntax highlighting
; EditEx::ClearWords()            - Delete the list with the words for syntax highlighting
; EditEx::SetColor()              - Set or change color of attribute (#FrontColor/#BackColor/#SelectionColor/#SyntaxColor)
; EditEx::GetColor()              - Returns color of attribute (#FrontColor/#BackColor/#SelectionColor/#SyntaxColor)


Zitat:
Kopiere die ersten beiden Zeilen und füge sie ans Ende ein -> Der Zeilenumbruch ist verschwunden.

Das ist beabsichtigt (wg. WordWrap). Man kann nachträglich aber einen 'manuelle Zeilenumbruch' (Return bzw. Ctrl-Return) einfügen, die mitkopiert werden sollten.

_________________
Meine PureBasic-Projekte:
EasySetup - Setups für eigene Programme erstellen
___________________________________________
[Windows 10 x64] | [PB V5.7x]
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Module] EditorEx (Custom Editor Gadget)
BeitragVerfasst: 23.11.2018 19:03 
Offline
Benutzeravatar

Registriert: 04.02.2005 15:40
Wohnort: Kaufbeuren
Rechtschreibkontrolle hinzugefügt

Code:
; EditEx::LoadDictionary()         - Load the dictionary for spell checking
; EditEx::SpellCheck()             - Checks the spelling of the word (returns: #True/#False)
; EditEx::SpellChecking()          - Check the spelling in the editor gadget (#Highlight/#WrongWords)

_________________
Meine PureBasic-Projekte:
EasySetup - Setups für eigene Programme erstellen
___________________________________________
[Windows 10 x64] | [PB V5.7x]
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Module] EditorEx (Custom Editor Gadget)
BeitragVerfasst: 24.11.2018 20:29 
Offline
Benutzeravatar

Registriert: 04.02.2005 15:40
Wohnort: Kaufbeuren
Code:
; [24/11/18] WordWrap and Hyphenation revised & Bugfixes

Benutzer-Wörterbuch:
Code:
; EditEx::AddToUserDictionary()    - Add a new word to user dictionary
; EditEx::SaveUserDictionary()     - Save user dictionary

_________________
Meine PureBasic-Projekte:
EasySetup - Setups für eigene Programme erstellen
___________________________________________
[Windows 10 x64] | [PB V5.7x]
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Module] EditorEx (Custom Editor Gadget)
BeitragVerfasst: 02.12.2018 15:26 
Offline
Benutzeravatar

Registriert: 04.02.2005 15:40
Wohnort: Kaufbeuren
Update:
  • Fließtext für automatische Silbentrennung und WordWrap
  • ResizeHandler (z.B. automatische Anpassung der Scrollbars)
  • zahlreiche Bugfixes
Code:
[02/12/18] Continuous text for hyphenation and wordwrap & many Bugfixes[02/12/18] Continuous text for hyphenation and wordwrap & Resize Handler & many Bugfixes

_________________
Meine PureBasic-Projekte:
EasySetup - Setups für eigene Programme erstellen
___________________________________________
[Windows 10 x64] | [PB V5.7x]
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Module] EditorEx (Custom Editor Gadget)
BeitragVerfasst: 03.12.2018 18:53 
Offline
Benutzeravatar

Registriert: 04.02.2005 15:40
Wohnort: Kaufbeuren
Code:
[03/12/18] Syntax highlighting revised & Bugfixes

_________________
Meine PureBasic-Projekte:
EasySetup - Setups für eigene Programme erstellen
___________________________________________
[Windows 10 x64] | [PB V5.7x]
Bild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye