[B3D] [Draw3D] Eingabefeld (Dialog) mit Syntaxhighlighting
Übersicht

![]() |
FireballFlameBetreff: [B3D] [Draw3D] Eingabefeld (Dialog) mit Syntaxhighlighting |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallihallo!
Für den Mapeditor, den ich für unser Spieleprojekt geschrieben habe, brauchte ich einen Eingabedialog, in dem ich sowohl einzelne Zahlen/Namen als auch ganze Skriptcodes schreiben kann. Da ich im Codearchiv und auch sonstwo keinen fand, der meinen Ansprüchen genügte, schrieb ich selbst einen und stelle ihn nun hier zur Verfügung. Er lässt sich in zwei verschiedenen Modi aufrufen: "einfach" und "komplex". Features:
Benutzung: Die Textbox benutzt und benötigt hectics Draw3D, da die (/das) GUI meines Mapeditors darauf basiert. Die bekannte blitzsys.dll ist nicht unbedingt erforderlich, ermöglicht aber das Benutzen der Windows-Zwischenablage und eine Sicherheitsabfrage vor dem Schließen das Feldes. Die Kernfunktion des Eingabefeldes ist die folgende: Code: [AUSKLAPPEN] Eingabefeld(Titel$,Standardtext$,Modus,PosX#,PosY#,BreiteZ,HoeheZ,StartposX#,StartposY#)
Für den einfachen Modus reicht als Aufruf der Code: [AUSKLAPPEN] rueckgabewert$=Eingabefeld(Titel$) Zurückgegeben wird bei Bestätigung (Eingabetaste) der Inhalt des Textfeldes und bei Abbruch (ESC) der Inhalt von Standardtext (ein leerer String, falls nicht angegeben).
Für den komplexen Modus sieht ein Aufruf so aus: Code: [AUSKLAPPEN] Eingabefeld_clear
In diesem Fall wird bei Bestätigung der Änderungen (ESC) 1 zurückgegeben, bei Abbruch (auch ESC, geht aber nur mit blitzsys.dll) 0. Den Inhalt der Textbox muss man dann selbst aus dem Type "EingabefeldZeile" auslesen.
Eingabefeld_addZeile Null,Zeile1$ Eingabefeld_addZeile Null,Zeile2$ ; ... rueckgabewert=Eingabefeld(Titel$,"",1) Vor dem Aufruf der Hauptfunktion sollte das Eingabefeld mit "Eingabefeld_clear" geleert und anschließend, wenn es beim Öffnen Text enthalten soll, mit "Eingabefeld_addZeile" gefüllt werden. Der 1. Parameter dieser Funktion gibt an, vor welcher Zeile die neue Zeile hinzugefügt werden soll; statt Null (=ganz am Ende) kann man hier auch einen Typeeintrag vom Typ .EingabefeldZeile angeben ("Eingabefeld_addZeile" gibt immer einen solchen zurück), um eine Zeile oben oder irgendwo in der Mitte einzufügen. Bereits bestehende Zeilen können mit der Funktion "Eingabefeld_modifyZeile(Zeile.EingabefeldZeile,neuer_Text$)" geändert oder mit "Delete Zeile.EingabefeldZeile" gelöscht werden. Alles was man sonst noch wissen muss, dürfte aus dem oberen Teil der Quelltext-Datei hervorgehen. Download: Ohne passende Draw3D-Texturen geht natürlich nix, deshalb hier das ganze als handliches kleines Archiv mit Testprogramm: https://www.blitzforum.de/upload/file.php?id=6201 Bugmeldungen und Feedback sind natürlich willkommen! ![]() Und da wir hier im Codearchiv sind, gibts auch noch den puren Quelltext: Eingabefeld.bb Testprogramm Code: [AUSKLAPPEN] Include "Draw3D.bb" Include "Eingabefeld.bb" Graphics3D 1024,768,0,2 SetBuffer BackBuffer() Global cam=CreateCamera() DrawInit3D cam Origin3D 1024,768 ; <- Eingabefeld ist für 1024,768 optimiert Eingabefeld_Texturen_laden Print "Taste drücken für einfache Textbox..." WaitKey() Local rueckgabewert1$=Eingabefeld("Einfache Textbox","Standardtext") Locate 0,0 Print "Du hast "+Chr(34)+rueckgabewert1+Chr(34)+" eingegeben." Print "" Print "Taste drücken für komplexe Textbox..." WaitKey() Local datei=ReadFile("Eingabefeld - Beispielinhalt.txt") Eingabefeld_clear While Not Eof(datei) Eingabefeld_addZeile Null,ReadLine(datei) Wend Local rueckgabewert2=Eingabefeld("Komplexe Textbox","",1) Locate 0,0 If rueckgabewert2=1 Print "Der Inhalt der Textbox lautet nun wie folgt:" Print "" Local inhalt.EingabefeldZeile For inhalt=Each EingabefeldZeile Print inhalt\Text Next Else Print "Du hast die Eingabe abgebrochen." End If WaitKey() End |
||
- Zuletzt bearbeitet von FireballFlame am Mo, Okt 26, 2009 14:49, insgesamt 23-mal bearbeitet
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() Die Benutzung von Leerzeichen in der Auflistung von Funktionsparametern wäre nicht nur der Übersicht dienlich, sondern würde auch das hier vorliegende Foren-Layout-Problem lösen. Ich war mal so frei und hab ein paar eingefügt. |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
flona |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wow gute Performance ![]() Du könntest vll noch eine Rückgängig/Wiederholen Funktion mit einbauen, dann wärs perfekt. |
||
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich kann es leider nicht testen, sieht aber ganz gut aus (vom code her)
Was bei den meisten Eingabefeldern/routinen/gui's hier fehlt ist das man mit dem Tabulator ins nächste Feld springen kann, nur so als Tipp am Rande ![]() mfg |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Dee: Huch, gute Idee - ich dachte, das Codefeld kann keine Zeilenumbrüche, schließlich hat es ja nen horizontalen Scrollbalken ![]() @flona: Ne Rückgängig-Funktion ist nicht ganz einfach, aber ich überleg mir mal, wie man das machen könnte... @ozzi: Mein Eingabefeld ist nicht als GUI-Element gedacht, sondern als Dialogbox, d.h. es wird immer nur ein Exemplar zur gleichen Zeit angezeigt. Tabs kann man in das Feld eingeben, sie werden aber automatisch in eine passende Anzahl Leerzeichen umgewandelt. |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
![]() |
coolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wow! Fireballflame, du hast ja schon im Chat angekündigt, aber jetzt wos draußen ist ists noch besser! Jetzt kann man seinen Mapeditor mit einem komfortabeln Texteditor hinzufügen. | ||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Update!
Mir ist aufgefallen, dass das Öffnen eines Eingabefeldes mit viel Text aufgrund des Synaxhighlightings sehr lange dauerte. Deshalb habe ich folgende Optimierung vorgenommen: Das Syntaxhighlighting wird jetzt nicht mehr für das ganze Eingabefeld auf einmal berechnet, sondern nur noch für 1-3 Zeilen pro Hauptschleifendurchlauf; Zeilen, die gerade im Bild sind, haben dabei eine höhere Priorität als die anderen. Nun können auch sehr große Mengen an Text problemlos verarbeitet werden. (Ich hab mal Crysis.exe ausprobiert ... es lädt und läuft trotz Syntaxhighlighting und Debugger schneller als Microsoft Windows Notepad ![]() Das Highlighting im lässt sich jetzt übrigens auch mit einer globalen Variable abschalten. Ich habe den Quellcode sowohl in den Codetags als auch im Archiv aktualisiert. |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
![]() |
flona |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das wird ja immer besser ![]() Wäre es noch möglich in der CodeBox Zeilennummern anzuzeigen ![]() mfg Florian |
||
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, neue Version, auf Wunsch jetzt mit Zeilennummern.
Die Funktionen zum Löschen und Einfügen von Text habe ich auch nochmal überarbeitet, sie sind jetzt deutlich schneller als vorher. Ab fünfstelligen Zeilenzahlen wirds trotzdem lahm, aber soviel sollte man normalerweise nicht brauchen ![]() Außerdem hab ich einen Bug behoben, durch den das Einfügen von Text nicht richtig funktionierte, wenn dieser mit einem Zeilenumbruch endete. Die neue Version gibt es momentan nur als Download. Wenn ich den Code einfüge, wird der Beitrag in der Mitte abgeschnitten und ich weiß nicht, wieso ![]() Allerdings hab ich die Datei hier ins BBP-Archiv geladen, sodass der Download zeitlich uneingeschränkt verfügbar sein sollte. EDIT: Offenbar ist die Beitragslänge begrenzt o.O Der Code hat jetzt nen Extrapost... ![]() |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
- Zuletzt bearbeitet von FireballFlame am Mo, Jun 29, 2009 23:40, insgesamt 3-mal bearbeitet
![]() |
hamZtaAdministrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eingabefeld.bb Code: [AUSKLAPPEN] ; +-------------------------------+ ; | Eingabefeld von FireballFlame | ; +-------------------------------+ ; ----- Einstellungen: -------------------------------------------------------------------- Const Eingabefeld_BlitzSys_vorhanden = 0 ; Kann die blitzsys.dll genutzt werden? Function DLLMessageBox(m, i, a, u):End Function ; <-, Function DLLSetClipboardText(muh):End Function ; <-+- wenn ja, diese drei Zeilen auskommentieren Function DLLEZGetClipboardText():End Function ; <-' Const Eingabefeld_Texturpfad$ = "Eingabefeld - Texturen\" Const Eingabefeld_Schriftart_Datei$ = Eingabefeld_Texturpfad+"Eingabefeld_verdana1_mod.png" ; Schriftart Const Eingabefeld_Schriftskalierung# = 1.1 ; Darstellungsgrˆfle der Zeichen (SetFont3D) Global Eingabefeld_Zeichenbreite = 10 ; <-, _ diese beiden Werte m¸ssen angepasst werden, wenn die Global Eingabefeld_Zeichenhoehe = 18 ; <-' Schriftskalierung oder die Schriftart ge‰ndert wird Global Eingabefeld_Standardbreite_einfach = 40 ; Angabe in Zeichen Global Eingabefeld_Standardbreite_komplex = 80 ; Angabe in Zeichen Global Eingabefeld_Standardhoehe_komplex = 30 ; Angabe in Zeilen Global Eingabefeld_Animationsdauer_einfach = 100 ; Angabe in Millisekunden Global Eingabefeld_Animationsdauer_komplex = 250 ; Angabe in Millisekunden Global Eingabefeld_CursorBlinkgeschwindigkeit# = 1 ; Angabe in Hertz Global Eingabefeld_KeyRepeatDelay = 500 ; Zeit in Millisek. bis zum 2. Anschlag bei gedr¸ckt gehaltener Taste Global Eingabefeld_KeyRepeatInterval= 75 ; Zeit in Millisek. vom n. bis zum (n+1). Anschlag bei gedr¸ckt gehaltener Taste (n>=2) Global Eingabefeld_Tabbreite = 4 ; Grˆfle des maximalen Tabulator-Abstandes in Zeichen Global Eingabefeld_Zeilennummern = 1 ; Zeilennummern im komplexen Modus? Global Eingabefeld_Syntaxhighlighting = 1 ; Syntaxhighlighting im komplexem Modus? Global Eingabefeld_Syntaxhighlighting_CaseSensitive = -1 ; 1=Syntaxhighlights werden nur bei korrekter Grofl-/Kleinschreibung erkannt ; 0=Syntaxhighlights werden bei jeder Schreibweise erkannt ; -1=Syntaxhighlights werden bei jeder Schreibweise erkannt, aber die Grofl-/Kleinschreibung wird automatisch korrigiert Const EFSFarbe_normal =$10000*0 +$100*0 +0 ; Farbcodes nach dem Muster $10000*R +$100*G +B Const EFSFarbe_Datentyp =$10000*130 +$100*50 +170 Const EFSFarbe_Schluesselwort =$10000*0 +$100*40 +120 Const EFSFarbe_MathFunktion =$10000*70 +$100*120 +150 Const EFSFarbe_Funktion =$10000*80 +$100*40 +0 Const EFSFarbe_Operator =$10000*70 +$100*70 +70 Const EFSFarbe_Relation =$10000*70 +$100*70 +70 Const EFSFarbe_Klammer =$10000*70 +$100*70 +70 Const EFSFarbe_Sprungmarke =$10000*230 +$100*70 +70 Const EFSFarbe_String =$10000*50 +$100*180 +0 Const EFSFarbe_Kommentar =$10000*170 +$100*170 +0 Const EFSFarbe_keine = -1 ; keine Farbver‰nderung, nur Grofl-/Kleinschreibkorrektur Const EFSFarbe_Zeilennummer =$10000*180 +$100*180 +180 Const EFSFarbe_Auswahl =$10000*233 +$100*233 +100 Const EFSTyp_Wort = 1 ; "highlighted" den gesuchten String; aber nur, wenn er zwischen Trennzeichen steht Const EFSTyp_Wortteil = 2 ; "highlighted" den gesuchten String ¸berall, wo er gefunden wird Const EFSTyp_Kommentar = 3 ; "highlighted" alles vom gesuchten String bis zum Zeilenende Const EFSTyp_String = 4 ; "highlighted" alles bis einschliefllich zum n‰chsten Auftauchen des gesuchten Strings (oder Zeilenende) Const EFSTyp_Label = 5 ; "highlighted" alles bis zum n‰chsten Trennzeichen Global Eingabefeld_Trennzeichenliste$=":., ; +-*/%=!<>()\~^"+Chr(34) Function Eingabefeld_setSyntaxhighlights() ; Deklaration aller Syntaxhighlights - diese Funktion wird automatisch bei jedem ; ÷ffnen eines komplexen Eingabefeldes durchlaufen und kann auch jederzeit manuell ; aufgerufen werden; somit werden dynamische Syntaxhighlights ermˆglicht: z.B. ; kˆnnte man, f¸r das Schreiben von Skripten oder Quellcode, eine Suche nach ; Variablendeklarationen in die Funktion Eingabefeld_verarbeite_Zeile einbauen, ; alle gefundenen Variablen in einem Type speichern, und dann mit dieser Funktion ; alle Eintr‰ge des Types als Syntaxhighlights deklarieren... Eingabefeld_clearSyntaxhighlights ; ich habe hier zu Demonstrationszwecken mal einige BlitzBasic-Code-kompatible Highlights eingetragen: ; Programmablaufkontrolle Eingabefeld_addSyntaxhighlight "If" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Then" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Else" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "EndIf" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Select" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Case" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Default" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "While" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Wend" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Repeat" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Until" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Forever" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "For" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "To" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Step" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Each" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Next" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Exit" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight ". " , EFSFarbe_Sprungmarke, EFSTyp_Label Eingabefeld_addSyntaxhighlight "Goto" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Function" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Return" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Delay" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "End" , EFSFarbe_Schluesselwort ; Datentypen Eingabefeld_addSyntaxhighlight "%" , EFSFarbe_Datentyp, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "#" , EFSFarbe_Datentyp, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "$" , EFSFarbe_Datentyp, EFSTyp_Wortteil ; Variablendeklarationen Eingabefeld_addSyntaxhighlight "Global" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Const" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Local" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Type" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Field" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "New" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Delete" , EFSFarbe_Schluesselwort ; globale Konstanten Eingabefeld_addSyntaxhighlight "True" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "False" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Null" , EFSFarbe_Schluesselwort ; Bitoperatoren Eingabefeld_addSyntaxhighlight "Not" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "And" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Or" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Xor" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Shr" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Sar" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Shl" , EFSFarbe_Schluesselwort ; mathematische Funktionen Eingabefeld_addSyntaxhighlight "Mod" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Int" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Float" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Ceil" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Floor" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Abs" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Sgn" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Sqr" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Exp" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Log" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Log10" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Sin" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Cos" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Tan" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "ASin" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "ACos" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "ATan" , EFSFarbe_MathFunktion ; andere Funktionen Eingabefeld_addSyntaxhighlight "Graphics" , EFSFarbe_Funktion Eingabefeld_addSyntaxhighlight "SetBuffer" , EFSFarbe_Funktion Eingabefeld_addSyntaxhighlight "BackBuffer" , EFSFarbe_Funktion Eingabefeld_addSyntaxhighlight "Cls" , EFSFarbe_Funktion Eingabefeld_addSyntaxhighlight "Print" , EFSFarbe_Funktion Eingabefeld_addSyntaxhighlight "LoadImage" , EFSFarbe_Funktion Eingabefeld_addSyntaxhighlight "DrawImage" , EFSFarbe_Funktion Eingabefeld_addSyntaxhighlight "Flip" , EFSFarbe_Funktion Eingabefeld_addSyntaxhighlight "WaitKey" , EFSFarbe_Funktion ; sonstiges Eingabefeld_addSyntaxhighlight "+" , EFSFarbe_Operator, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "-" , EFSFarbe_Operator, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "*" , EFSFarbe_Operator, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "/" , EFSFarbe_Operator, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "^" , EFSFarbe_Operator, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "=" , EFSFarbe_Relation, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight ">" , EFSFarbe_Relation, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "<" , EFSFarbe_Relation, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "(" , EFSFarbe_Klammer, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight ")" , EFSFarbe_Klammer, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "\" , EFSFarbe_Operator, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight Chr(34) , EFSFarbe_String, EFSTyp_String Eingabefeld_addSyntaxhighlight ";" , EFSFarbe_Kommentar, EFSTyp_Kommentar End Function Function DrawCursor() ; wenn HidePointer angewandt wurde oder das Programm im Vollbildmodus l‰uft, muss in dieser ; Funktion der Mauszeiger gezeichnet werden (ob mit DrawImage oder DrawImage3D ist egal) End Function ; ----------------------------------------------------------------------------------------- ;[Block] interne Variablen Global Eingabefeld_hgpixel Global Eingabefeld_hgpanel Global Eingabefeld_feldtex Global Eingabefeld_scrollbutton Global Eingabefeld_scrollpfeil Global Eingabefeld_pixel Global Eingabefeld_schriftart Global Eingabefeld_screencap Global Eingabefeld_Timer=CreateTimer(60) Global Eingabefeld_Trennzeichenliste_Len Global Eingabefeld_ScrollX#, Eingabefeld_ScrollY# Global Eingabefeld_ScrollMaus=0 ; f¸r das Verschieben das Scrollbalkens mit der Maus; 1=horizontal, 2=vertikal Global Eingabefeld_horizScrollbalkenbreite#, Eingabefeld_vertScrollbalkenhoehe# Type EingabefeldZeile Field Text$ Field Len Field Text_mit_Farbcodes$ End Type Global Eingabefeld_CursorS, Eingabefeld_CursorZ ; Spalte und Zeile, Beginn bei 1 Global Eingabefeld_lastCursorS, Eingabefeld_lastCursorZ Global Eingabefeld_AuswahlAS, Eingabefeld_AuswahlAZ ; Startpunkt der Markierung; 0=keine Markierung Global Eingabefeld_AuswahlES, Eingabefeld_AuswahlEZ ; Endpunkt der Markierung; 0=keine Markierung Global Eingabefeld_CursorBlink# ; >=0 und <2, bei >=1 ist der Cursor sichtbar Global Eingabefeld_Mausaktion Global Eingabefeld_lastMillisecs Global Eingabefeld_komplex Global Eingabefeld_Clipboard$="" Global Eingabefeld_Verarbeitung.EingabefeldZeile Dim Eingabefeld_KeyDown(237) ; speichert in Millisekunden, wie lange die Taste schon gedr¸ckt gehalten wurde Type EingabefeldSyntaxhighlight Field Text$ Field Farbcode Field Typ End Type ;[End Block] Function Eingabefeld$(Titel$, Standardtext$="", Modus=0, PosX#=0, PosY#=0, BreiteZ=-1, HoeheZ=-1, StartposX#=-9999929, StartposY#=-9999929) If StartposX=-9999929 Then StartposX=MouseX3D If StartposY=-9999929 Then StartposY=MouseY3D Eingabefeld_komplex=Modus Eingabefeld_Auswahl_aufheben Eingabefeld_CursorS=1:Eingabefeld_CursorZ=1 Eingabefeld_Trennzeichenliste_Len=Len(Eingabefeld_Trennzeichenliste) If Eingabefeld_komplex Eingabefeld_setSyntaxhighlights If First EingabefeldZeile=Null Then Eingabefeld_addZeile Null, "" Local uz.EingabefeldZeile:For uz=Each EingabefeldZeile:Eingabefeld_verarbeite_Zeile uz:Next ;[Block] Cursor ins Textfeld setzen, falls auflerhalb Local s_z_anz_z.EingabefeldZeile=First EingabefeldZeile, s_z_anz=0 While s_z_anz_z<>Null s_z_anz=s_z_anz+1 s_z_anz_z=After s_z_anz_z Wend If Eingabefeld_CursorZ>s_z_anz Then Eingabefeld_CursorZ=s_z_anz If Eingabefeld_CursorZ<1 Then Eingabefeld_CursorZ=1 If Eingabefeld_CursorS>Eingabefeld_getZeilenlaenge(Eingabefeld_CursorZ)+1 Then Eingabefeld_CursorS=Eingabefeld_getZeilenlaenge(Eingabefeld_CursorZ)+1 If Eingabefeld_CursorS<1 Then Eingabefeld_CursorS=1 If Eingabefeld_AuswahlAS=0 And Eingabefeld_AuswahlAZ=0 And Eingabefeld_AuswahlES=0 And Eingabefeld_AuswahlEZ=0 Then Eingabefeld_Auswahl_aufheben ;[End Block] If BreiteZ=-1 Then BreiteZ=Eingabefeld_Standardbreite_komplex If HoeheZ=-1 Then HoeheZ=Eingabefeld_Standardhoehe_komplex Else Eingabefeld_clearSyntaxhighlights Eingabefeld_clear Eingabefeld_addZeile Null, Standardtext Eingabefeld_AuswahlAS=1 Eingabefeld_AuswahlAZ=1 Eingabefeld_AuswahlES=Len(Standardtext)+1 Eingabefeld_AuswahlEZ=1 Eingabefeld_CursorS=Eingabefeld_AuswahlES Eingabefeld_CursorZ=Eingabefeld_AuswahlEZ If BreiteZ=-1 Then BreiteZ=Eingabefeld_Standardbreite_einfach HoeheZ=1 End If Local zeichenbreite=Eingabefeld_Zeichenbreite Local zeichenhoehe=Eingabefeld_Zeichenhoehe Local Breite#=((BreiteZ+1)*zeichenbreite)/2 Local Hoehe#=(HoeheZ*zeichenhoehe)/2 Local grenze_l#=PosX-Breite Local grenze_r#=PosX+Breite Local grenze_o#=PosY+Hoehe Local grenze_u#=PosY-Hoehe Local zeilenanzahl, max_zeilenbreite, z.EingabefeldZeile Local maushit_ Eingabefeld_ScrollX=0:Eingabefeld_ScrollY=0 Eingabefeld_ScrollMaus=0 Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe Eingabefeld_Verarbeitung=Null CopyRect 0, 0, GraphicsWidth(), GraphicsHeight(), 0, 0, BackBuffer(), ImageBuffer(Eingabefeld_screencap) FlushKeys : FlushMouse Local b_dauer:If Eingabefeld_komplex Then b_dauer=Eingabefeld_Animationsdauer_komplex Else b_dauer=Eingabefeld_Animationsdauer_einfach ;[Block] Textbox einblenden Local b_zeitpunkt# If b_dauer>0 Local b_startzeit=MilliSecs() Repeat b_zeitpunkt=1-(b_startzeit+b_dauer-MilliSecs())/Float(b_dauer) If b_zeitpunkt>1 Then b_zeitpunkt=1 Eingabefeld_zeichnen(Titel, PosX, PosY, Breite, Hoehe, BreiteZ, HoeheZ, StartposX, StartposY, Eingabefeld_screencap, b_zeitpunkt, grenze_l#, grenze_r#, grenze_o#, grenze_u#, zeichenbreite, zeichenhoehe, max_zeilenbreite, zeilenanzahl, 0, 0) DrawCursor Flip Until b_zeitpunkt=1 End If b_zeitpunkt=1 ;[End Block] ;[Block] Textbox ist geˆffnet Local tbreturn Repeat maushit_=MouseHit(1) zeilenanzahl=0:max_zeilenbreite=0 For z=Each EingabefeldZeile zeilenanzahl=zeilenanzahl+1 If Len(z\Text)>max_zeilenbreite Then max_zeilenbreite=Len(z\Text) Next tbreturn=Eingabefeld_zeichnen(Titel, PosX, PosY, Breite, Hoehe, BreiteZ, HoeheZ, StartposX, StartposY, Eingabefeld_screencap, 1, grenze_l#, grenze_r#, grenze_o#, grenze_u#, zeichenbreite, zeichenhoehe, max_zeilenbreite, zeilenanzahl, maushit_, 1) DrawCursor Flip Until tbreturn ;[End Block] ;[Block] Textbox ausblenden If b_dauer>0 b_startzeit=MilliSecs() Repeat b_zeitpunkt=(b_startzeit+b_dauer-MilliSecs())/Float(b_dauer) If b_zeitpunkt<0 Then b_zeitpunkt=0 Eingabefeld_zeichnen(Titel, PosX, PosY, Breite, Hoehe, BreiteZ, HoeheZ, StartposX, StartposY, Eingabefeld_screencap, b_zeitpunkt, grenze_l#, grenze_r#, grenze_o#, grenze_u#, zeichenbreite, zeichenhoehe, max_zeilenbreite, zeilenanzahl, 0, 0) DrawCursor Flip Until b_zeitpunkt=0 End If b_zeitpunkt=0 ;[End Block] Eingabefeld_AuswahlAS=0:Eingabefeld_AuswahlAZ=0:Eingabefeld_AuswahlES=0:Eingabefeld_AuswahlEZ=0 Clear3D FlushKeys : FlushMouse If Eingabefeld_komplex Return (tbreturn=1) Else If tbreturn=1 Local rzeile.EingabefeldZeile=First EingabefeldZeile Return rzeile\Text Else Return Standardtext End If Eingabefeld_clear End If End Function Function Eingabefeld_Texturen_laden() Eingabefeld_hgpixel = LoadImage3D(Eingabefeld_Texturpfad+"Eingabefeld_pixel.png") Eingabefeld_hgpanel = LoadImage3D(Eingabefeld_Texturpfad+"Eingabefeld_panel.png") Eingabefeld_feldtex = LoadImage3D(Eingabefeld_Texturpfad+"Eingabefeld_textfeld.png") Local Eingabefeld_stex = LoadImage3D(Eingabefeld_Texturpfad+"Eingabefeld_textfeld_scroll.png") Eingabefeld_scrollbutton= GrabImage3D(Eingabefeld_stex, 0, 0, 26, 26) Eingabefeld_scrollpfeil = GrabImage3D(Eingabefeld_stex, 27, 23, 5, 9) Eingabefeld_pixel = LoadImage3D(Eingabefeld_Texturpfad+"Eingabefeld_pixel.png") Eingabefeld_schriftart = LoadFont3D(Eingabefeld_Schriftart_Datei) Eingabefeld_screencap = CreateImage(GraphicsWidth(), GraphicsHeight()) End Function Function Eingabefeld_addZeile.EingabefeldZeile(nachfolgerzeile.EingabefeldZeile, z_text$) Local z.EingabefeldZeile=New EingabefeldZeile If nachfolgerzeile.EingabefeldZeile<>Null Then Insert z Before nachfolgerzeile Eingabefeld_modifyZeile z, z_text Return z End Function Function Eingabefeld_modifyZeile(zeile.EingabefeldZeile, neuer_text$) zeile\Text=neuer_text Return Eingabefeld_verarbeite_Zeile(zeile) End Function Function Eingabefeld_getZeile.EingabefeldZeile(zeilennr) If zeilennr<1 Then Return Null Local zeile.EingabefeldZeile=First EingabefeldZeile Local znr For znr=1 To zeilennr-1 If zeile=Null Then Return Null zeile=After zeile Next Return zeile End Function Function Eingabefeld_getZeilenlaenge(zeilennr) Local zeile.EingabefeldZeile=Eingabefeld_getZeile(zeilennr) If zeile=Null Then Return 0 Else Return zeile\Len End Function Function Eingabefeld_clear() Delete Each EingabefeldZeile End Function Function Eingabefeld_zeichnen(Titel$, PosX#, PosY#, Breite#, Hoehe#, BreiteZ, HoeheZ, StartposX#, StartposY#, bg, zeitpunkt#, grenze_l#, grenze_r#, grenze_o#, grenze_u#, zeichenbreite, zeichenhoehe, max_zeilenbreite, zeilenanzahl, maushit, eingabe) WaitTimer(Eingabefeld_Timer) ;[Block] Box mit Beschriftung DrawBlock bg, 0, 0 ColorN3D 0, 0, 0, zeitpunkt*.35 Rect3D Eingabefeld_hgpixel, 0, 0, 1000, 1000, 1, 0 ColorN3D 230, 230, 230, zeitpunkt Rect3D Eingabefeld_hgpanel, zeitpunkt*(PosX+10)+(1-zeitpunkt)*StartposX, zeitpunkt*(PosY+12-10)+(1-zeitpunkt)*StartposY, zeitpunkt*(Breite+3+10), zeitpunkt*(Hoehe+15+10), 1, 3*zeitpunkt ColorN3D 255, 255, 255, zeitpunkt Rect3D Eingabefeld_feldtex, zeitpunkt*PosX+(1-zeitpunkt)*StartposX, zeitpunkt*PosY+(1-zeitpunkt)*StartposY, zeitpunkt*Breite, zeitpunkt*Hoehe, 1, 3*zeitpunkt ColorN3D SetFont3D 1.1, 1.25 ColorT3D 0, 0, 0 Text3D Eingabefeld_schriftart, zeitpunkt*(PosX-Breite+4)+(1-zeitpunkt)*StartposX, zeitpunkt*(PosY+Hoehe+16)+(1-zeitpunkt)*StartposY, Eingabefeld_Begrenzung(Titel, (2*Breite-8)*zeitpunkt) ;[End Block] If zeitpunkt>.99 Local zeilennummerbreite=(Eingabefeld_komplex And Eingabefeld_Zeilennummern)*Len(zeilenanzahl) BreiteZ=BreiteZ-zeilennummerbreite If KeyHit(221) Then Eingabefeld_Zeilennummern=1-Eingabefeld_Zeilennummern ;[Block] Scrollbalken Local sba1=Breite-18 If Eingabefeld_Scrollbalken_zeichnen(PosX, PosY-Hoehe-13, 0, sba1, (max_zeilenbreite>BreiteZ), Breite, Hoehe, zeichenbreite, zeichenhoehe, max_zeilenbreite+zeilennummerbreite, zeilenanzahl, grenze_l, grenze_r, grenze_o, grenze_u) If maushit Then Eingabefeld_ScrollMaus=1 End If Local sba2=Hoehe-18 If Eingabefeld_Scrollbalken_zeichnen(PosX+Breite+13, PosY, 1, sba2, (Eingabefeld_komplex And zeilenanzahl>HoeheZ), Breite, Hoehe, zeichenbreite, zeichenhoehe, max_zeilenbreite+zeilennummerbreite, zeilenanzahl, grenze_l, grenze_r, grenze_o, grenze_u) If maushit Then Eingabefeld_ScrollMaus=2 End If If Not MouseDown(1) Then Eingabefeld_ScrollMaus=0 If Eingabefeld_ScrollMaus=1 Then Eingabefeld_ScrollX=(.5*(((MouseX3D-PosX)-Eingabefeld_horizScrollbalkenbreite)/1024.*(GraphicsWidth()/Float(sba1)))+.5)*(max_zeilenbreite*zeichenbreite) If Eingabefeld_ScrollMaus=2 Then Eingabefeld_ScrollY=(.5*((-(MouseY3D-PosY)-Eingabefeld_vertScrollbalkenhoehe)/768.*(GraphicsHeight()/Float(sba2)))+.5)*(zeilenanzahl*zeichenhoehe) If Eingabefeld_Scrollbutton_zeichnen(PosX-Breite+7, PosY-Hoehe-13, 180, (max_zeilenbreite>BreiteZ), MouseDown(1)) Then Eingabefeld_ScrollX=Eingabefeld_ScrollX-zeichenbreite:Delay 100 If Eingabefeld_Scrollbutton_zeichnen(PosX+Breite-7, PosY-Hoehe-13, 0, (max_zeilenbreite>BreiteZ), MouseDown(1)) Then Eingabefeld_ScrollX=Eingabefeld_ScrollX+zeichenbreite:Delay 100 If Eingabefeld_Scrollbutton_zeichnen(PosX+Breite+13, PosY+Hoehe-7, 270, Eingabefeld_komplex*(zeilenanzahl>HoeheZ), MouseDown(1), (HoeheZ<=1)) Then Eingabefeld_ScrollY=Eingabefeld_ScrollY-zeichenhoehe:Delay 100 If Eingabefeld_Scrollbutton_zeichnen(PosX+Breite+13, PosY-Hoehe+7, 90, Eingabefeld_komplex*(zeilenanzahl>HoeheZ), MouseDown(1), (HoeheZ<=1)) Then Eingabefeld_ScrollY=Eingabefeld_ScrollY+zeichenhoehe:Delay 100 If (HoeheZ>1); And RectsOverlap(grenze_l, grenze_u, grenze_r-grenze_l, grenze_o-grenze_u, MouseX3D, MouseY3D, 1, 1) If KeyDown(42) Or KeyDown(54) Then Eingabefeld_ScrollX=Eingabefeld_ScrollX-3*zeichenbreite*MouseZSpeed() Else Eingabefeld_ScrollY=Eingabefeld_ScrollY-zeichenhoehe*MouseZSpeed() Else MouseZSpeed() End If Eingabefeld_Scrollposition_begrenzen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe, max_zeilenbreite, zeilenanzahl ;[End Block] ;[Block] Text SetFont3D Eingabefeld_Schriftskalierung Local z.EingabefeldZeile, znr=0, zeichen, textx#, texty#, farbe_zeichen_verbleibend, lenplus, fcspos, fcepos, fc, ise, sis=0 If First EingabefeldZeile=Null Then Eingabefeld_addZeile Null, "" For z=Each EingabefeldZeile znr=znr+1 texty=Eingabefeld_ScrollY+PosY+Hoehe+9-zeichenhoehe*znr If texty+7>grenze_o Then Goto continue_foreach If texty-7<grenze_u Then Exit If sis=0 Then If z\Text_mit_Farbcodes="" Then If z\Text<>"" Then Eingabefeld_Verarbeitung=z:sis=2 lenplus=0 farbe_zeichen_verbleibend=0 ise=z\Len+(z\Len=0) For zeichen=1 To ise textx=-Eingabefeld_ScrollX+PosX-Breite+zeichenbreite*(zeichen+zeilennummerbreite) If zeichen=1 If Eingabefeld_komplex And Eingabefeld_Zeilennummern ColorT3D (EFSFarbe_Zeilennummer And $FF0000)/$10000, (EFSFarbe_Zeilennummer And $FF00)/$100, EFSFarbe_Zeilennummer And $FF Text3D Eingabefeld_schriftart, PosX-Breite+zeichenbreite*zeilennummerbreite, texty, znr, 2 End If ColorT3D (EFSFarbe_normal And $FF0000)/$10000, (EFSFarbe_normal And $FF00)/$100, EFSFarbe_normal And $FF End If ;[Block] Farben Repeat fcspos=zeichen+lenplus+1 If Not Mid(z\Text_mit_Farbcodes, fcspos-1, 1)=Chr(8) Then Exit fcepos=Instr(z\Text_mit_Farbcodes, Chr(8), fcspos) fc=Mid(z\Text_mit_Farbcodes, fcspos, fcepos-fcspos) ColorT3D (fc And $FF0000)/$10000, (fc And $FF00)/$100, fc And $FF lenplus=lenplus+(fcepos-fcspos)+2 Forever ;[End Block] If textx-5<grenze_l+zeilennummerbreite*zeichenbreite Then Goto continue_for If textx+5>grenze_r Then Exit ;[Block] Mausaktion If Eingabefeld_Mausaktion If MouseY3D>texty-zeichenhoehe/2-1 And MouseY3D<texty+zeichenhoehe/2+1 If MouseX3D>textx-zeichenbreite-1 And MouseX3D<textx+1 Eingabefeld_CursorS=zeichen Eingabefeld_CursorZ=znr Eingabefeld_CursorBlink=1 If Eingabefeld_Mausaktion=1 Then Eingabefeld_Auswahl_aufheben Else Eingabefeld_Auswahl_an_Cursor_angleichen ElseIf zeichen=ise If MouseX3D>textx-1 Eingabefeld_CursorS=zeichen+(z\Len>0) Eingabefeld_CursorZ=znr Eingabefeld_CursorBlink=1 If Eingabefeld_Mausaktion=1 Then Eingabefeld_Auswahl_aufheben Else Eingabefeld_Auswahl_an_Cursor_angleichen End If ElseIf zeichen=1 If MouseX3D<textx+1 If Eingabefeld_Mausaktion=1 Eingabefeld_Auswahl_aufheben Eingabefeld_lastCursorS=1 Eingabefeld_lastCursorZ=znr Eingabefeld_CursorS=1 Eingabefeld_CursorZ=znr+1 Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 0 Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_CursorS=1 Eingabefeld_CursorZ=znr Eingabefeld_CursorBlink=1 Eingabefeld_Auswahl_an_Cursor_angleichen End If End If End If End If End If ;[End Block] ;[Block] Text Text3D Eingabefeld_schriftart, textx, texty, Mid(z\Text, zeichen, 1), 1 ;[End Block] ;[Block] Auswahl If Eingabefeld_Auswahl_vorhanden() And z\Len>0 If (Eingabefeld_AuswahlAZ<znr And Eingabefeld_AuswahlEZ>znr) Or (Eingabefeld_AuswahlAZ=znr And Eingabefeld_AuswahlEZ>znr And zeichen>=Eingabefeld_AuswahlAS) Or (Eingabefeld_AuswahlAZ<znr And Eingabefeld_AuswahlEZ=znr And zeichen<Eingabefeld_AuswahlES) Or (Eingabefeld_AuswahlAZ=znr And Eingabefeld_AuswahlEZ=znr And zeichen>=Eingabefeld_AuswahlAS And zeichen<Eingabefeld_AuswahlES) ColorN3D (EFSFarbe_Auswahl And $FF0000)/$10000, (EFSFarbe_Auswahl And $FF00)/$100, EFSFarbe_Auswahl And $FF Rect3D Eingabefeld_pixel, textx, texty, zeichenbreite/2, zeichenhoehe/2, 1, 0 ColorN3D End If End If ;[End Block] ;[Block] Cursor If Eingabefeld_CursorZ=znr And (Eingabefeld_CursorS=zeichen+1 Or (Eingabefeld_CursorS=1 And zeichen=1)) If Eingabefeld_CursorBlink>=1 ColorN3D 0, 0, 0 If Eingabefeld_CursorS=1 Then Rect3D Eingabefeld_pixel, textx-zeichenbreite/2-1, texty, 1, zeichenhoehe/2, 1, 0 Else Rect3D Eingabefeld_pixel, textx+zeichenbreite/2-1, texty, 1, zeichenhoehe/2, 1, 0 ColorN3D End If End If Eingabefeld_lastCursorS=Eingabefeld_CursorS:Eingabefeld_lastCursorZ=Eingabefeld_CursorZ ;[End Block] .continue_for Next .continue_foreach Next ColorT3D If Eingabefeld_Syntaxhighlighting Repeat If Eingabefeld_Verarbeitung=Null Then Eingabefeld_Verarbeitung=First EingabefeldZeile If Eingabefeld_Verarbeitung\Text_mit_Farbcodes="" Then If Eingabefeld_Verarbeitung\Text<>"" Then Eingabefeld_verarbeite_Zeile Eingabefeld_Verarbeitung, 1 Eingabefeld_Verarbeitung=After Eingabefeld_Verarbeitung sis=sis-1 Until sis=-1 End If ;[End Block] End If RenderWorld 0 Clear3D If eingabe Local ms_plus=MilliSecs()-Eingabefeld_lastMillisecs:Eingabefeld_lastMillisecs=MilliSecs() Eingabefeld_CursorBlink=Eingabefeld_CursorBlink+Eingabefeld_CursorBlinkgeschwindigkeit*.002*ms_plus If Eingabefeld_CursorBlink>=2 Then Eingabefeld_CursorBlink=Eingabefeld_CursorBlink-2 ;[Block] Tastenabfrage Local sckd:For sckd=1 To 237:Eingabefeld_KeyDown(sckd)=(Eingabefeld_KeyDown(sckd)+ms_plus)*KeyDown(sckd):Next Local GetKey_=GetKey() Select True ;[Block] hoch Case KeyHit(200) Or Eingabefeld_KeyDown(200)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 200 Eingabefeld_CursorZ=Eingabefeld_CursorZ-1 Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 0 If KeyDown(42) Or KeyDown(54) Then Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] runter Case KeyHit(208) Or Eingabefeld_KeyDown(208)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 208 Eingabefeld_CursorZ=Eingabefeld_CursorZ+1 Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 0 If KeyDown(42) Or KeyDown(54) Then Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] links Case KeyHit(203) Or Eingabefeld_KeyDown(203)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 203 Repeat Eingabefeld_CursorS=Eingabefeld_CursorS-1 Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 1 If Not (KeyDown(29) Or KeyDown(157)) Then Exit If Eingabefeld_isTrennzeichen(Eingabefeld_Zeichen(Eingabefeld_CursorS-1, Eingabefeld_CursorZ)) Or Eingabefeld_isTrennzeichen(Eingabefeld_Zeichen(Eingabefeld_CursorS, Eingabefeld_CursorZ)) Then Exit Forever If KeyDown(42) Or KeyDown(54) Then Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] rechts Case KeyHit(205) Or Eingabefeld_KeyDown(205)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 205 Repeat Eingabefeld_CursorS=Eingabefeld_CursorS+1 Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 1 If Not (KeyDown(29) Or KeyDown(157)) Then Exit If Eingabefeld_isTrennzeichen(Eingabefeld_Zeichen(Eingabefeld_CursorS, Eingabefeld_CursorZ)) Or Eingabefeld_isTrennzeichen(Eingabefeld_Zeichen(Eingabefeld_CursorS-1, Eingabefeld_CursorZ)) Then Exit Forever If KeyDown(42) Or KeyDown(54) Then Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] Pos1 Case KeyHit(199) If KeyDown(29) Or KeyDown(157) Then Eingabefeld_CursorZ=1 Eingabefeld_CursorS=1 If KeyDown(42) Or KeyDown(54) Then Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] Ende Case KeyHit(207) If KeyDown(29) Or KeyDown(157) Then Eingabefeld_CursorZ=zeilenanzahl Eingabefeld_CursorS=Eingabefeld_getZeilenlaenge(Eingabefeld_CursorZ)+1 If KeyDown(42) Or KeyDown(54) Then Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] Bild auf Case KeyHit(201) Or Eingabefeld_KeyDown(202)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 201 Eingabefeld_CursorZ=Eingabefeld_CursorZ-HoeheZ Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 0 If KeyDown(42) Or KeyDown(54) Then Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] Bild ab Case KeyHit(209) Or Eingabefeld_KeyDown(209)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 209 Eingabefeld_CursorZ=Eingabefeld_CursorZ+HoeheZ Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 0 If KeyDown(42) Or KeyDown(54) Then Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] Strg+A Case (KeyDown(29) Or KeyDown(157)) And KeyDown(30) If KeyHit(30) Local Last_EingabefeldZeile.EingabefeldZeile=Last EingabefeldZeile Eingabefeld_AuswahlAS=1 Eingabefeld_AuswahlAZ=1 Eingabefeld_AuswahlES=Last_EingabefeldZeile\Len+1 Eingabefeld_AuswahlEZ=zeilenanzahl Eingabefeld_CursorS=Eingabefeld_AuswahlES Eingabefeld_CursorZ=Eingabefeld_AuswahlEZ Eingabefeld_CursorBlink=1 End If ;[End Block] ;[Block] Strg+X / Umschalt+Entf Case ((KeyDown(29) Or KeyDown(157)) And KeyDown(45)) Or ((KeyDown(42) Or KeyDown(54)) And KeyDown(211)) If KeyHit(45) Or KeyHit(211) If Eingabefeld_Auswahl_vorhanden() Eingabefeld_Auswahl_kopieren Eingabefeld_Auswahl_loeschen Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe End If End If ;[End Block] ;[Block] Strg+C / Strg+Einfg Case (KeyDown(29) Or KeyDown(157)) And (KeyDown(46) Or KeyDown(210)) If KeyHit(46) Or KeyHit(210) If Eingabefeld_Auswahl_vorhanden() Eingabefeld_Auswahl_kopieren Eingabefeld_CursorBlink=1 End If End If ;[End Block] ;[Block] Strg+V / Umschalt+Einfg Case ((KeyDown(29) Or KeyDown(157)) And KeyDown(47)) Or ((KeyDown(42) Or KeyDown(54)) And KeyDown(210)) If KeyHit(47) Or KeyHit(210) Eingabefeld_einfuegen Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe End If ;[End Block] ;[Block] Entf Case KeyHit(211) Or Eingabefeld_KeyDown(211)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 211 If Not Eingabefeld_Auswahl_vorhanden() Eingabefeld_CursorS=Eingabefeld_CursorS+1 Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 1 Eingabefeld_Auswahl_an_Cursor_angleichen End If Eingabefeld_Auswahl_loeschen Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] R¸cktaste Case KeyHit(14) Or Eingabefeld_KeyDown(14)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 14 If Not Eingabefeld_Auswahl_vorhanden() Eingabefeld_CursorS=Eingabefeld_CursorS-1 Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 1 Eingabefeld_Auswahl_an_Cursor_angleichen End If Eingabefeld_Auswahl_loeschen Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] Eingabetaste Case KeyDown(28) Or KeyDown(156) If Eingabefeld_komplex If KeyHit(28) Or KeyHit(156) Or Eingabefeld_KeyDown(28)>Eingabefeld_KeyRepeatDelay Or Eingabefeld_KeyDown(156)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 28 Eingabefeld_KeyDown_CoolDown 156 If Eingabefeld_Auswahl_vorhanden() Then Eingabefeld_Auswahl_loeschen Local azeile.EingabefeldZeile=Eingabefeld_getZeile(Eingabefeld_CursorZ) Eingabefeld_addZeile Eingabefeld_getZeile(Eingabefeld_CursorZ+1), Mid(azeile\Text, Eingabefeld_CursorS) Eingabefeld_modifyZeile azeile, Left(azeile\Text, Eingabefeld_CursorS-1) Eingabefeld_CursorZ=Eingabefeld_CursorZ+1 Eingabefeld_CursorS=1 Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe End If Else If KeyHit(28) Or KeyHit(156) Then Return 1 End If ;[End Block] ;[Block] Tab Case KeyHit(15) Or Eingabefeld_KeyDown(15)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 15 If Eingabefeld_Auswahl_vorhanden() Then Eingabefeld_Auswahl_loeschen Local tzeile.EingabefeldZeile=Eingabefeld_getZeile(Eingabefeld_CursorZ) Eingabefeld_CursorS=Eingabefeld_CursorS+Eingabefeld_modifyZeile(tzeile, Left(tzeile\Text, Eingabefeld_CursorS-1)+Chr(9)+Mid(tzeile\Text, Eingabefeld_CursorS)) Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] ESC Case KeyHit(1) If Eingabefeld_komplex If Eingabefeld_BlitzSys_vorhanden Select DLLMessageBox("Eingabefeld", "ƒnderungen speichern?", MB_TOPMOST+MB_YESNOCANCEL+MB_ICONQUESTION, 0) Case IDYES: Return 1 Case IDNO: Return 2 End Select Else Return 1 End If Else Return 2 End If ;[End Block] ;[Block] druckbare Zeichen Case GetKey_>=32 If Eingabefeld_Auswahl_vorhanden() Then Eingabefeld_Auswahl_loeschen Local szeile.EingabefeldZeile=Eingabefeld_getZeile(Eingabefeld_CursorZ) Local neueszeichen$=Chr(GetKey_) If neueszeichen="-" Then If KeyHit(181) Then neueszeichen="/" Eingabefeld_modifyZeile szeile, Left(szeile\Text, Eingabefeld_CursorS-1)+neueszeichen+Mid(szeile\Text, Eingabefeld_CursorS) Eingabefeld_CursorS=Eingabefeld_CursorS+1 Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] End Select ;[End Block] ;[Block] Mausabfrage (Cursor und Auswahl) If RectsOverlap(grenze_l, grenze_u, grenze_r-grenze_l, grenze_o-grenze_u, MouseX3D, MouseY3D, 1, 1) If maushit If KeyDown(42) Or KeyDown(54) Then Eingabefeld_Mausaktion=2 Else Eingabefeld_Mausaktion=1 ElseIf MouseDown(1) If Eingabefeld_Mausaktion=1 Then Eingabefeld_Mausaktion=2 Else Eingabefeld_Mausaktion=0 End If Else If Not MouseDown(1) Then Eingabefeld_Mausaktion=0 End If ;[End Block] End If Return 0 End Function Function Eingabefeld_Scrollbutton_zeichnen(sbx#, sby#, pw#, aktiv, maushit, halbe_y_groesse=0) Local r=0 If halbe_y_groesse Then sby=sby+5*(2*(pw>180)-1) If aktiv Then ColorN3D 230, 230, 230 Else ColorN3D 230, 230, 230, .5 Rect3D Eingabefeld_scrollbutton, sbx, sby, 7, 7-halbe_y_groesse*5, 1, 3 ColorN3D CheckQuad3D sbx-10, sby-10+halbe_y_groesse*5, sbx-10, sby+10-halbe_y_groesse*5, sbx+10, sby+10-halbe_y_groesse*5, sbx+10, sby-10+halbe_y_groesse*5, 1 If aktiv And MouseOver3D Rect3D Eingabefeld_scrollbutton, sbx, sby, 7, 7-halbe_y_groesse*5, 1, 3 If maushit Then r=1 End If If aktiv Then ColorG3D 0, 0, 0 Else ColorG3D 0, 0, 0, .3 DrawImage3D Eingabefeld_scrollpfeil, sbx, sby, 0, pw ColorG3D Return r End Function Function Eingabefeld_Scrollbalken_zeichnen(sbx#, sby#, vertikal, max_groesse#, aktiv, Breite#, Hoehe#, zeichenbreite, zeichenhoehe, max_zeilenbreite, zeilenanzahl, grenze_l#, grenze_r#, grenze_o#, grenze_u#) If Not aktiv Then Return 0 Local groesse_x#=7*vertikal+(2*max_groesse*((Breite-20)/(zeichenbreite*(max_zeilenbreite+1))))*(1-vertikal) Local groesse_y#=7*(1-vertikal)+(2*max_groesse*((Hoehe-20)/(zeichenhoehe*zeilenanzahl)))*vertikal If groesse_x<4 Then groesse_x=4 If groesse_y<4 Then groesse_y=4 If vertikal Then Eingabefeld_vertScrollbalkenhoehe=groesse_y Else Eingabefeld_horizScrollbalkenbreite=groesse_x Local x#=sbx+(max_groesse-groesse_x) * (2*Eingabefeld_ScrollX/Float(zeichenbreite*(max_zeilenbreite+1)-(grenze_r-grenze_l))-1) *(1-vertikal) Local y#=sby+(max_groesse-groesse_y) * -(2*Eingabefeld_ScrollY/Float(zeichenhoehe*zeilenanzahl-(grenze_o-grenze_u))-1) *vertikal If x=0 And x=1 Then x=sbx If y=0 And y=1 Then y=sby ColorN3D 230, 230, 230 Rect3D Eingabefeld_scrollbutton, x, y, groesse_x, groesse_y, 1, 3 ColorN3D CheckQuad3D x-groesse_x, y-groesse_y, x-groesse_x, y+groesse_y, x+groesse_x, y+groesse_y, x+groesse_x, y-groesse_y, 1 If MouseOver3D Rect3D Eingabefeld_scrollbutton, x, y, groesse_x, groesse_y, 1, 3 Return 1 End If Return 0 End Function Function Eingabefeld_Scrollposition_begrenzen(grenze_l#, grenze_r#, grenze_o#, grenze_u#, zeichenbreite, zeichenhoehe, max_zeilenbreite, zeilenanzahl) Local zeilennummerbreite=(Eingabefeld_komplex And Eingabefeld_Zeilennummern)*Len(zeilenanzahl) If Eingabefeld_ScrollX>zeichenbreite*(max_zeilenbreite+1+zeilennummerbreite)-(grenze_r-grenze_l) Then Eingabefeld_ScrollX=zeichenbreite*(max_zeilenbreite+1+zeilennummerbreite)-(grenze_r-grenze_l) If Eingabefeld_ScrollY>zeichenhoehe*(zeilenanzahl)-(grenze_o-grenze_u) Then Eingabefeld_ScrollY=zeichenhoehe*(zeilenanzahl)-(grenze_o-grenze_u) If Eingabefeld_ScrollX<0 Then Eingabefeld_ScrollX=0 If Eingabefeld_ScrollY<0 Then Eingabefeld_ScrollY=0 End Function Function Eingabefeld_addSyntaxhighlight(txt$, farbcode, typ=EFSTyp_Wort) Local n.EingabefeldSyntaxhighlight=New EingabefeldSyntaxhighlight n\Text=txt n\Farbcode=farbcode n\Typ=typ End Function Function Eingabefeld_clearSyntaxhighlights() Delete Each EingabefeldSyntaxhighlight End Function Function Eingabefeld_verarbeite_Zeile(zeile.EingabefeldZeile, gruendlich=0) Local ztmp$, tabbreite=0 zeile\Len=Len(zeile\Text) Local zz=1 While zz<=zeile\Len ;[Block] Tabs durch Leerzeichen ersetzen If Asc(Mid(zeile\Text, zz, 1))=9 ztmp=Left(zeile\Text, zz-1) tabbreite=Eingabefeld_Tabbreite-((zz-1) Mod Eingabefeld_Tabbreite):If tabbreite=0 Then tabbreite=Eingabefeld_Tabbreite ztmp=ztmp+String(" ", tabbreite) ztmp=ztmp+Mid(zeile\Text, zz+1) zeile\Text=ztmp End If ;[End Block] zz=zz+1 Wend zeile\Len=Len(zeile\Text) If gruendlich If Eingabefeld_komplex ;[Block] Syntax-Highlighting Local h.EingabefeldSyntaxhighlight, z_a$, asc_z_a, z_l1$, farbe_zeichen_verbleibend=0, ph_str$, htext_len, zeichen, lenplus, normalfarbe, abngz Local zeile_pruef$, hText_pruef$, txtnf$ If Eingabefeld_Syntaxhighlighting_CaseSensitive=1 Then zeile_pruef=zeile\Text Else zeile_pruef=Lower(zeile\Text) zeile\Text_mit_Farbcodes=zeile\Text lenplus=0 normalfarbe=1 For zeichen=1 To zeile\Len z_a=Mid(zeile\Text, zeichen, 1) asc_z_a=Asc(z_a) If farbe_zeichen_verbleibend>-1 Then farbe_zeichen_verbleibend=farbe_zeichen_verbleibend-1 If farbe_zeichen_verbleibend=-1 Then farbe_zeichen_verbleibend=0 If farbe_zeichen_verbleibend=0 If zeichen>1 Then z_l1=Mid(zeile_pruef, zeichen-1, 1) Else z_l1="" For h=Each EingabefeldSyntaxhighlight If Eingabefeld_Syntaxhighlighting_CaseSensitive=1 Then hText_pruef=h\Text Else hText_pruef=Lower(h\Text) htext_len=Len(hText_pruef) ph_str=Mid(zeile_pruef, zeichen, htext_len) If Asc(ph_str)=Asc(hText_pruef) If Eingabefeld_isTrennzeichen(z_l1) Or h\Typ<>EFSTyp_Wort If Eingabefeld_isTrennzeichen(Mid(zeile_pruef, zeichen+htext_len, 1)) Or h\Typ<>EFSTyp_Wort If ph_str=hText_pruef If Eingabefeld_Syntaxhighlighting_CaseSensitive=-1 txtnf=hText_pruef+Mid(zeile\Text_mit_Farbcodes, zeichen+lenplus+htext_len) zeile\Text=Left(zeile\Text, zeichen-1)+h\Text+Mid(zeile\Text, zeichen+htext_len) Else txtnf=Mid(zeile\Text_mit_Farbcodes, zeichen+lenplus) End If If h\Farbcode<>-1 zeile\Text_mit_Farbcodes=Left(zeile\Text_mit_Farbcodes, zeichen-1+lenplus)+Chr(8)+h\Farbcode+Chr(8)+txtnf lenplus=lenplus+Len(h\Farbcode)+2 normalfarbe=0 If h\Typ=EFSTyp_String abngz=Instr(zeile_pruef, hText_pruef, zeichen+htext_len) If abngz=0 Then Goto highlighting_beendet Else abngz=abngz-(zeichen+htext_len) farbe_zeichen_verbleibend=2*htext_len+abngz ElseIf h\Typ=EFSTyp_Label abngz=zeichen+htext_len farbe_zeichen_verbleibend=htext_len While Not Eingabefeld_isTrennzeichen(Mid(zeile_pruef, abngz, 1)) farbe_zeichen_verbleibend=farbe_zeichen_verbleibend+1 abngz=abngz+1 If abngz=zeile\Len+1 Then Goto highlighting_beendet Wend Else farbe_zeichen_verbleibend=htext_len End If If h\Typ=EFSTyp_Kommentar Then Goto highlighting_beendet Else Goto highlight_gefunden End If End If End If End If End If Next If Not normalfarbe zeile\Text_mit_Farbcodes=Left(zeile\Text_mit_Farbcodes, zeichen-1+lenplus)+Chr(8)+EFSFarbe_normal+Chr(8)+Mid(zeile\Text_mit_Farbcodes, zeichen+lenplus) lenplus=lenplus+Len(EFSFarbe_normal)+2 normalfarbe=1 End If ElseIf farbe_zeichen_verbleibend<-1 If asc_z_a=-farbe_zeichen_verbleibend farbe_zeichen_verbleibend=0 normalfarbe=0 Goto highlight_gefunden End If End If .highlight_gefunden Next .highlighting_beendet ;[End Block] End If Else zeile\Text_mit_Farbcodes="" End If Return tabbreite End Function Function Eingabefeld_isTrennzeichen(zeichen$) If zeichen="" Then Return 1 Local t:For t=1 To Eingabefeld_Trennzeichenliste_Len If zeichen=Mid(Eingabefeld_Trennzeichenliste, t, 1) Then Return 1 Next Return 0 End Function Function Eingabefeld_Auswahl_an_Cursor_angleichen() If Eingabefeld_lastCursorS=Eingabefeld_AuswahlAS And Eingabefeld_lastCursorZ=Eingabefeld_AuswahlAZ Eingabefeld_AuswahlAS=Eingabefeld_CursorS Eingabefeld_AuswahlAZ=Eingabefeld_CursorZ ElseIf Eingabefeld_lastCursorS=Eingabefeld_AuswahlES And Eingabefeld_lastCursorZ=Eingabefeld_AuswahlEZ Eingabefeld_AuswahlES=Eingabefeld_CursorS Eingabefeld_AuswahlEZ=Eingabefeld_CursorZ Else Eingabefeld_Auswahl_aufheben End If If (Eingabefeld_AuswahlAZ=Eingabefeld_AuswahlEZ And Eingabefeld_AuswahlAS>Eingabefeld_AuswahlES) Or (Eingabefeld_AuswahlAZ>Eingabefeld_AuswahlEZ) Local ts=Eingabefeld_AuswahlAS, tz=Eingabefeld_AuswahlAZ Eingabefeld_AuswahlAS=Eingabefeld_AuswahlES Eingabefeld_AuswahlAZ=Eingabefeld_AuswahlEZ Eingabefeld_AuswahlES=ts Eingabefeld_AuswahlEZ=tz End If End Function Function Eingabefeld_Auswahl_aufheben() Eingabefeld_AuswahlAS=Eingabefeld_CursorS Eingabefeld_AuswahlAZ=Eingabefeld_CursorZ Eingabefeld_AuswahlES=Eingabefeld_CursorS Eingabefeld_AuswahlEZ=Eingabefeld_CursorZ End Function Function Eingabefeld_Auswahl_vorhanden() If Eingabefeld_AuswahlAS<>Eingabefeld_AuswahlES Then Return 1 If Eingabefeld_AuswahlAZ<>Eingabefeld_AuswahlEZ Then Return 1 Return 0 End Function Function Eingabefeld_Auswahl_loeschen() Eingabefeld_CursorS=Eingabefeld_AuswahlAS Eingabefeld_CursorZ=Eingabefeld_AuswahlAZ Local zeile1.EingabefeldZeile, zeile2.EingabefeldZeile, z2v.EingabefeldZeile zeile1=Eingabefeld_getZeile(Eingabefeld_AuswahlAZ) zeile2=Eingabefeld_getZeile(Eingabefeld_AuswahlEZ) Eingabefeld_modifyZeile zeile1, Left(zeile1\Text, Eingabefeld_AuswahlAS-1)+Mid(zeile2\Text, Eingabefeld_AuswahlES) Local r:For r=Eingabefeld_AuswahlEZ To Eingabefeld_AuswahlAZ+1 Step -1:z2v=zeile2:zeile2=Before zeile2 Delete z2v:Next Eingabefeld_Auswahl_aufheben End Function Function Eingabefeld_Auswahl_kopieren() Local zeilec$ Local zeile1.EingabefeldZeile=Eingabefeld_getZeile(Eingabefeld_AuswahlAZ) If Eingabefeld_AuswahlAZ=Eingabefeld_AuswahlEZ zeilec=Mid(zeile1\Text, Eingabefeld_AuswahlAS, Eingabefeld_AuswahlES-Eingabefeld_AuswahlAS) Else Local zeile2.EingabefeldZeile=Eingabefeld_getZeile(Eingabefeld_AuswahlEZ) zeilec=Chr(13)+Chr(10)+Left(zeile2\Text, Eingabefeld_AuswahlES-1) Local r:For r=Eingabefeld_AuswahlEZ-1 To Eingabefeld_AuswahlAZ+1 Step -1 zeile2=Before zeile2 zeilec=Chr(13)+Chr(10)+zeile2\Text+zeilec Next zeilec=Mid(zeile1\Text, Eingabefeld_AuswahlAS)+zeilec End If If Eingabefeld_BlitzSys_vorhanden Then DLLSetClipboardText zeilec Else Eingabefeld_Clipboard=zeilec End Function Function Eingabefeld_einfuegen() Local zeilec$ If Eingabefeld_BlitzSys_vorhanden Then zeilec=Replace(DLLEZGetClipboardText(), Chr(10), "") Else zeilec=Replace(Eingabefeld_Clipboard, Chr(10), "") If zeilec="" Then Return If Eingabefeld_Auswahl_vorhanden() Then Eingabefeld_Auswahl_loeschen Local len_zeilec_a=Len(zeilec) Local s.EingabefeldZeile=Eingabefeld_getZeile(Eingabefeld_CursorZ) Eingabefeld_Verarbeitung=s Local d.EingabefeldZeile=After s d=Eingabefeld_addZeile(d, Mid(s\Text, Eingabefeld_CursorS)) Eingabefeld_modifyZeile s, Left(s\Text, Eingabefeld_CursorS-1) Local n0.EingabefeldZeile=Null, n.EingabefeldZeile Local len_zeilec=len_zeilec_a, p Local umbruch_ende=(Right(zeilec, 1)=Chr(13)) Local umbruchzaehler=umbruch_ende-1 Repeat For p=1 To len_zeilec+1 If Mid(zeilec, p, 1)=Chr(13) Or p=len_zeilec+1 umbruchzaehler=umbruchzaehler+1 n=Eingabefeld_addZeile(d, Left(zeilec, p-1)) If n0=Null Then n0=n zeilec=Mid(zeilec, p+1) Exit End If Next len_zeilec=Len(zeilec) Until len_zeilec=0 If umbruch_ende Then n=Eingabefeld_addZeile(d, "") Local ntextlen=Len(n\Text) Eingabefeld_modifyZeile n, n\Text+d\Text Delete d Eingabefeld_modifyZeile s, s\Text+n0\Text Delete n0 If umbruchzaehler=0 Eingabefeld_CursorS=Eingabefeld_CursorS+len_zeilec_a Else Eingabefeld_CursorZ=Eingabefeld_CursorZ+umbruchzaehler Eingabefeld_CursorS=1+ntextlen End If Local zz=0:For n=Each EingabefeldZeile:zz=zz+1:Next Eingabefeld_Cursorposition_korrigieren zz, 1 Eingabefeld_Auswahl_aufheben End Function Function Eingabefeld_Cursorposition_korrigieren(zeilenanzahl, uebertrag) If Eingabefeld_CursorS<1 If uebertrag Eingabefeld_CursorZ=Eingabefeld_CursorZ-1 Eingabefeld_CursorS=Eingabefeld_getZeilenlaenge(Eingabefeld_CursorZ)+1 Else Eingabefeld_CursorS=1 End If ElseIf Eingabefeld_CursorS>Eingabefeld_getZeilenlaenge(Eingabefeld_CursorZ)+1 If uebertrag Eingabefeld_CursorZ=Eingabefeld_CursorZ+1 Eingabefeld_CursorS=1 Else Eingabefeld_CursorS=Eingabefeld_getZeilenlaenge(Eingabefeld_CursorZ)+1 End If End If If Eingabefeld_CursorZ>zeilenanzahl Eingabefeld_CursorZ=zeilenanzahl Eingabefeld_CursorS=Eingabefeld_getZeilenlaenge(Eingabefeld_CursorZ)+1 ElseIf Eingabefeld_CursorZ<1 Eingabefeld_CursorZ=1 Eingabefeld_CursorS=1 End If End Function Function Eingabefeld_Sichtfeld_an_Cursor_angleichen(grenze_l#, grenze_r#, grenze_o#, grenze_u#, zeichenbreite, zeichenhoehe) Local zz.EingabefeldZeile, zeilenanzahl=0, max_zeilenbreite=0 For zz=Each EingabefeldZeile zeilenanzahl=zeilenanzahl+1 If Len(zz\Text)>max_zeilenbreite Then max_zeilenbreite=Len(zz\Text) Next Local zeilennummerbreite=(Eingabefeld_komplex And Eingabefeld_Zeilennummern)*Len(zeilenanzahl) Local grenze_lZ=(Eingabefeld_ScrollX)/zeichenbreite+2 Local grenze_rZ=(grenze_r-grenze_l+Eingabefeld_ScrollX)/zeichenbreite-1-zeilennummerbreite Local grenze_oZ=(Eingabefeld_ScrollY)/zeichenhoehe+2 Local grenze_uZ=(grenze_o-grenze_u+Eingabefeld_ScrollY)/zeichenhoehe-1 If grenze_lZ>Eingabefeld_CursorS Then Eingabefeld_ScrollX=Eingabefeld_ScrollX-(grenze_lZ-Eingabefeld_CursorS)*zeichenbreite If grenze_rZ<Eingabefeld_CursorS Then Eingabefeld_ScrollX=Eingabefeld_ScrollX-(grenze_rZ-Eingabefeld_CursorS)*zeichenbreite If grenze_oZ>Eingabefeld_CursorZ Then Eingabefeld_ScrollY=Eingabefeld_ScrollY-(grenze_oZ-Eingabefeld_CursorZ)*zeichenhoehe If grenze_uZ<Eingabefeld_CursorZ Then Eingabefeld_ScrollY=Eingabefeld_ScrollY-(grenze_uZ-Eingabefeld_CursorZ)*zeichenhoehe Eingabefeld_Scrollposition_begrenzen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe, max_zeilenbreite, zeilenanzahl End Function Function Eingabefeld_Zeichen$(S, Z) If S<1 Then Return "" Local zeile.EingabefeldZeile=Eingabefeld_getZeile(Z) If zeile=Null Then Return "" Else Return Mid(zeile\Text, S, 1) End Function Function Eingabefeld_KeyDown_CoolDown(scancode) If Eingabefeld_KeyDown(scancode)>Eingabefeld_KeyRepeatDelay Then Eingabefeld_KeyDown(scancode)=Eingabefeld_KeyDown(scancode)-Eingabefeld_KeyRepeatInterval End Function Function Eingabefeld_Begrenzung$(BText$, maxBreite#, tschriftart=-1) If tschriftart=-1 Then tschriftart=Eingabefeld_schriftart Local Breite=StringWidth3D(tschriftart, BText) If Breite<=maxBreite Then Return BText Local maxLaenge=Len(BText) Local Schaetzwert=(maxBreite/Breite)*maxLaenge Local TText$ If Schaetzwert<0 Then TText="Ö" Else TText=Left(BText, Schaetzwert)+"Ö" Breite=StringWidth3D(tschriftart, TText) Select Sgn(Int(maxBreite-Breite)) Case 0 Return TText Case 1 While Schaetzwert<maxLaenge Schaetzwert=Schaetzwert+1 TText=Left(BText, Schaetzwert)+"Ö" If StringWidth3D(tschriftart, TText)>maxBreite Then Return Left(BText, Schaetzwert-1)+"Ö" Wend Return BText Case -1 While Schaetzwert>0 Schaetzwert=Schaetzwert-1 TText=Left(BText, Schaetzwert)+"Ö" If StringWidth3D(tschriftart, TText)<=maxBreite Then Return TText Wend Return "Ö" End Select End Function ;~IDEal Editor Parameters: ;~F#106#145#154#18D#19C#1AB#1CA#1D7#1DF#1E5#1F2#1F8#1FD#200#212#22D#248#256#27A#27D ;~F#286#2AC#2B5#2BE#2CB#2D8#2E0#2E8#2F1#2FA#307#312#31B#323#32F#33B#34F#35A#36A#378 ;~F#38B#39D#3B4#3BD#3C5#3CA#3CF#3DE#42F#438#44C#454#45B#467#47A#4A8#4C2#4D6#4DD#4E2 ;~C#Blitz3D |
||
Blog. |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Noch ein kleines Update
Wenn man Programmcode schreibt, kann es nervig sein, wenn bei jedem Zeilenumbruch der Cursor ganz an den Anfang der neue Zeile gesetzt wird. Deshalb habe ich nun eingebaut, dass beim Drücken der Enter-Taste die Einrückung der vorherigen Zeile automatisch übernommen wird. Wer das nicht möchte, kann es auch wieder abstellen, dazu gibt es eine neue globale Variable. Außerdem habe ich einen Fehler behoben, der darin bestand, dass jedesmal beim Ändern einer Zeile das Syntaxhighlighting ein Frame lang aussetzte und somit beim Schreiben von Text zu unschönem Geflimmer führte. Das passiert nun nicht mehr. EDIT: noch ein Bugfix Das Syntaxhighlighting wurde teilweise selbst dann vorgenommen, wenn die entsprechende Variable auf 0 stand; jetzt nicht mehr. Die Datei im Archiv wurde erneuert (Link im ersten Post). Auch hier die neue Eingabefeld.bb: Code: [AUSKLAPPEN] ; +-------------------------------+ ; | Eingabefeld von FireballFlame | ; +-------------------------------+ ; ----- Einstellungen: -------------------------------------------------------------------- Const Eingabefeld_BlitzSys_vorhanden = 0 ; Kann die blitzsys.dll genutzt werden? Function DLLMessageBox(m, i, a, u):End Function ; <-, Function DLLSetClipboardText(muh):End Function ; <-+- wenn ja, diese drei Zeilen auskommentieren Function DLLEZGetClipboardText():End Function ; <-' Const Eingabefeld_Texturpfad$ = "Eingabefeld - Texturen\" Const Eingabefeld_Schriftart_Datei$ = Eingabefeld_Texturpfad+"Eingabefeld_verdana1_mod.png" ; Schriftart Const Eingabefeld_Schriftskalierung# = 1.1 ; Darstellungsgröße der Zeichen (für SetFont3D) Global Eingabefeld_Zeichenbreite = 10 ; <-, _ diese beiden Werte müssen angepasst werden, wenn die Global Eingabefeld_Zeichenhoehe = 18 ; <-' Schriftskalierung oder die Schriftart geändert wird Global Eingabefeld_Standardbreite_einfach = 40 ; Angabe in Zeichen Global Eingabefeld_Standardbreite_komplex = 80 ; Angabe in Zeichen Global Eingabefeld_Standardhoehe_komplex = 30 ; Angabe in Zeilen Global Eingabefeld_Animationsdauer_einfach = 100 ; Angabe in Millisekunden Global Eingabefeld_Animationsdauer_komplex = 250 ; Angabe in Millisekunden Global Eingabefeld_CursorBlinkgeschwindigkeit# = 1 ; Angabe in Hertz Global Eingabefeld_KeyRepeatDelay = 500 ; Zeit in Millisek. bis zum 2. Anschlag bei gedrückt gehaltener Taste Global Eingabefeld_KeyRepeatInterval= 75 ; Zeit in Millisek. vom n. bis zum (n+1). Anschlag bei gedrückt gehaltener Taste (n>=2) Global Eingabefeld_DblClickInterval = 250 ; Zeit in Millisek. zwischen zwei Klicks, bei denen gerade noch ein Doppelklick erkannt wird Global Eingabefeld_Tabbreite = 4 ; Größe des maximalen Tabulator-Abstandes in Zeichen Global Eingabefeld_Einrueckung = 1 ; Einrückung der vorigen Zeile beim Zeilenumbruch übernehmen? Global Eingabefeld_Zeilennummern = 1 ; Zeilennummern im komplexen Modus? Global Eingabefeld_Syntaxhighlighting = 1 ; Syntaxhighlighting (im komplexen Modus)? Global Eingabefeld_Syntaxhighlighting_CaseSensitive = -1 ; 1=Syntaxhighlights werden nur bei korrekter Groß-/Kleinschreibung erkannt ; 0=Syntaxhighlights werden bei jeder Schreibweise erkannt ; -1=Syntaxhighlights werden bei jeder Schreibweise erkannt und die Groß-/Kleinschreibung wird automatisch korrigiert Const EFSFarbe_normal =$10000*0 +$100*0 +0 ; Farbcodes nach dem Muster $10000*R +$100*G +B Const EFSFarbe_Datentyp =$10000*130 +$100*50 +170 Const EFSFarbe_Schluesselwort =$10000*0 +$100*40 +120 Const EFSFarbe_MathFunktion =$10000*70 +$100*120 +150 Const EFSFarbe_Funktion =$10000*80 +$100*40 +0 Const EFSFarbe_Operator =$10000*70 +$100*70 +70 Const EFSFarbe_Relation =$10000*70 +$100*70 +70 Const EFSFarbe_Klammer =$10000*70 +$100*70 +70 Const EFSFarbe_Sprungmarke =$10000*230 +$100*70 +70 Const EFSFarbe_String =$10000*50 +$100*180 +0 Const EFSFarbe_Kommentar =$10000*170 +$100*170 +0 Const EFSFarbe_keine = -1 ; keine Farbveränderung, nur Groß-/Kleinschreibkorrektur Const EFSFarbe_Zeilennummer =$10000*180 +$100*180 +180 Const EFSFarbe_Auswahl =$10000*233 +$100*233 +100 Const EFSTyp_Wort = 1 ; "highlighted" den gesuchten String; aber nur, wenn er zwischen Trennzeichen steht Const EFSTyp_Wortteil = 2 ; "highlighted" den gesuchten String überall, wo er gefunden wird Const EFSTyp_Kommentar = 3 ; "highlighted" alles vom gesuchten String bis zum Zeilenende Const EFSTyp_String = 4 ; "highlighted" alles bis einschließlich zum nächsten Auftauchen des gesuchten Strings (oder Zeilenende) Const EFSTyp_Label = 5 ; "highlighted" alles bis zum nächsten Trennzeichen Global Eingabefeld_Trennzeichenliste$=":., ; +-*/%=!<>()\~^"+Chr(34) Function Eingabefeld_setSyntaxhighlights() ; Deklaration aller Syntaxhighlights - diese Funktion wird automatisch bei jedem ; Öffnen eines komplexen Eingabefeldes durchlaufen und kann auch jederzeit manuell ; aufgerufen werden; somit werden dynamische Syntaxhighlights ermöglicht: z.B. ; könnte man, für das Schreiben von Skripten oder Quellcode, eine Suche nach ; Variablendeklarationen in die Funktion Eingabefeld_verarbeite_Zeile einbauen, ; alle gefundenen Variablen in einem Type speichern, und dann mit dieser Funktion ; alle Einträge des Types als Syntaxhighlights deklarieren... Eingabefeld_clearSyntaxhighlights ; ich habe hier zu Demonstrationszwecken mal einige BlitzBasic-Code-kompatible Highlights eingetragen: ; Programmablaufkontrolle Eingabefeld_addSyntaxhighlight "If" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Then" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Else" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "EndIf" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Select" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Case" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Default" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "While" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Wend" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Repeat" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Until" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Forever" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "For" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "To" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Step" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Each" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Next" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Exit" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight ". " , EFSFarbe_Sprungmarke, EFSTyp_Label Eingabefeld_addSyntaxhighlight "Goto" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Function" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Return" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Delay" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "End" , EFSFarbe_Schluesselwort ; Datentypen Eingabefeld_addSyntaxhighlight "%" , EFSFarbe_Datentyp, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "#" , EFSFarbe_Datentyp, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "$" , EFSFarbe_Datentyp, EFSTyp_Wortteil ; Variablendeklarationen Eingabefeld_addSyntaxhighlight "Global" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Const" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Local" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Type" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Field" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "New" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Delete" , EFSFarbe_Schluesselwort ; globale Konstanten Eingabefeld_addSyntaxhighlight "True" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "False" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Null" , EFSFarbe_Schluesselwort ; Bitoperatoren Eingabefeld_addSyntaxhighlight "Not" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "And" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Or" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Xor" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Shr" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Sar" , EFSFarbe_Schluesselwort Eingabefeld_addSyntaxhighlight "Shl" , EFSFarbe_Schluesselwort ; mathematische Funktionen Eingabefeld_addSyntaxhighlight "Mod" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Int" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Float" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Ceil" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Floor" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Abs" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Sgn" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Sqr" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Exp" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Log" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Log10" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Sin" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Cos" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "Tan" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "ASin" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "ACos" , EFSFarbe_MathFunktion Eingabefeld_addSyntaxhighlight "ATan" , EFSFarbe_MathFunktion ; andere Funktionen Eingabefeld_addSyntaxhighlight "Graphics" , EFSFarbe_Funktion Eingabefeld_addSyntaxhighlight "SetBuffer" , EFSFarbe_Funktion Eingabefeld_addSyntaxhighlight "BackBuffer" , EFSFarbe_Funktion Eingabefeld_addSyntaxhighlight "Cls" , EFSFarbe_Funktion Eingabefeld_addSyntaxhighlight "Print" , EFSFarbe_Funktion Eingabefeld_addSyntaxhighlight "LoadImage" , EFSFarbe_Funktion Eingabefeld_addSyntaxhighlight "DrawImage" , EFSFarbe_Funktion Eingabefeld_addSyntaxhighlight "Flip" , EFSFarbe_Funktion Eingabefeld_addSyntaxhighlight "WaitKey" , EFSFarbe_Funktion ; sonstiges Eingabefeld_addSyntaxhighlight "+" , EFSFarbe_Operator, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "-" , EFSFarbe_Operator, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "*" , EFSFarbe_Operator, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "/" , EFSFarbe_Operator, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "^" , EFSFarbe_Operator, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "=" , EFSFarbe_Relation, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight ">" , EFSFarbe_Relation, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "<" , EFSFarbe_Relation, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "(" , EFSFarbe_Klammer, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight ")" , EFSFarbe_Klammer, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight "\" , EFSFarbe_Operator, EFSTyp_Wortteil Eingabefeld_addSyntaxhighlight Chr(34) , EFSFarbe_String, EFSTyp_String Eingabefeld_addSyntaxhighlight ";" , EFSFarbe_Kommentar, EFSTyp_Kommentar End Function Function DrawCursor() ; wenn HidePointer angewandt wurde oder das Programm im Vollbildmodus läuft, muss in dieser ; Funktion der Mauszeiger gezeichnet werden (ob mit DrawImage oder DrawImage3D ist egal) End Function ; ----------------------------------------------------------------------------------------- ;[Block] interne Variablen Global Eingabefeld_hgpixel Global Eingabefeld_hgpanel Global Eingabefeld_feldtex Global Eingabefeld_scrollbutton Global Eingabefeld_scrollpfeil Global Eingabefeld_pixel Global Eingabefeld_schriftart Global Eingabefeld_screencap Global Eingabefeld_Timer=CreateTimer(60) Global Eingabefeld_Trennzeichenliste_Len Global Eingabefeld_ScrollX#, Eingabefeld_ScrollY# Global Eingabefeld_ScrollMaus=0 ; für das Verschieben das Scrollbalkens mit der Maus; 1=horizontal, 2=vertikal Global Eingabefeld_horizScrollbalkenbreite#, Eingabefeld_vertScrollbalkenhoehe# Type EingabefeldZeile Field Text$ Field Len Field Text_mit_Farbcodes$ End Type Global Eingabefeld_CursorS, Eingabefeld_CursorZ ; Spalte und Zeile, Beginn bei 1 Global Eingabefeld_lastCursorS, Eingabefeld_lastCursorZ Global Eingabefeld_AuswahlAS, Eingabefeld_AuswahlAZ ; Startpunkt der Markierung; 0=keine Markierung Global Eingabefeld_AuswahlES, Eingabefeld_AuswahlEZ ; Endpunkt der Markierung; 0=keine Markierung Global Eingabefeld_CursorBlink# ; >=0 und <2, bei >=1 ist der Cursor sichtbar Global Eingabefeld_Mausaktion Global Eingabefeld_lastMillisecs Global Eingabefeld_lastMouseHitMillisecs Global Eingabefeld_komplex Global Eingabefeld_Clipboard$="" Global Eingabefeld_Verarbeitung.EingabefeldZeile Dim Eingabefeld_KeyDown(237) ; speichert in Millisekunden, wie lange die Taste schon gedrückt gehalten wurde Type EingabefeldSyntaxhighlight Field Text$ Field Farbcode Field Typ End Type ;[End Block] Function Eingabefeld$(Titel$, Standardtext$="", Modus=0, PosX#=0, PosY#=0, BreiteZ=-1, HoeheZ=-1, StartposX#=-9999929, StartposY#=-9999929) If StartposX=-9999929 Then StartposX=MouseX3D If StartposY=-9999929 Then StartposY=MouseY3D Eingabefeld_komplex=Modus Eingabefeld_Auswahl_aufheben Eingabefeld_CursorS=1:Eingabefeld_CursorZ=1 Eingabefeld_Trennzeichenliste_Len=Len(Eingabefeld_Trennzeichenliste) If Eingabefeld_komplex Eingabefeld_setSyntaxhighlights If First EingabefeldZeile=Null Then Eingabefeld_addZeile Null, "" Local uz.EingabefeldZeile:For uz=Each EingabefeldZeile:Eingabefeld_verarbeite_Zeile uz:Next ;[Block] Cursor ins Textfeld setzen, falls außerhalb Local s_z_anz_z.EingabefeldZeile=First EingabefeldZeile, s_z_anz=0 While s_z_anz_z<>Null s_z_anz=s_z_anz+1 s_z_anz_z=After s_z_anz_z Wend If Eingabefeld_CursorZ>s_z_anz Then Eingabefeld_CursorZ=s_z_anz If Eingabefeld_CursorZ<1 Then Eingabefeld_CursorZ=1 If Eingabefeld_CursorS>Eingabefeld_getZeilenlaenge(Eingabefeld_CursorZ)+1 Then Eingabefeld_CursorS=Eingabefeld_getZeilenlaenge(Eingabefeld_CursorZ)+1 If Eingabefeld_CursorS<1 Then Eingabefeld_CursorS=1 If Eingabefeld_AuswahlAS=0 And Eingabefeld_AuswahlAZ=0 And Eingabefeld_AuswahlES=0 And Eingabefeld_AuswahlEZ=0 Then Eingabefeld_Auswahl_aufheben ;[End Block] If BreiteZ=-1 Then BreiteZ=Eingabefeld_Standardbreite_komplex If HoeheZ=-1 Then HoeheZ=Eingabefeld_Standardhoehe_komplex Else Eingabefeld_clearSyntaxhighlights Eingabefeld_clear Eingabefeld_addZeile Null, Standardtext Eingabefeld_AuswahlAS=1 Eingabefeld_AuswahlAZ=1 Eingabefeld_AuswahlES=Len(Standardtext)+1 Eingabefeld_AuswahlEZ=1 Eingabefeld_CursorS=Eingabefeld_AuswahlES Eingabefeld_CursorZ=Eingabefeld_AuswahlEZ If BreiteZ=-1 Then BreiteZ=Eingabefeld_Standardbreite_einfach HoeheZ=1 End If Local zeichenbreite=Eingabefeld_Zeichenbreite Local zeichenhoehe=Eingabefeld_Zeichenhoehe Local Breite#=((BreiteZ+1)*zeichenbreite)/2 Local Hoehe#=(HoeheZ*zeichenhoehe)/2 Local grenze_l#=PosX-Breite Local grenze_r#=PosX+Breite Local grenze_o#=PosY+Hoehe Local grenze_u#=PosY-Hoehe Local zeilenanzahl, max_zeilenbreite, z.EingabefeldZeile Local maushit_ Eingabefeld_ScrollX=0:Eingabefeld_ScrollY=0 Eingabefeld_ScrollMaus=0 Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe Eingabefeld_Verarbeitung=Null CopyRect 0, 0, GraphicsWidth(), GraphicsHeight(), 0, 0, BackBuffer(), ImageBuffer(Eingabefeld_screencap) FlushKeys : FlushMouse Local b_dauer:If Eingabefeld_komplex Then b_dauer=Eingabefeld_Animationsdauer_komplex Else b_dauer=Eingabefeld_Animationsdauer_einfach ;[Block] Textbox einblenden Local b_zeitpunkt# If b_dauer>0 Local b_startzeit=MilliSecs() Repeat b_zeitpunkt=1-(b_startzeit+b_dauer-MilliSecs())/Float(b_dauer) If b_zeitpunkt>1 Then b_zeitpunkt=1 Eingabefeld_zeichnen(Titel, PosX, PosY, Breite, Hoehe, BreiteZ, HoeheZ, StartposX, StartposY, Eingabefeld_screencap, b_zeitpunkt, grenze_l#, grenze_r#, grenze_o#, grenze_u#, zeichenbreite, zeichenhoehe, max_zeilenbreite, zeilenanzahl, 0, 0) DrawCursor Flip Until b_zeitpunkt=1 End If b_zeitpunkt=1 ;[End Block] ;[Block] Textbox ist geöffnet Local tbreturn Repeat maushit_=MouseHit(1) zeilenanzahl=0:max_zeilenbreite=0 For z=Each EingabefeldZeile zeilenanzahl=zeilenanzahl+1 If Len(z\Text)>max_zeilenbreite Then max_zeilenbreite=Len(z\Text) Next tbreturn=Eingabefeld_zeichnen(Titel, PosX, PosY, Breite, Hoehe, BreiteZ, HoeheZ, StartposX, StartposY, Eingabefeld_screencap, 1, grenze_l#, grenze_r#, grenze_o#, grenze_u#, zeichenbreite, zeichenhoehe, max_zeilenbreite, zeilenanzahl, maushit_, 1) DrawCursor Flip Until tbreturn ;[End Block] ;[Block] Textbox ausblenden If b_dauer>0 b_startzeit=MilliSecs() Repeat b_zeitpunkt=(b_startzeit+b_dauer-MilliSecs())/Float(b_dauer) If b_zeitpunkt<0 Then b_zeitpunkt=0 Eingabefeld_zeichnen(Titel, PosX, PosY, Breite, Hoehe, BreiteZ, HoeheZ, StartposX, StartposY, Eingabefeld_screencap, b_zeitpunkt, grenze_l#, grenze_r#, grenze_o#, grenze_u#, zeichenbreite, zeichenhoehe, max_zeilenbreite, zeilenanzahl, 0, 0) DrawCursor Flip Until b_zeitpunkt=0 End If b_zeitpunkt=0 ;[End Block] Eingabefeld_AuswahlAS=0:Eingabefeld_AuswahlAZ=0:Eingabefeld_AuswahlES=0:Eingabefeld_AuswahlEZ=0 Clear3D FlushKeys : FlushMouse If Eingabefeld_komplex Return (tbreturn=1) Else If tbreturn=1 Local rzeile.EingabefeldZeile=First EingabefeldZeile Return rzeile\Text Else Return Standardtext End If Eingabefeld_clear End If End Function Function Eingabefeld_Texturen_laden() Eingabefeld_hgpixel = LoadImage3D(Eingabefeld_Texturpfad+"Eingabefeld_pixel.png") Eingabefeld_hgpanel = LoadImage3D(Eingabefeld_Texturpfad+"Eingabefeld_panel.png") Eingabefeld_feldtex = LoadImage3D(Eingabefeld_Texturpfad+"Eingabefeld_textfeld.png") Local Eingabefeld_stex = LoadImage3D(Eingabefeld_Texturpfad+"Eingabefeld_textfeld_scroll.png") Eingabefeld_scrollbutton= GrabImage3D(Eingabefeld_stex, 0, 0, 26, 26) Eingabefeld_scrollpfeil = GrabImage3D(Eingabefeld_stex, 27, 23, 5, 9) Eingabefeld_pixel = LoadImage3D(Eingabefeld_Texturpfad+"Eingabefeld_pixel.png") Eingabefeld_schriftart = LoadFont3D(Eingabefeld_Schriftart_Datei) Eingabefeld_screencap = CreateImage(GraphicsWidth(), GraphicsHeight()) End Function Function Eingabefeld_addZeile.EingabefeldZeile(nachfolgerzeile.EingabefeldZeile, z_text$) Local z.EingabefeldZeile=New EingabefeldZeile If nachfolgerzeile.EingabefeldZeile<>Null Then Insert z Before nachfolgerzeile Eingabefeld_modifyZeile z, z_text Return z End Function Function Eingabefeld_modifyZeile(zeile.EingabefeldZeile, neuer_text$) zeile\Text=neuer_text Return Eingabefeld_verarbeite_Zeile(zeile) End Function Function Eingabefeld_getZeile.EingabefeldZeile(zeilennr) If zeilennr<1 Then Return Null Local zeile.EingabefeldZeile=First EingabefeldZeile Local znr For znr=1 To zeilennr-1 If zeile=Null Then Return Null zeile=After zeile Next Return zeile End Function Function Eingabefeld_getZeilenlaenge(zeilennr) Local zeile.EingabefeldZeile=Eingabefeld_getZeile(zeilennr) If zeile=Null Then Return 0 Else Return zeile\Len End Function Function Eingabefeld_clear() Delete Each EingabefeldZeile End Function Function Eingabefeld_zeichnen(Titel$, PosX#, PosY#, Breite#, Hoehe#, BreiteZ, HoeheZ, StartposX#, StartposY#, bg, zeitpunkt#, grenze_l#, grenze_r#, grenze_o#, grenze_u#, zeichenbreite, zeichenhoehe, max_zeilenbreite, zeilenanzahl, maushit, eingabe) WaitTimer(Eingabefeld_Timer) ;[Block] Box mit Beschriftung DrawBlock bg, 0, 0 ColorN3D 0, 0, 0, zeitpunkt*.35 Rect3D Eingabefeld_hgpixel, 0, 0, 1000, 1000, 1, 0 ColorN3D 230, 230, 230, zeitpunkt Rect3D Eingabefeld_hgpanel, zeitpunkt*(PosX+10)+(1-zeitpunkt)*StartposX, zeitpunkt*(PosY+12-10)+(1-zeitpunkt)*StartposY, zeitpunkt*(Breite+3+10), zeitpunkt*(Hoehe+15+10), 1, 3*zeitpunkt ColorN3D 255, 255, 255, zeitpunkt Rect3D Eingabefeld_feldtex, zeitpunkt*PosX+(1-zeitpunkt)*StartposX, zeitpunkt*PosY+(1-zeitpunkt)*StartposY, zeitpunkt*Breite, zeitpunkt*Hoehe, 1, 3*zeitpunkt ColorN3D SetFont3D 1.1, 1.25 ColorT3D 0, 0, 0 Text3D Eingabefeld_schriftart, zeitpunkt*(PosX-Breite+4)+(1-zeitpunkt)*StartposX, zeitpunkt*(PosY+Hoehe+16)+(1-zeitpunkt)*StartposY, Eingabefeld_Begrenzung(Titel, (2*Breite-8)*zeitpunkt) ;[End Block] If zeitpunkt>.99 Local zeilennummerbreite=(Eingabefeld_komplex And Eingabefeld_Zeilennummern)*Len(zeilenanzahl) BreiteZ=BreiteZ-zeilennummerbreite If KeyHit(221) Then Eingabefeld_Zeilennummern=1-Eingabefeld_Zeilennummern ;[Block] Scrollbalken Local sba1=Breite-18 If Eingabefeld_Scrollbalken_zeichnen(PosX, PosY-Hoehe-13, 0, sba1, (max_zeilenbreite>BreiteZ), Breite, Hoehe, zeichenbreite, zeichenhoehe, max_zeilenbreite+zeilennummerbreite, zeilenanzahl, grenze_l, grenze_r, grenze_o, grenze_u) If maushit Then Eingabefeld_ScrollMaus=1 End If Local sba2=Hoehe-18 If Eingabefeld_Scrollbalken_zeichnen(PosX+Breite+13, PosY, 1, sba2, (Eingabefeld_komplex And zeilenanzahl>HoeheZ), Breite, Hoehe, zeichenbreite, zeichenhoehe, max_zeilenbreite+zeilennummerbreite, zeilenanzahl, grenze_l, grenze_r, grenze_o, grenze_u) If maushit Then Eingabefeld_ScrollMaus=2 End If If Not MouseDown(1) Then Eingabefeld_ScrollMaus=0 If Eingabefeld_ScrollMaus=1 Then Eingabefeld_ScrollX=(.5*(((MouseX3D-PosX)-Eingabefeld_horizScrollbalkenbreite)/1024.*(GraphicsWidth()/Float(sba1)))+.5)*(max_zeilenbreite*zeichenbreite) If Eingabefeld_ScrollMaus=2 Then Eingabefeld_ScrollY=(.5*((-(MouseY3D-PosY)-Eingabefeld_vertScrollbalkenhoehe)/768.*(GraphicsHeight()/Float(sba2)))+.5)*(zeilenanzahl*zeichenhoehe) If Eingabefeld_Scrollbutton_zeichnen(PosX-Breite+7, PosY-Hoehe-13, 180, (max_zeilenbreite>BreiteZ), MouseDown(1)) Then Eingabefeld_ScrollX=Eingabefeld_ScrollX-zeichenbreite:Delay 100 If Eingabefeld_Scrollbutton_zeichnen(PosX+Breite-7, PosY-Hoehe-13, 0, (max_zeilenbreite>BreiteZ), MouseDown(1)) Then Eingabefeld_ScrollX=Eingabefeld_ScrollX+zeichenbreite:Delay 100 If Eingabefeld_Scrollbutton_zeichnen(PosX+Breite+13, PosY+Hoehe-7, 270, Eingabefeld_komplex*(zeilenanzahl>HoeheZ), MouseDown(1), (HoeheZ<=1)) Then Eingabefeld_ScrollY=Eingabefeld_ScrollY-zeichenhoehe:Delay 100 If Eingabefeld_Scrollbutton_zeichnen(PosX+Breite+13, PosY-Hoehe+7, 90, Eingabefeld_komplex*(zeilenanzahl>HoeheZ), MouseDown(1), (HoeheZ<=1)) Then Eingabefeld_ScrollY=Eingabefeld_ScrollY+zeichenhoehe:Delay 100 If (HoeheZ>1); And RectsOverlap(grenze_l, grenze_u, grenze_r-grenze_l, grenze_o-grenze_u, MouseX3D, MouseY3D, 1, 1) If KeyDown(42) Or KeyDown(54) Then Eingabefeld_ScrollX=Eingabefeld_ScrollX-3*zeichenbreite*MouseZSpeed() Else Eingabefeld_ScrollY=Eingabefeld_ScrollY-zeichenhoehe*MouseZSpeed() Else MouseZSpeed() End If Eingabefeld_Scrollposition_begrenzen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe, max_zeilenbreite, zeilenanzahl ;[End Block] ;[Block] Text SetFont3D Eingabefeld_Schriftskalierung Local z.EingabefeldZeile, znr=0, zeichen, textx#, texty#, farbe_zeichen_verbleibend, lenplus, fcspos, fcepos, fc, ise, sis=0 If First EingabefeldZeile=Null Then Eingabefeld_addZeile Null, "" For z=Each EingabefeldZeile znr=znr+1 texty=Eingabefeld_ScrollY+PosY+Hoehe+9-zeichenhoehe*znr If texty+7>grenze_o Then Goto continue_foreach If texty-7<grenze_u Then Exit If sis=0 Then If z\Text_mit_Farbcodes="" Then If z\Text<>"" Then Eingabefeld_Verarbeitung=z:sis=2 lenplus=0 farbe_zeichen_verbleibend=0 ise=z\Len+(z\Len=0) For zeichen=1 To ise textx=-Eingabefeld_ScrollX+PosX-Breite+zeichenbreite*(zeichen+zeilennummerbreite) If zeichen=1 If Eingabefeld_komplex And Eingabefeld_Zeilennummern ColorT3D (EFSFarbe_Zeilennummer And $FF0000)/$10000, (EFSFarbe_Zeilennummer And $FF00)/$100, EFSFarbe_Zeilennummer And $FF Text3D Eingabefeld_schriftart, PosX-Breite+zeichenbreite*zeilennummerbreite, texty, znr, 2 End If ColorT3D (EFSFarbe_normal And $FF0000)/$10000, (EFSFarbe_normal And $FF00)/$100, EFSFarbe_normal And $FF End If ;[Block] Farben Repeat fcspos=zeichen+lenplus+1 If Not Mid(z\Text_mit_Farbcodes, fcspos-1, 1)=Chr(8) Then Exit fcepos=Instr(z\Text_mit_Farbcodes, Chr(8), fcspos) fc=Mid(z\Text_mit_Farbcodes, fcspos, fcepos-fcspos) ColorT3D (fc And $FF0000)/$10000, (fc And $FF00)/$100, fc And $FF lenplus=lenplus+(fcepos-fcspos)+2 Forever ;[End Block] If textx-5<grenze_l+zeilennummerbreite*zeichenbreite Then Goto continue_for If textx+5>grenze_r Then Exit ;[Block] Mausaktion If Eingabefeld_Mausaktion If MouseY3D>texty-zeichenhoehe/2-1 And MouseY3D<texty+zeichenhoehe/2+1 If MouseX3D>textx-zeichenbreite-1 And MouseX3D<textx+1 Eingabefeld_CursorS=zeichen Eingabefeld_CursorZ=znr Eingabefeld_CursorBlink=1 If Eingabefeld_Mausaktion=1 Then Eingabefeld_Auswahl_aufheben Else Eingabefeld_Auswahl_an_Cursor_angleichen ElseIf zeichen=ise If MouseX3D>textx-1 Eingabefeld_CursorS=zeichen+(z\Len>0) Eingabefeld_CursorZ=znr Eingabefeld_CursorBlink=1 If Eingabefeld_Mausaktion=1 Then Eingabefeld_Auswahl_aufheben Else Eingabefeld_Auswahl_an_Cursor_angleichen End If ElseIf zeichen=1 If MouseX3D<textx+1 If Eingabefeld_Mausaktion=1 Eingabefeld_Auswahl_aufheben Eingabefeld_lastCursorS=1 Eingabefeld_lastCursorZ=znr Eingabefeld_CursorS=1 Eingabefeld_CursorZ=znr+1 Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 0 Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_CursorS=1 Eingabefeld_CursorZ=znr Eingabefeld_CursorBlink=1 Eingabefeld_Auswahl_an_Cursor_angleichen End If End If End If End If End If ;[End Block] ;[Block] Text Text3D Eingabefeld_schriftart, textx, texty, Mid(z\Text, zeichen, 1), 1 ;[End Block] ;[Block] Auswahl If Eingabefeld_Auswahl_vorhanden() And z\Len>0 If (Eingabefeld_AuswahlAZ<znr And Eingabefeld_AuswahlEZ>znr) Or (Eingabefeld_AuswahlAZ=znr And Eingabefeld_AuswahlEZ>znr And zeichen>=Eingabefeld_AuswahlAS) Or (Eingabefeld_AuswahlAZ<znr And Eingabefeld_AuswahlEZ=znr And zeichen<Eingabefeld_AuswahlES) Or (Eingabefeld_AuswahlAZ=znr And Eingabefeld_AuswahlEZ=znr And zeichen>=Eingabefeld_AuswahlAS And zeichen<Eingabefeld_AuswahlES) ColorN3D (EFSFarbe_Auswahl And $FF0000)/$10000, (EFSFarbe_Auswahl And $FF00)/$100, EFSFarbe_Auswahl And $FF Rect3D Eingabefeld_pixel, textx, texty, zeichenbreite/2, zeichenhoehe/2, 1, 0 ColorN3D End If End If ;[End Block] ;[Block] Cursor If Eingabefeld_CursorZ=znr And (Eingabefeld_CursorS=zeichen+1 Or (Eingabefeld_CursorS=1 And zeichen=1)) If Eingabefeld_CursorBlink>=1 ColorN3D 0, 0, 0 If Eingabefeld_CursorS=1 Then Rect3D Eingabefeld_pixel, textx-zeichenbreite/2-1, texty, 1, zeichenhoehe/2, 1, 0 Else Rect3D Eingabefeld_pixel, textx+zeichenbreite/2-1, texty, 1, zeichenhoehe/2, 1, 0 ColorN3D End If End If Eingabefeld_lastCursorS=Eingabefeld_CursorS:Eingabefeld_lastCursorZ=Eingabefeld_CursorZ ;[End Block] .continue_for Next .continue_foreach Next ColorT3D Repeat If Eingabefeld_Verarbeitung=Null Then Eingabefeld_Verarbeitung=First EingabefeldZeile If Eingabefeld_Verarbeitung\Text_mit_Farbcodes="" Then If Eingabefeld_Verarbeitung\Text<>"" Then Eingabefeld_verarbeite_Zeile Eingabefeld_Verarbeitung, 1 Eingabefeld_Verarbeitung=After Eingabefeld_Verarbeitung sis=sis-1 Until sis=-1 ;[End Block] End If RenderWorld 0 Clear3D If eingabe Local ms_plus=MilliSecs()-Eingabefeld_lastMillisecs:Eingabefeld_lastMillisecs=MilliSecs() Eingabefeld_CursorBlink=Eingabefeld_CursorBlink+Eingabefeld_CursorBlinkgeschwindigkeit*.002*ms_plus If Eingabefeld_CursorBlink>=2 Then Eingabefeld_CursorBlink=Eingabefeld_CursorBlink-2 ;[Block] Tastenabfrage Local sckd:For sckd=1 To 237:Eingabefeld_KeyDown(sckd)=(Eingabefeld_KeyDown(sckd)+ms_plus)*KeyDown(sckd):Next Local GetKey_=GetKey() Local veraenderung=0 Select True ;[Block] hoch Case KeyHit(200) Or Eingabefeld_KeyDown(200)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 200 Eingabefeld_CursorZ=Eingabefeld_CursorZ-1 Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 0 If KeyDown(42) Or KeyDown(54) Then Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] runter Case KeyHit(208) Or Eingabefeld_KeyDown(208)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 208 Eingabefeld_CursorZ=Eingabefeld_CursorZ+1 Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 0 If KeyDown(42) Or KeyDown(54) Then Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] links Case KeyHit(203) Or Eingabefeld_KeyDown(203)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 203 Repeat Eingabefeld_CursorS=Eingabefeld_CursorS-1 Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 1 If Not (KeyDown(29) Or KeyDown(157)) Then Exit If Eingabefeld_isTrennzeichen(Eingabefeld_Zeichen(Eingabefeld_CursorS-1, Eingabefeld_CursorZ)) Or Eingabefeld_isTrennzeichen(Eingabefeld_Zeichen(Eingabefeld_CursorS, Eingabefeld_CursorZ)) Then Exit Forever If KeyDown(42) Or KeyDown(54) Then Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] rechts Case KeyHit(205) Or Eingabefeld_KeyDown(205)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 205 Repeat Eingabefeld_CursorS=Eingabefeld_CursorS+1 Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 1 If Not (KeyDown(29) Or KeyDown(157)) Then Exit If Eingabefeld_isTrennzeichen(Eingabefeld_Zeichen(Eingabefeld_CursorS, Eingabefeld_CursorZ)) Or Eingabefeld_isTrennzeichen(Eingabefeld_Zeichen(Eingabefeld_CursorS-1, Eingabefeld_CursorZ)) Then Exit Forever If KeyDown(42) Or KeyDown(54) Then Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] Pos1 Case KeyHit(199) If KeyDown(29) Or KeyDown(157) Then Eingabefeld_CursorZ=1 Eingabefeld_CursorS=1 If KeyDown(42) Or KeyDown(54) Then Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] Ende Case KeyHit(207) If KeyDown(29) Or KeyDown(157) Then Eingabefeld_CursorZ=zeilenanzahl Eingabefeld_CursorS=Eingabefeld_getZeilenlaenge(Eingabefeld_CursorZ)+1 If KeyDown(42) Or KeyDown(54) Then Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] Bild auf Case KeyHit(201) Or Eingabefeld_KeyDown(202)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 201 Eingabefeld_CursorZ=Eingabefeld_CursorZ-HoeheZ Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 0 If KeyDown(42) Or KeyDown(54) Then Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] Bild ab Case KeyHit(209) Or Eingabefeld_KeyDown(209)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 209 Eingabefeld_CursorZ=Eingabefeld_CursorZ+HoeheZ Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 0 If KeyDown(42) Or KeyDown(54) Then Eingabefeld_Auswahl_an_Cursor_angleichen Else Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe ;[End Block] ;[Block] Strg+A Case (KeyDown(29) Or KeyDown(157)) And KeyDown(30) If KeyHit(30) Local Last_EingabefeldZeile.EingabefeldZeile=Last EingabefeldZeile Eingabefeld_AuswahlAS=1 Eingabefeld_AuswahlAZ=1 Eingabefeld_AuswahlES=Last_EingabefeldZeile\Len+1 Eingabefeld_AuswahlEZ=zeilenanzahl Eingabefeld_CursorS=Eingabefeld_AuswahlES Eingabefeld_CursorZ=Eingabefeld_AuswahlEZ Eingabefeld_CursorBlink=1 End If ;[End Block] ;[Block] Strg+X / Umschalt+Entf Case ((KeyDown(29) Or KeyDown(157)) And KeyDown(45)) Or ((KeyDown(42) Or KeyDown(54)) And KeyDown(211)) If KeyHit(45) Or KeyHit(211) If Eingabefeld_Auswahl_vorhanden() Eingabefeld_Auswahl_kopieren Eingabefeld_Auswahl_loeschen Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe veraenderung=1 End If End If ;[End Block] ;[Block] Strg+C / Strg+Einfg Case (KeyDown(29) Or KeyDown(157)) And (KeyDown(46) Or KeyDown(210)) If KeyHit(46) Or KeyHit(210) If Eingabefeld_Auswahl_vorhanden() Eingabefeld_Auswahl_kopieren Eingabefeld_CursorBlink=1 veraenderung=1 End If End If ;[End Block] ;[Block] Strg+V / Umschalt+Einfg Case ((KeyDown(29) Or KeyDown(157)) And KeyDown(47)) Or ((KeyDown(42) Or KeyDown(54)) And KeyDown(210)) If KeyHit(47) Or KeyHit(210) Eingabefeld_einfuegen Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe veraenderung=1 End If ;[End Block] ;[Block] Entf Case KeyHit(211) Or Eingabefeld_KeyDown(211)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 211 If Not Eingabefeld_Auswahl_vorhanden() Eingabefeld_CursorS=Eingabefeld_CursorS+1 Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 1 Eingabefeld_Auswahl_an_Cursor_angleichen End If Eingabefeld_Auswahl_loeschen Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe veraenderung=1 ;[End Block] ;[Block] Rücktaste Case KeyHit(14) Or Eingabefeld_KeyDown(14)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 14 If Not Eingabefeld_Auswahl_vorhanden() Eingabefeld_CursorS=Eingabefeld_CursorS-1 Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 1 Eingabefeld_Auswahl_an_Cursor_angleichen End If Eingabefeld_Auswahl_loeschen Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe veraenderung=1 ;[End Block] ;[Block] Eingabetaste Case KeyDown(28) Or KeyDown(156) If Eingabefeld_komplex If KeyHit(28) Or KeyHit(156) Or Eingabefeld_KeyDown(28)>Eingabefeld_KeyRepeatDelay Or Eingabefeld_KeyDown(156)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 28 Eingabefeld_KeyDown_CoolDown 156 If Eingabefeld_Auswahl_vorhanden() Then Eingabefeld_Auswahl_loeschen Local azeile.EingabefeldZeile=Eingabefeld_getZeile(Eingabefeld_CursorZ) Local nzeile.EingabefeldZeile=Eingabefeld_addZeile(Eingabefeld_getZeile(Eingabefeld_CursorZ+1), Mid(azeile\Text, Eingabefeld_CursorS)) Eingabefeld_modifyZeile azeile, Left(azeile\Text, Eingabefeld_CursorS-1) Eingabefeld_CursorZ=Eingabefeld_CursorZ+1 If Eingabefeld_Einrueckung Local einr=0 For einr=0 To azeile\Len-1 If Mid(azeile\Text, einr+1, 1)<>" " Then Exit Next Eingabefeld_modifyZeile nzeile, String(" ", einr)+nzeile\Text Eingabefeld_CursorS=einr+1 Else Eingabefeld_CursorS=1 End If Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe veraenderung=1 End If Else If KeyHit(28) Or KeyHit(156) Then Return 1 End If ;[End Block] ;[Block] Tab Case KeyHit(15) Or Eingabefeld_KeyDown(15)>Eingabefeld_KeyRepeatDelay Eingabefeld_KeyDown_CoolDown 15 If Eingabefeld_Auswahl_vorhanden() Then Eingabefeld_Auswahl_loeschen Local tzeile.EingabefeldZeile=Eingabefeld_getZeile(Eingabefeld_CursorZ) Eingabefeld_CursorS=Eingabefeld_CursorS+Eingabefeld_modifyZeile(tzeile, Left(tzeile\Text, Eingabefeld_CursorS-1)+Chr(9)+Mid(tzeile\Text, Eingabefeld_CursorS)) Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe veraenderung=1 ;[End Block] ;[Block] ESC Case KeyHit(1) If Eingabefeld_komplex If Eingabefeld_BlitzSys_vorhanden Select DLLMessageBox("Eingabefeld", "Änderungen speichern?", MB_TOPMOST+MB_YESNOCANCEL+MB_ICONQUESTION, 0) Case IDYES: Return 1 Case IDNO: Return 2 End Select Else Return 1 End If Else Return 2 End If ;[End Block] ;[Block] druckbare Zeichen Case GetKey_>=32 If Eingabefeld_Auswahl_vorhanden() Then Eingabefeld_Auswahl_loeschen Local szeile.EingabefeldZeile=Eingabefeld_getZeile(Eingabefeld_CursorZ) Local neueszeichen$=Chr(GetKey_) If neueszeichen="-" Then If KeyHit(181) Then neueszeichen="/" Eingabefeld_modifyZeile szeile, Left(szeile\Text, Eingabefeld_CursorS-1)+neueszeichen+Mid(szeile\Text, Eingabefeld_CursorS) Eingabefeld_CursorS=Eingabefeld_CursorS+1 Eingabefeld_Auswahl_aufheben Eingabefeld_CursorBlink=1 Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe veraenderung=1 ;[End Block] End Select If veraenderung Then Eingabefeld_verarbeite_Zeile Eingabefeld_getZeile(Eingabefeld_CursorZ), 1 ;[End Block] ;[Block] Mausabfrage (Cursor und Auswahl) If RectsOverlap(grenze_l, grenze_u, grenze_r-grenze_l, grenze_o-grenze_u, MouseX3D, MouseY3D, 1, 1) If maushit If KeyDown(42) Or KeyDown(54) Eingabefeld_Mausaktion=2 Else If MilliSecs()-Eingabefeld_lastMouseHitMillisecs<Eingabefeld_DblClickInterval ;[Block] Wort markieren durch Doppelklick Repeat If Eingabefeld_isTrennzeichen(Eingabefeld_Zeichen(Eingabefeld_CursorS-1, Eingabefeld_CursorZ)) Or Eingabefeld_isTrennzeichen(Eingabefeld_Zeichen(Eingabefeld_CursorS, Eingabefeld_CursorZ)) Then Exit Eingabefeld_CursorS=Eingabefeld_CursorS-1 Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 0 Forever Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe Eingabefeld_Auswahl_aufheben Eingabefeld_lastCursorS=Eingabefeld_CursorS Eingabefeld_lastCursorZ=Eingabefeld_CursorZ Repeat Eingabefeld_CursorS=Eingabefeld_CursorS+1 Eingabefeld_Cursorposition_korrigieren zeilenanzahl, 0 If Eingabefeld_isTrennzeichen(Eingabefeld_Zeichen(Eingabefeld_CursorS, Eingabefeld_CursorZ)) Or Eingabefeld_isTrennzeichen(Eingabefeld_Zeichen(Eingabefeld_CursorS-1, Eingabefeld_CursorZ)) Then Exit Forever Eingabefeld_Sichtfeld_an_Cursor_angleichen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe Eingabefeld_Auswahl_an_Cursor_angleichen ;[End Block] Eingabefeld_Mausaktion=0 Else Eingabefeld_Mausaktion=1 End If End If Eingabefeld_lastMouseHitMillisecs=MilliSecs() ElseIf MouseDown(1) If Eingabefeld_Mausaktion=1 Then Eingabefeld_Mausaktion=2 Else Eingabefeld_Mausaktion=0 End If Else If Not MouseDown(1) Then Eingabefeld_Mausaktion=0 End If ;[End Block] End If Return 0 End Function Function Eingabefeld_Scrollbutton_zeichnen(sbx#, sby#, pw#, aktiv, maushit, halbe_y_groesse=0) Local r=0 If halbe_y_groesse Then sby=sby+5*(2*(pw>180)-1) If aktiv Then ColorN3D 230, 230, 230 Else ColorN3D 230, 230, 230, .5 Rect3D Eingabefeld_scrollbutton, sbx, sby, 7, 7-halbe_y_groesse*5, 1, 3 ColorN3D CheckQuad3D sbx-10, sby-10+halbe_y_groesse*5, sbx-10, sby+10-halbe_y_groesse*5, sbx+10, sby+10-halbe_y_groesse*5, sbx+10, sby-10+halbe_y_groesse*5, 1 If aktiv And MouseOver3D Rect3D Eingabefeld_scrollbutton, sbx, sby, 7, 7-halbe_y_groesse*5, 1, 3 If maushit Then r=1 End If If aktiv Then ColorG3D 0, 0, 0 Else ColorG3D 0, 0, 0, .3 DrawImage3D Eingabefeld_scrollpfeil, sbx, sby, 0, pw ColorG3D Return r End Function Function Eingabefeld_Scrollbalken_zeichnen(sbx#, sby#, vertikal, max_groesse#, aktiv, Breite#, Hoehe#, zeichenbreite, zeichenhoehe, max_zeilenbreite, zeilenanzahl, grenze_l#, grenze_r#, grenze_o#, grenze_u#) If Not aktiv Then Return 0 Local groesse_x#=7*vertikal+(2*max_groesse*((Breite-20)/(zeichenbreite*(max_zeilenbreite+1))))*(1-vertikal) Local groesse_y#=7*(1-vertikal)+(2*max_groesse*((Hoehe-20)/(zeichenhoehe*zeilenanzahl)))*vertikal If groesse_x<4 Then groesse_x=4 If groesse_y<4 Then groesse_y=4 If vertikal Then Eingabefeld_vertScrollbalkenhoehe=groesse_y Else Eingabefeld_horizScrollbalkenbreite=groesse_x Local x#=sbx+(max_groesse-groesse_x) * (2*Eingabefeld_ScrollX/Float(zeichenbreite*(max_zeilenbreite+1)-(grenze_r-grenze_l))-1) *(1-vertikal) Local y#=sby+(max_groesse-groesse_y) * -(2*Eingabefeld_ScrollY/Float(zeichenhoehe*zeilenanzahl-(grenze_o-grenze_u))-1) *vertikal If x=0 And x=1 Then x=sbx If y=0 And y=1 Then y=sby ColorN3D 230, 230, 230 Rect3D Eingabefeld_scrollbutton, x, y, groesse_x, groesse_y, 1, 3 ColorN3D CheckQuad3D x-groesse_x, y-groesse_y, x-groesse_x, y+groesse_y, x+groesse_x, y+groesse_y, x+groesse_x, y-groesse_y, 1 If MouseOver3D Rect3D Eingabefeld_scrollbutton, x, y, groesse_x, groesse_y, 1, 3 Return 1 End If Return 0 End Function Function Eingabefeld_Scrollposition_begrenzen(grenze_l#, grenze_r#, grenze_o#, grenze_u#, zeichenbreite, zeichenhoehe, max_zeilenbreite, zeilenanzahl) Local zeilennummerbreite=(Eingabefeld_komplex And Eingabefeld_Zeilennummern)*Len(zeilenanzahl) If Eingabefeld_ScrollX>zeichenbreite*(max_zeilenbreite+1+zeilennummerbreite)-(grenze_r-grenze_l) Then Eingabefeld_ScrollX=zeichenbreite*(max_zeilenbreite+1+zeilennummerbreite)-(grenze_r-grenze_l) If Eingabefeld_ScrollY>zeichenhoehe*(zeilenanzahl)-(grenze_o-grenze_u) Then Eingabefeld_ScrollY=zeichenhoehe*(zeilenanzahl)-(grenze_o-grenze_u) If Eingabefeld_ScrollX<0 Then Eingabefeld_ScrollX=0 If Eingabefeld_ScrollY<0 Then Eingabefeld_ScrollY=0 End Function Function Eingabefeld_addSyntaxhighlight(txt$, farbcode, typ=EFSTyp_Wort) Local n.EingabefeldSyntaxhighlight=New EingabefeldSyntaxhighlight n\Text=txt n\Farbcode=farbcode n\Typ=typ End Function Function Eingabefeld_clearSyntaxhighlights() Delete Each EingabefeldSyntaxhighlight End Function Function Eingabefeld_verarbeite_Zeile(zeile.EingabefeldZeile, gruendlich=0) Local ztmp$, tabbreite=0 zeile\Len=Len(zeile\Text) Local zz=1 While zz<=zeile\Len ;[Block] Tabs durch Leerzeichen ersetzen If Asc(Mid(zeile\Text, zz, 1))=9 ztmp=Left(zeile\Text, zz-1) tabbreite=Eingabefeld_Tabbreite-((zz-1) Mod Eingabefeld_Tabbreite):If tabbreite=0 Then tabbreite=Eingabefeld_Tabbreite ztmp=ztmp+String(" ", tabbreite) ztmp=ztmp+Mid(zeile\Text, zz+1) zeile\Text=ztmp End If ;[End Block] zz=zz+1 Wend zeile\Len=Len(zeile\Text) If gruendlich If Eingabefeld_komplex ;[Block] Syntax-Highlighting If Eingabefeld_Syntaxhighlighting Local h.EingabefeldSyntaxhighlight, z_a$, asc_z_a, z_l1$, farbe_zeichen_verbleibend=0, ph_str$, htext_len, zeichen, lenplus, normalfarbe, abngz Local zeile_pruef$, hText_pruef$, txtnf$ If Eingabefeld_Syntaxhighlighting_CaseSensitive=1 Then zeile_pruef=zeile\Text Else zeile_pruef=Lower(zeile\Text) zeile\Text_mit_Farbcodes=zeile\Text lenplus=0 normalfarbe=1 For zeichen=1 To zeile\Len z_a=Mid(zeile\Text, zeichen, 1) asc_z_a=Asc(z_a) If farbe_zeichen_verbleibend>-1 Then farbe_zeichen_verbleibend=farbe_zeichen_verbleibend-1 If farbe_zeichen_verbleibend=-1 Then farbe_zeichen_verbleibend=0 If farbe_zeichen_verbleibend=0 If zeichen>1 Then z_l1=Mid(zeile_pruef, zeichen-1, 1) Else z_l1="" For h=Each EingabefeldSyntaxhighlight If Eingabefeld_Syntaxhighlighting_CaseSensitive=1 Then hText_pruef=h\Text Else hText_pruef=Lower(h\Text) htext_len=Len(hText_pruef) ph_str=Mid(zeile_pruef, zeichen, htext_len) If Asc(ph_str)=Asc(hText_pruef) If Eingabefeld_isTrennzeichen(z_l1) Or h\Typ<>EFSTyp_Wort If Eingabefeld_isTrennzeichen(Mid(zeile_pruef, zeichen+htext_len, 1)) Or h\Typ<>EFSTyp_Wort If ph_str=hText_pruef If Eingabefeld_Syntaxhighlighting_CaseSensitive=-1 txtnf=hText_pruef+Mid(zeile\Text_mit_Farbcodes, zeichen+lenplus+htext_len) zeile\Text=Left(zeile\Text, zeichen-1)+h\Text+Mid(zeile\Text, zeichen+htext_len) Else txtnf=Mid(zeile\Text_mit_Farbcodes, zeichen+lenplus) End If If h\Farbcode<>-1 zeile\Text_mit_Farbcodes=Left(zeile\Text_mit_Farbcodes, zeichen-1+lenplus)+Chr(8)+h\Farbcode+Chr(8)+txtnf lenplus=lenplus+Len(h\Farbcode)+2 normalfarbe=0 If h\Typ=EFSTyp_String abngz=Instr(zeile_pruef, hText_pruef, zeichen+htext_len) If abngz=0 Then Goto highlighting_beendet Else abngz=abngz-(zeichen+htext_len) farbe_zeichen_verbleibend=2*htext_len+abngz ElseIf h\Typ=EFSTyp_Label abngz=zeichen+htext_len farbe_zeichen_verbleibend=htext_len While Not Eingabefeld_isTrennzeichen(Mid(zeile_pruef, abngz, 1)) farbe_zeichen_verbleibend=farbe_zeichen_verbleibend+1 abngz=abngz+1 If abngz=zeile\Len+1 Then Goto highlighting_beendet Wend Else farbe_zeichen_verbleibend=htext_len End If If h\Typ=EFSTyp_Kommentar Then Goto highlighting_beendet Else Goto highlight_gefunden End If End If End If End If End If Next If Not normalfarbe zeile\Text_mit_Farbcodes=Left(zeile\Text_mit_Farbcodes, zeichen-1+lenplus)+Chr(8)+EFSFarbe_normal+Chr(8)+Mid(zeile\Text_mit_Farbcodes, zeichen+lenplus) lenplus=lenplus+Len(EFSFarbe_normal)+2 normalfarbe=1 End If ElseIf farbe_zeichen_verbleibend<-1 If asc_z_a=-farbe_zeichen_verbleibend farbe_zeichen_verbleibend=0 normalfarbe=0 Goto highlight_gefunden End If End If .highlight_gefunden Next .highlighting_beendet End If ;[End Block] End If Else zeile\Text_mit_Farbcodes="" End If Return tabbreite End Function Function Eingabefeld_isTrennzeichen(zeichen$) If zeichen="" Then Return 1 Local t:For t=1 To Eingabefeld_Trennzeichenliste_Len If zeichen=Mid(Eingabefeld_Trennzeichenliste, t, 1) Then Return 1 Next Return 0 End Function Function Eingabefeld_Auswahl_an_Cursor_angleichen() If Eingabefeld_lastCursorS=Eingabefeld_AuswahlAS And Eingabefeld_lastCursorZ=Eingabefeld_AuswahlAZ Eingabefeld_AuswahlAS=Eingabefeld_CursorS Eingabefeld_AuswahlAZ=Eingabefeld_CursorZ ElseIf Eingabefeld_lastCursorS=Eingabefeld_AuswahlES And Eingabefeld_lastCursorZ=Eingabefeld_AuswahlEZ Eingabefeld_AuswahlES=Eingabefeld_CursorS Eingabefeld_AuswahlEZ=Eingabefeld_CursorZ Else Eingabefeld_Auswahl_aufheben End If If (Eingabefeld_AuswahlAZ=Eingabefeld_AuswahlEZ And Eingabefeld_AuswahlAS>Eingabefeld_AuswahlES) Or (Eingabefeld_AuswahlAZ>Eingabefeld_AuswahlEZ) Local ts=Eingabefeld_AuswahlAS, tz=Eingabefeld_AuswahlAZ Eingabefeld_AuswahlAS=Eingabefeld_AuswahlES Eingabefeld_AuswahlAZ=Eingabefeld_AuswahlEZ Eingabefeld_AuswahlES=ts Eingabefeld_AuswahlEZ=tz End If End Function Function Eingabefeld_Auswahl_aufheben() Eingabefeld_AuswahlAS=Eingabefeld_CursorS Eingabefeld_AuswahlAZ=Eingabefeld_CursorZ Eingabefeld_AuswahlES=Eingabefeld_CursorS Eingabefeld_AuswahlEZ=Eingabefeld_CursorZ End Function Function Eingabefeld_Auswahl_vorhanden() If Eingabefeld_AuswahlAS<>Eingabefeld_AuswahlES Then Return 1 If Eingabefeld_AuswahlAZ<>Eingabefeld_AuswahlEZ Then Return 1 Return 0 End Function Function Eingabefeld_Auswahl_loeschen() Eingabefeld_CursorS=Eingabefeld_AuswahlAS Eingabefeld_CursorZ=Eingabefeld_AuswahlAZ Local zeile1.EingabefeldZeile, zeile2.EingabefeldZeile, z2v.EingabefeldZeile zeile1=Eingabefeld_getZeile(Eingabefeld_AuswahlAZ) zeile2=Eingabefeld_getZeile(Eingabefeld_AuswahlEZ) Eingabefeld_modifyZeile zeile1, Left(zeile1\Text, Eingabefeld_AuswahlAS-1)+Mid(zeile2\Text, Eingabefeld_AuswahlES) Local r:For r=Eingabefeld_AuswahlEZ To Eingabefeld_AuswahlAZ+1 Step -1:z2v=zeile2:zeile2=Before zeile2 Delete z2v:Next Eingabefeld_Auswahl_aufheben End Function Function Eingabefeld_Auswahl_kopieren() Local zeilec$ Local zeile1.EingabefeldZeile=Eingabefeld_getZeile(Eingabefeld_AuswahlAZ) If Eingabefeld_AuswahlAZ=Eingabefeld_AuswahlEZ zeilec=Mid(zeile1\Text, Eingabefeld_AuswahlAS, Eingabefeld_AuswahlES-Eingabefeld_AuswahlAS) Else Local zeile2.EingabefeldZeile=Eingabefeld_getZeile(Eingabefeld_AuswahlEZ) zeilec=Chr(13)+Chr(10)+Left(zeile2\Text, Eingabefeld_AuswahlES-1) Local r:For r=Eingabefeld_AuswahlEZ-1 To Eingabefeld_AuswahlAZ+1 Step -1 zeile2=Before zeile2 zeilec=Chr(13)+Chr(10)+zeile2\Text+zeilec Next zeilec=Mid(zeile1\Text, Eingabefeld_AuswahlAS)+zeilec End If If Eingabefeld_BlitzSys_vorhanden Then DLLSetClipboardText zeilec Else Eingabefeld_Clipboard=zeilec End Function Function Eingabefeld_einfuegen() Local zeilec$ If Eingabefeld_BlitzSys_vorhanden Then zeilec=Replace(DLLEZGetClipboardText(), Chr(10), "") Else zeilec=Replace(Eingabefeld_Clipboard, Chr(10), "") If zeilec="" Then Return If Eingabefeld_Auswahl_vorhanden() Then Eingabefeld_Auswahl_loeschen Local len_zeilec_a=Len(zeilec) Local s.EingabefeldZeile=Eingabefeld_getZeile(Eingabefeld_CursorZ) Eingabefeld_Verarbeitung=s Local d.EingabefeldZeile=After s d=Eingabefeld_addZeile(d, Mid(s\Text, Eingabefeld_CursorS)) Eingabefeld_modifyZeile s, Left(s\Text, Eingabefeld_CursorS-1) Local n0.EingabefeldZeile=Null, n.EingabefeldZeile Local len_zeilec=len_zeilec_a, p Local umbruch_ende=(Right(zeilec, 1)=Chr(13)) Local umbruchzaehler=umbruch_ende-1 Repeat For p=1 To len_zeilec+1 If Mid(zeilec, p, 1)=Chr(13) Or p=len_zeilec+1 umbruchzaehler=umbruchzaehler+1 n=Eingabefeld_addZeile(d, Left(zeilec, p-1)) If n0=Null Then n0=n zeilec=Mid(zeilec, p+1) Exit End If Next len_zeilec=Len(zeilec) Until len_zeilec=0 If umbruch_ende Then n=Eingabefeld_addZeile(d, "") Local ntextlen=Len(n\Text) Eingabefeld_modifyZeile n, n\Text+d\Text Delete d Eingabefeld_modifyZeile s, s\Text+n0\Text Delete n0 If umbruchzaehler=0 Eingabefeld_CursorS=Eingabefeld_CursorS+len_zeilec_a Else Eingabefeld_CursorZ=Eingabefeld_CursorZ+umbruchzaehler Eingabefeld_CursorS=1+ntextlen End If Local zz=0:For n=Each EingabefeldZeile:zz=zz+1:Next Eingabefeld_Cursorposition_korrigieren zz, 1 Eingabefeld_Auswahl_aufheben End Function Function Eingabefeld_Cursorposition_korrigieren(zeilenanzahl, uebertrag) If Eingabefeld_CursorS<1 If uebertrag Eingabefeld_CursorZ=Eingabefeld_CursorZ-1 Eingabefeld_CursorS=Eingabefeld_getZeilenlaenge(Eingabefeld_CursorZ)+1 Else Eingabefeld_CursorS=1 End If ElseIf Eingabefeld_CursorS>Eingabefeld_getZeilenlaenge(Eingabefeld_CursorZ)+1 If uebertrag Eingabefeld_CursorZ=Eingabefeld_CursorZ+1 Eingabefeld_CursorS=1 Else Eingabefeld_CursorS=Eingabefeld_getZeilenlaenge(Eingabefeld_CursorZ)+1 End If End If If Eingabefeld_CursorZ>zeilenanzahl Eingabefeld_CursorZ=zeilenanzahl Eingabefeld_CursorS=Eingabefeld_getZeilenlaenge(Eingabefeld_CursorZ)+1 ElseIf Eingabefeld_CursorZ<1 Eingabefeld_CursorZ=1 Eingabefeld_CursorS=1 End If End Function Function Eingabefeld_Sichtfeld_an_Cursor_angleichen(grenze_l#, grenze_r#, grenze_o#, grenze_u#, zeichenbreite, zeichenhoehe) Local zz.EingabefeldZeile, zeilenanzahl=0, max_zeilenbreite=0 For zz=Each EingabefeldZeile zeilenanzahl=zeilenanzahl+1 If Len(zz\Text)>max_zeilenbreite Then max_zeilenbreite=Len(zz\Text) Next Local zeilennummerbreite=(Eingabefeld_komplex And Eingabefeld_Zeilennummern)*Len(zeilenanzahl) Local grenze_lZ=(Eingabefeld_ScrollX)/zeichenbreite+2 Local grenze_rZ=(grenze_r-grenze_l+Eingabefeld_ScrollX)/zeichenbreite-1-zeilennummerbreite Local grenze_oZ=(Eingabefeld_ScrollY)/zeichenhoehe+2 Local grenze_uZ=(grenze_o-grenze_u+Eingabefeld_ScrollY)/zeichenhoehe-1 If grenze_lZ>Eingabefeld_CursorS Then Eingabefeld_ScrollX=Eingabefeld_ScrollX-(grenze_lZ-Eingabefeld_CursorS)*zeichenbreite If grenze_rZ<Eingabefeld_CursorS Then Eingabefeld_ScrollX=Eingabefeld_ScrollX-(grenze_rZ-Eingabefeld_CursorS)*zeichenbreite If grenze_oZ>Eingabefeld_CursorZ Then Eingabefeld_ScrollY=Eingabefeld_ScrollY-(grenze_oZ-Eingabefeld_CursorZ)*zeichenhoehe If grenze_uZ<Eingabefeld_CursorZ Then Eingabefeld_ScrollY=Eingabefeld_ScrollY-(grenze_uZ-Eingabefeld_CursorZ)*zeichenhoehe Eingabefeld_Scrollposition_begrenzen grenze_l, grenze_r, grenze_o, grenze_u, zeichenbreite, zeichenhoehe, max_zeilenbreite, zeilenanzahl End Function Function Eingabefeld_Zeichen$(S, Z) If S<1 Then Return "" Local zeile.EingabefeldZeile=Eingabefeld_getZeile(Z) If zeile=Null Then Return "" Else Return Mid(zeile\Text, S, 1) End Function Function Eingabefeld_KeyDown_CoolDown(scancode) If Eingabefeld_KeyDown(scancode)>Eingabefeld_KeyRepeatDelay Then Eingabefeld_KeyDown(scancode)=Eingabefeld_KeyDown(scancode)-Eingabefeld_KeyRepeatInterval End Function Function Eingabefeld_Begrenzung$(BText$, maxBreite#, tschriftart=-1) If tschriftart=-1 Then tschriftart=Eingabefeld_schriftart Local Breite=StringWidth3D(tschriftart, BText) If Breite<=maxBreite Then Return BText Local maxLaenge=Len(BText) Local Schaetzwert=(maxBreite/Breite)*maxLaenge Local TText$ If Schaetzwert<0 Then TText="…" Else TText=Left(BText, Schaetzwert)+"…" Breite=StringWidth3D(tschriftart, TText) Select Sgn(Int(maxBreite-Breite)) Case 0 Return TText Case 1 While Schaetzwert<maxLaenge Schaetzwert=Schaetzwert+1 TText=Left(BText, Schaetzwert)+"…" If StringWidth3D(tschriftart, TText)>maxBreite Then Return Left(BText, Schaetzwert-1)+"…" Wend Return BText Case -1 While Schaetzwert>0 Schaetzwert=Schaetzwert-1 TText=Left(BText, Schaetzwert)+"…" If StringWidth3D(tschriftart, TText)<=maxBreite Then Return TText Wend Return "…" End Select End Function |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group