Seite 1 von 2
Anfang u. Ende von markiertem Text in EditorGadget n
Verfasst: 17.08.2005 00:17
von Calloway
Hallo!
So, jetzt habe ich ne halbe Stunde damit verbracht, das Forum zu durchsuchen, um eine Antwort zu meiner Frage zu bekommen. Nun muss ich sie doch stellen...
Wie kann ich die Position (Zeile und Spalte) des ersten und letzten Buchstabens eines markierten Textes im EditorGadget ermitteln? AFAIK geht das nur mit den SendMessage-Befehlen, von denen ich keine Ahnung habe.
Verfasst: 17.08.2005 00:26
von Christi
Code: Alles auswählen
SendMessage_(GadgetID(0), #EM_EXGETSEL, 1, range.charrange)
CurrentLineIndex = SendMessage_(GadgetID(0), #EM_EXLINEFROMCHAR, 0, range\cpMin)
y = CurrentLineIndex + 1
CurrentLineStartIndex = SendMessage_(GadgetID(0), #EM_LINEINDEX, CurrentLineIndex, 0)
x = range\cpMax - CurrentLineStartIndex + 1
Debug x
Debug y
Verfasst: 17.08.2005 00:46
von Calloway
Danke für die Antwort.
Also: der y-Wert gibt die Zeile des Selektierten aus. Aber was besagt der x-Wert?
Verfasst: 17.08.2005 01:04
von Christi
ich hab unaufmerksam gelesen, der code zeigt die aktuelle cursorposition an
Verfasst: 17.08.2005 01:19
von Hroudtwolf
Hört sich sich so an als wolltest du etwas ersetzen oder kopieren.
Wenn dem so ist dann hab ich was für dich.
Code: Alles auswählen
Procedure CutEditorText(gadget)
SendMessage_(GadgetID(gadget), #WM_CUT,0,0)
EndProcedure
Procedure CopyEditorText(gadget)
SendMessage_(GadgetID(gadget), #WM_COPY,0,0)
EndProcedure
Procedure InsertEditorText(gadget,Text$)
ProcedureReturn SendMessage_(GadgetID(gadget),#EM_REPLACESEL,0,Text$)
EndProcedure
Verfasst: 17.08.2005 08:42
von Calloway
Hroudtwolf hat geschrieben:Hört sich sich so an als wolltest du etwas ersetzen oder kopieren.
Nein, eigentlich nicht. Ich möchte VOR und HINTER dem markierten Text etwas einfügen.
Verfasst: 17.08.2005 11:23
von Christi
so ungefähr ?
Code: Alles auswählen
OpenWindow(0, 0, 0, 200, 220, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Test")
CreateGadgetList(WindowID())
editorid.l = EditorGadget(0, 0, 0, 200, 200)
ButtonGadget(1, 50, 200, 100, 20, "Klick")
For z.l = 1 To 10
AddGadgetItem(0, -1, "zeile " + Space(z) + Str(z.l))
Next
Repeat
w_ereignis.l = WaitWindowEvent()
Select w_ereignis.l
Case #PB_Event_Gadget
If EventGadgetID() = 1
textlaenge.l = SendMessage_(editorid.l, #wm_gettextlength, 0, 0)
text.l = AllocateMemory(textlaenge.l)
SendMessage_(editorid.l, #wm_gettext, textlaenge.l, text.l)
SendMessage_(editorid.l, #em_getsel, @anfang, @ende)
anfang + SendMessage_(editorid.l, #EM_EXLINEFROMCHAR, 0, anfang)
ende + SendMessage_(editorid.l, #EM_EXLINEFROMCHAR, 0, ende)
SendMessage_(editorid.l, #EM_REPLACESEL, 0, ">" + PeekS(text + anfang, ende - anfang) + "<")
FreeMemory(text.l)
EndIf
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Verfasst: 17.08.2005 14:47
von Hroudtwolf
Nix leichter als das.
Code: Alles auswählen
CopyEditorText(gadget)
Text$ = "Vor "+GetClipboardText()+" Hinter"
SetClipboardText(Text$)
InsertEditorText(gadget,Text$)
;---------------------------------------------------------------
Procedure CopyEditorText(gadget)
SendMessage_(GadgetID(gadget), #WM_COPY,0,0)
EndProcedure
Procedure InsertEditorText(gadget,Text$)
ProcedureReturn SendMessage_(GadgetID(gadget),#EM_REPLACESEL,0,Text$)
EndProcedure
Verfasst: 17.08.2005 14:51
von Christi
Ich würde mich sehr drüber aufregen wenn ein Programm ohne mein Zutun die Zwischenablage ändert.
Verfasst: 17.08.2005 15:07
von Hroudtwolf
Soso.
Du benutzt also kein Word, bei PB benutzt du auch bestimmt die Kopieren Funktion nicht.
Das Clipboard ist für alle da. Das ist keine privater Bereich auf deinem PC.