Seite 1 von 1

Scintilla-Control auslesen (SCI_GETTEXT schlägt fehl)

Verfasst: 08.08.2014 15:50
von Kiffi
Hallo,

ich möchte den aktuellen Text aus der PB-IDE auslesen. Das Handle des Scintilla-Controls habe ich vorher mit Spy++ ermittelt (da der Code später mal für ein PB-Tool sein soll, werde ich das Handle dann mittels GetEnvironmentVariable("PB_TOOL_Scintilla") ermitteln).

Nachfolgender Code ermittelt zwar die korrekte Länge des Textes (das schließt schon mal aus, dass ich das falsche Handle verwende), aber nicht den Text selber. Weiß jemand, warum?

Code: Alles auswählen

EnableExplicit

Define SCI
Define length
Define buffer

SCI = 2624706

length = SendMessage_(SCI, #SCI_GETLENGTH, 0, 0) 

Debug length ; hier wird die korrekte Länge ausgegeben

If length
 length + 1
 buffer = AllocateMemory(length)
 SendMessage_(SCI, #SCI_GETTEXT, length, buffer)
 Debug ">" + PeekS(buffer, -1, #PB_UTF8) + "<" ; Ausgabe: '><'
 FreeMemory(buffer)
EndIf
Danke im voraus & Grüße ... Kiffi

Re: Scintilla-Control auslesen (SCI_GETTEXT schlägt fehl)

Verfasst: 08.08.2014 16:02
von Danilo
Dein Buffer ist für das externe Scintilla-Gadget in einem anderen Process, und da kann es nicht einfach reinschreiben.

Schau mal hier: PB IDE Smart Highlight (showing selected text) implement

Dort lese ich den Text über den CharacterPointer (#SCI_GETCHARACTERPOINTER) aus. Das geschieht über OpenProcess_() und ReadProcessMemory_().
Vielleicht hilft Dir das als Start.

Re: Scintilla-Control auslesen (SCI_GETTEXT schlägt fehl)

Verfasst: 08.08.2014 16:14
von Kiffi
Danilo hat geschrieben:Vielleicht hilft Dir das als Start.
jau, hat geholfen. :D Vielen Dank für Deinen Tipp! :allright:

Grüße ... Kiffi

Re: Scintilla-Control auslesen (SCI_GETTEXT schlägt fehl)

Verfasst: 08.08.2014 16:17
von bobobo
Hmm .. Spydingsbums, wie unpopulär

Geht das noch?

(Muss als EXE aus der IDE (als tool) ausgerufen werden)

Code: Alles auswählen

scintilla=Val(GetEnvironmentVariable("PB_Tool_Scintilla"))
 If scintilla
   SendMessage_(scintilla,#SCI_SETWRAPVISUALFLAGS,#SC_WRAPVISUALFLAG_START,0)
   SendMessage_(scintilla,#SCI_SETWRAPSTARTINDENT,2,0)   ; <-- indent amount
   SendMessage_(scintilla,#SCI_SETWHITESPACEFORE,#True,RGB(4, 141, 251))   ; <- colour of marker
   SendMessage_(scintilla,#SCI_SETWRAPMODE,1-SendMessage_(scintilla,#SCI_GETWRAPMODE,0,0),0)
 EndIf
 End
;
:oops: etwas spät und etwas wenig

Re: Scintilla-Control auslesen (SCI_GETTEXT schlägt fehl)

Verfasst: 08.08.2014 17:55
von Kiffi
bobobo hat geschrieben:Hmm .. Spydingsbums, wie unpopulär
... aber effektiv, wenn man nicht immer wieder das Tool kompilieren will und dann in einer 'Blackbox' nach Fehlern suchen muss...

Hierfür habe ich's gebraucht: http://www.purebasic.fr/german/viewtopi ... =8&t=28267

Grüße ... Kiffi