Seite 1 von 3

Scintilla Fragenkatalog

Verfasst: 31.10.2013 02:47
von _sivizius
Ohai,

damit mir sowas wie vorhin nicht nochmal passiert und ich in nächster Zeit bestimmt noch mehr Fragen haben werde bezüglich Scintilla, erstelle ich mal jenen Thread.
Anfangen möchte ich mit:
die Rohdaten abspeichern:

Code: Alles auswählen

Structure ScintillaRange
  cpMin.l
  cpMax.l
EndStructure
;...
;...
;...
If file
  length = ScintillaSendMessage(gadget, #SCI_GETTEXTLENGTH, 0, 0)
  *buffer = AllocateMemory(length)
  range.ScintillaRange\cpMax = 4
  range\cpMin = 0
  *buffer = ScintillaSendMessage(gadget, #SCI_GETSTYLEDTEXT, range)
  WriteData(file, *buffer, length)
  WriteByte(file, length)
  CloseFile(file)
EndIf
laut doc:

Code: Alles auswählen

SCI_GETSTYLEDTEXT(<unused>, TextRange *tr)
müsste:

Code: Alles auswählen

*tr.ScintillaRange = AllowcateMemory(8)
*tr\cpMax = 4
*tr\cpMin = 0
ScintillaSendMessage(gadget, #SCI_GETSTYLEDTEXT, *tr)
ergeben, tuts auch, nur gibt 0 aus
und die datei sieht auch ziemlich leer aus, auch wenn sie die richtige größe hat

Re: Scintilla Fragenkatalog

Verfasst: 31.10.2013 07:17
von Danilo
_sivizius hat geschrieben: laut doc:

Code: Alles auswählen

SCI_GETSTYLEDTEXT(<unused>, TextRange *tr)
Probier doch mal eine 0 für das <unused> zu übergeben:

Code: Alles auswählen

*buffer = ScintillaSendMessage(gadget, #SCI_GETSTYLEDTEXT, 0, range)

Re: Scintilla Fragenkatalog

Verfasst: 31.10.2013 12:22
von _sivizius
sobald ich mehr als 3 paramater übergebe kommt »Ungültiger Speicherzugriff« :-/

Re: Scintilla Fragenkatalog

Verfasst: 31.10.2013 13:06
von ts-soft

Re: Scintilla Fragenkatalog

Verfasst: 31.10.2013 13:36
von _sivizius
Da steht nichts zu drinne...

Re: Scintilla Fragenkatalog

Verfasst: 31.10.2013 14:36
von ts-soft
Wegen Deiner Parameter?
ScintillaSendMessage hat nur 4 Parameter, also Gadget und 3 Parameter, mehr geht nicht und ist nicht erforderlich.

Re: Scintilla Fragenkatalog

Verfasst: 31.10.2013 15:23
von _sivizius
?
wenn ich mehr als 3 parameter bei diesem einen befehl übergeben kommt ein speicherfehler
und da ist es völlig unerlässlich, ob der befehl im allg 4 befehle hat oder mehr.

Re: Scintilla Fragenkatalog

Verfasst: 31.10.2013 15:33
von _sivizius
oder anders formuliert:

Code: Alles auswählen

ScintillaSendMessage(gadget, #SCI_STYLESETBACK, #default, RGB(1,33,7))
funktioniert

Code: Alles auswählen

debug ScintillaSendMessage(gadget, #SCI_GETSTYLEDTEXT, irgendwas)
funktioniert, gibt aber 0 aus und ist damit unbrauchbar

Code: Alles auswählen

debug ScintillaSendMessage(gadget, #SCI_GETSTYLEDTEXT, 0, irgendwas)
ergibt »Ungültiger Speicherzugriff«
lösung ist für mich derzeit, dass ich mir den Text selber merke und

Code: Alles auswählen

ScintillaSendMessage(gadget, #SCI_SETSTYLEDTEXT, *MyStyledText)
nutze. Funktioniert prima, aber getstyledtext müsste ja auch irgendwie gehen

Re: Scintilla Fragenkatalog

Verfasst: 31.10.2013 16:55
von ts-soft

Code: Alles auswählen

Define TR.textrange

Debug ScintillaSendMessage(gadget, #SCI_GETSTYLEDTEXT, 0, @TR)
Du übergibst die Adresse einer strukturierten Variable. SCI_TextRange sollte dasselbe sein,
wie textrange (hab gerade keine Zeit nachzuschauen).
Den unbenutzten Parameter darfste nicht einfach weglassen, sondern durch 0 ersetzen!

Ich hoffe so kommst Du weiter.

Gruß
Thomas

http://www.scintilla.org/ScintillaDoc.h ... STYLEDTEXT

Re: Scintilla Fragenkatalog

Verfasst: 31.10.2013 17:33
von _sivizius
textrange ist zu groß und eine eigene definition als

Code: Alles auswählen

Structure ScintillaRange
  cpMin.l
  cpMax.l
EndStructure
hat zwar kein speicherzugriffsfehler mehr, dafür »Das mit dem debugger geöffnete exec. beendet unerwartet«, oder so.