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.