Anfang u. Ende von markiertem Text in EditorGadget n

Anfängerfragen zum Programmieren mit PureBasic.
Calloway
Beiträge: 106
Registriert: 15.09.2004 23:26

Anfang u. Ende von markiertem Text in EditorGadget n

Beitrag 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.
Christi
Beiträge: 154
Registriert: 31.08.2004 14:17
Kontaktdaten:

Beitrag 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
Calloway
Beiträge: 106
Registriert: 15.09.2004 23:26

Beitrag von Calloway »

Danke für die Antwort.

Also: der y-Wert gibt die Zeile des Selektierten aus. Aber was besagt der x-Wert?
Christi
Beiträge: 154
Registriert: 31.08.2004 14:17
Kontaktdaten:

Beitrag von Christi »

ich hab unaufmerksam gelesen, der code zeigt die aktuelle cursorposition an
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag 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

Calloway
Beiträge: 106
Registriert: 15.09.2004 23:26

Beitrag 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.
Christi
Beiträge: 154
Registriert: 31.08.2004 14:17
Kontaktdaten:

Beitrag 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
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag 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
Christi
Beiträge: 154
Registriert: 31.08.2004 14:17
Kontaktdaten:

Beitrag von Christi »

Ich würde mich sehr drüber aufregen wenn ein Programm ohne mein Zutun die Zwischenablage ändert.
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag 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.
Antworten