EditorGadget frage...
EditorGadget frage...
Hallo,
ist es eigentlich irgendwie möglich Text an der Cursor-Position einfügen zu lassen?
Man kann ja nur in eine neue Zeile entweder am Anfang oder hinten dran Text einfügen lassen.
Sorry, weiß nicht ob ich mich klar genug ausdrücke.
Was ich machen möchte: ich hab schon einiges an Text im EditorGadget stehen.
Nun möchte ich irgendwo innerhalb des Textes mit dem Cursor hin springen und z.B. wenn ich auf die Taste "Hallo" drücke, soll er genau an dieser Stelle "Hallo" eifügen.
So oder so ähnlich.
ist es eigentlich irgendwie möglich Text an der Cursor-Position einfügen zu lassen?
Man kann ja nur in eine neue Zeile entweder am Anfang oder hinten dran Text einfügen lassen.
Sorry, weiß nicht ob ich mich klar genug ausdrücke.
Was ich machen möchte: ich hab schon einiges an Text im EditorGadget stehen.
Nun möchte ich irgendwo innerhalb des Textes mit dem Cursor hin springen und z.B. wenn ich auf die Taste "Hallo" drücke, soll er genau an dieser Stelle "Hallo" eifügen.
So oder so ähnlich.
netmaestro hat im englischen Forum gezeigt, wie man einen Text an einer bestimmten Position im EditorGadget einfügt:
http://www.purebasic.fr/english/viewtop ... 83&start=4
Thorsten1867 hat in einem Beitrag gezeigt, wie man die aktuelle Cursor-Position im EditorGadget ermittelt:
http://www.purebasic.fr/german/viewtopi ... 75&start=3
http://www.purebasic.fr/english/viewtop ... 83&start=4
Thorsten1867 hat in einem Beitrag gezeigt, wie man die aktuelle Cursor-Position im EditorGadget ermittelt:
http://www.purebasic.fr/german/viewtopi ... 75&start=3
Ich habe zum besseren Verständnis die beiden oben zitierten Programme vereinfacht und in einem einzigen kurzen Programm zusammengefaßt:
Code: Alles auswählen
If OpenWindow(0, 0, 0, 340, 140, "Text an Cursor-Position einfügen", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
EditorGadget(0, 0, 0, 340, 100, #ES_MULTILINE)
ButtonGadget(1, 110, 110, 100, 20, "'Hallo! ' einfügen")
SetGadgetText(0, "Beim Programmieren mit C habe ich gelernt, Bugs zu produzieren." + #CR$ + "Seit ich C++ benutze, kann ich die Bugs sogar vererben ;-)")
SetActiveGadget(0)
Repeat
WindowEvent = WaitWindowEvent()
Select WindowEvent
Case #PB_Event_Gadget
Select EventGadget()
Case 1
SetActiveGadget(0)
SendMessage_(GadgetID(0), #EM_EXGETSEL, 0, Range.CHARRANGE)
SendMessage_(GadgetID(0), #EM_SETSEL, Range\cpMin, Range\cpMin)
SendMessage_(GadgetID(0), #EM_REPLACESEL, 1, @"Hallo! ")
EndSelect
EndSelect
Until WindowEvent = #PB_Event_CloseWindow
EndIf
>>Windows-API, richtig?
Korrekt. In PureBASIC sind sehr viele Windows API (Application Programming Interface) Funktionen schon vordefiniert. Man erkennt API-Funktionen in PB am nachgestellten Unterstrich wie in SendMessage_(...). Wenn man in seinem PB-Installationsverzeichnis den Ordner Help anlegt und dort die Hilfe-Datei Win32.Hlp (http://www.purebasic.com/download/WindowsHelp.zip) hineinkopiert, kann man sogar über die F1-Taste direkt die Beschreibung zu einer API-Funktion erhalten. Allerdings ist die 24 MByte große Win32.Hlp mittlerweile veraltet. Profis installieren sich daher das Microsoft Platform SDK, das allerdings entpackt je nach installiertem Umfang mehrere GByte Platz in Anspruch nimmt. Beschrieben ist dies alles unter diesem PB-Link:
http://www.purebasic.com/german/documen ... _help.html
Wenn man das Platform SDK nicht installieren möchte, kann man aber auch alle API-Funktionen, die in Win32.Hlp fehlen, über eine Google-Suche ermitteln und dort den entsprechenden Microsoft MSDN-Eintrag anklicken.
>>Verstehe aber leider nix von dem Code.
Dem kann man abhelfen: bewirkt, daß Windows eine CHARRANGE-Struktur zurückliefert. Diese Struktur kann man in der PB-IDE nachschlagen, wenn man auf "Werkzeuge/Strukturverzeichnis" klickt, den Karteireiter "Strukturen" aktiviert, unter dem Buchstaben "C" den Eintrag "CHARRANGE" sucht und einen Doppelklick auf diesen Eintrag ausführt. Kurz gesagt liefert diese Struktur die Start- und Ende-Position eines markierten Bereiches im EditorGadget.Diese Funktion wählt einen Bereich im EditorGadget aus, in dem die nächste Aktion stattfinden soll. Range\cpMin ist die Position aus der CHARRANGE-Struktur, an der der Cursor augenblicklich steht, bzw. der Beginn eines markierten Bereiches.Mit dieser Funktion wird der zuvor spezifizierte Bereich durch die angegebene Zeichenkette "Hallo! " ersetzt, in diesem Falle lediglich eingefügt.
Das war's eigentlich schon. Bei weiteren Verständnisproblemen bitte einfach noch einmal nachfragen...
Korrekt. In PureBASIC sind sehr viele Windows API (Application Programming Interface) Funktionen schon vordefiniert. Man erkennt API-Funktionen in PB am nachgestellten Unterstrich wie in SendMessage_(...). Wenn man in seinem PB-Installationsverzeichnis den Ordner Help anlegt und dort die Hilfe-Datei Win32.Hlp (http://www.purebasic.com/download/WindowsHelp.zip) hineinkopiert, kann man sogar über die F1-Taste direkt die Beschreibung zu einer API-Funktion erhalten. Allerdings ist die 24 MByte große Win32.Hlp mittlerweile veraltet. Profis installieren sich daher das Microsoft Platform SDK, das allerdings entpackt je nach installiertem Umfang mehrere GByte Platz in Anspruch nimmt. Beschrieben ist dies alles unter diesem PB-Link:
http://www.purebasic.com/german/documen ... _help.html
Wenn man das Platform SDK nicht installieren möchte, kann man aber auch alle API-Funktionen, die in Win32.Hlp fehlen, über eine Google-Suche ermitteln und dort den entsprechenden Microsoft MSDN-Eintrag anklicken.
>>Verstehe aber leider nix von dem Code.

Dem kann man abhelfen:
Code: Alles auswählen
SendMessage_(GadgetID(0), #EM_EXGETSEL, 0, Range.CHARRANGE)
Code: Alles auswählen
SendMessage_(GadgetID(0), #EM_SETSEL, Range\cpMin, Range\cpMin)
Code: Alles auswählen
SendMessage_(GadgetID(0), #EM_REPLACESEL, 1, @"Hallo! ")
Das war's eigentlich schon. Bei weiteren Verständnisproblemen bitte einfach noch einmal nachfragen...

Re: EditorGadget frage...
Na, das sieht doch schon mal brauchbar aus. Aber bei mir wird es jetzt etwas schwierig.
Ich möchte aus dem Editor den Text mit Farbe, Größe, Fonts usw. entnehmen und in einen anderen Editor in HTML Code umwandeln
Also ich schreibe im Editor zB. in Rot "Verkaufe" und in einer anderen Farbe z.B. "Socken"
Nun muss das in einen anderen Editor gleichzeitig in HTML-Code umgewandelt werden.
<p><font color='#FF0000' font-size='8' font-face='Arial'>Verkaufe</font></p>
<p><font color='#FF00FF' font-size='8' font-face='Arial'>Socken</font></p>
Für Eure Hilfe und Vorschläge bin ich Euch sehr Verbunden...
Im übrigen, das Einfärben von Text im Editor funktioniert!
Ich möchte aus dem Editor den Text mit Farbe, Größe, Fonts usw. entnehmen und in einen anderen Editor in HTML Code umwandeln
Also ich schreibe im Editor zB. in Rot "Verkaufe" und in einer anderen Farbe z.B. "Socken"
Nun muss das in einen anderen Editor gleichzeitig in HTML-Code umgewandelt werden.
<p><font color='#FF0000' font-size='8' font-face='Arial'>Verkaufe</font></p>
<p><font color='#FF00FF' font-size='8' font-face='Arial'>Socken</font></p>
Für Eure Hilfe und Vorschläge bin ich Euch sehr Verbunden...
Im übrigen, das Einfärben von Text im Editor funktioniert!
Speddy
Re: EditorGadget frage...
Hier mal ein Vorschlag in eine mögliche Richtung: #EM_GETCHARFORMAT mit SendMessage_(...)
MSDN sagt : Determines the character formatting in a rich edit control.
Da EditorGadget auf rich edit control basiert... aktuell auf Basis der MSFEDIT.DLL (Classname = RichEdit50W)
im Englischen Forum: Search Editorgadget
https://www.purebasic.fr/english/viewto ... 13&t=75906
direkt auf der Microsoft Seite:
https://docs.microsoft.com/en-us/window ... t-controls
https://docs.microsoft.com/en-us/window ... charformat
MSDN sagt : Determines the character formatting in a rich edit control.
Da EditorGadget auf rich edit control basiert... aktuell auf Basis der MSFEDIT.DLL (Classname = RichEdit50W)
im Englischen Forum: Search Editorgadget
https://www.purebasic.fr/english/viewto ... 13&t=75906
direkt auf der Microsoft Seite:
https://docs.microsoft.com/en-us/window ... t-controls
https://docs.microsoft.com/en-us/window ... charformat
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Re: EditorGadget frage...
oh man, harte Materie....
ok, vielen Dank erstmal. Muss mich mal durcharbeiten und schauen wie ich das Bewerkstellige -:~
ok, vielen Dank erstmal. Muss mich mal durcharbeiten und schauen wie ich das Bewerkstellige -:~
Speddy