Scintilla Fragenkatalog

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Scintilla Fragenkatalog

Beitrag 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
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Scintilla Fragenkatalog

Beitrag 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)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Re: Scintilla Fragenkatalog

Beitrag von _sivizius »

sobald ich mehr als 3 paramater übergebe kommt »Ungültiger Speicherzugriff« :-/
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Scintilla Fragenkatalog

Beitrag von ts-soft »

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Re: Scintilla Fragenkatalog

Beitrag von _sivizius »

Da steht nichts zu drinne...
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Scintilla Fragenkatalog

Beitrag von ts-soft »

Wegen Deiner Parameter?
ScintillaSendMessage hat nur 4 Parameter, also Gadget und 3 Parameter, mehr geht nicht und ist nicht erforderlich.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Re: Scintilla Fragenkatalog

Beitrag 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.
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Re: Scintilla Fragenkatalog

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Scintilla Fragenkatalog

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Re: Scintilla Fragenkatalog

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