Scintilla Lib für PB 4 (Update, ist jetzt ein echtes Gadget)
- hardfalcon
- Beiträge: 3447
- Registriert: 29.08.2004 20:46
- 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
Update
Ziemlich viel geändert
, kann jetzt genauso wie das EditorGadget verwendet werden, optional kann es auch über das OOP-Interface verwendet werden, wobei dann mehr Möglichkeiten bestehen.
siehe hier: http://www.purebasic.fr/german/viewtopic.php?t=8071
Ziemlich viel geändert
Der Download wurde jetzt in das Example-Paket zu CreateGadget gepackt.Liesmich.txt hat geschrieben: ScintillaGadget Beschreibung:
Zum nutzen diese Gadget binden Sie einfach die "Scintilla.pbi" in den Source ein.
Erforderliche Dateien: Scintilla.pbi
Scintilla.dll (befindet sich im Compilers-Verzeichnis von PureBasic)
Scintilla_res.pb (enthält die Interface-Definition, sowie Konstanten und Structuren)
Scintilla_Macro.pbi (enthält Macros zur Nutzung mit dem Interface, entsprechen in etwa
den Funktionen, die in der Scintilla.pbi von GPI enthalten sind)
CreateGadget.pbi (wird für die Registrierung als Gadget benötigt!)
Syntax:
Ergebnis = ScintillaGadget(#Gadget, x, y, Breite, Hoehe [, Flags]) ; #PB_Any wird unterstützt!
Besondere Funktionen:
*Ergebnis.Scintilla = GetGadgetAttribute(#Gadget,#PB_SCINTILA_INTERFACE)
Das Ergebnis ist ein Pointer zum Interface, wie weiter unten beschrieben
Objektvariablen:
================
hWnd.l Handel des Controls
Id.l Gadget
pSCIWndData.l Directpointer
pSCIMsgProc.l Adresse der "Scintilla_DirectFunction"
Encoding.l Flag für UTF-8, 1 = UTF-8, 0 = ASCII
Methoden:
=========
SciMsg(Msg.l, param1.l = 0, param2.l = 0) Messages an das Control senden! Verwendet ScintillaDirectFunction
Load(FileName.s) Textdatei ins Control laden (autom. Umschaltung UTF-8)
Save(FileName.s) Text im Contol in eine Datei speichern (autom. Umschaltung UTF-8)
GetCurrentWord() Ermittelt das Wort, auf dem sich der Cursor befindet
SetStyle(style.l, fore.l, back.l, Size.l = 0, fontname.s = "") Einen Style setzen
SetCallback(*ProcAdress) NotifyCallback für Gadget (siehe Example)
siehe hier: http://www.purebasic.fr/german/viewtopic.php?t=8071
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- Thorsten1867
- Beiträge: 1360
- Registriert: 04.02.2005 15:40
- Computerausstattung: [Windows 10 x64] [PB V5.7x]
- Wohnort: Kaufbeuren
- Kontaktdaten:
- 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
JaThorsten1867 hat geschrieben:Wäre es möglich den Befehl "CountGadgetItems(#Gadget)" noch hinzufügen?
Du solltest diesen Code auch besser nicht mehr verwenden, da gibtsThorsten1867 hat geschrieben: Leider durchsteige ich den Code noch nicht ganz, um das selber zu machen.
Probleme mit dem Interface und den ASM-Anweisungen.
Nutze die Version im Includepack, die erfordert aber PBOSL_CreateGadget,
unterstützt zudem auch Unicode und ist in der Syntax der Include von GPI
ähnlich.
http://www.purebasic.fr/german/viewtopic.php?t=9190
CountGadgetItems sollte SCI_GETLINECOUNT entsprechen.
Die Itembefehle vom EditorGadget sind zwar hilfreich bei einfachen
Textausgaben, aber sobald Edit-Funktionen im Spiel sind, bringt es nicht
viel. Im ScintillaGadget so etwas zu implementieren wäre IMHO nicht sehr
sinnvoll.
Gruß
Thomas
PS: Die Version in den PBOSL_Examples hab ich bereits vor längerem,
wegen der Fehler entfernt.
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- 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
Hier mal ein Beispielcode:
Code: Alles auswählen
XIncludeFile #PB_Compiler_Home + "Includes\Scintilla_Include.pbi"
If Not InitSciEdit() : End : EndIf
If Not OpenWindow(0, #PB_Ignore, 0, 640, 480, "") : End : EndIf
If CreateGadgetList(WindowID(0))
SciEditGadget(0, 0, 0, 0, 0)
EndIf
Text.s = "Hallo die Enten" + #CRLF$
Text + "Holla der Rucksack brennt" ; 2 Zeilen
SetGadgetText(0, text)
Debug SCI_GetLineCount(0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_SizeWindow
ResizeGadget(0, #PB_Ignore, #PB_Ignore, WindowWidth(0), WindowHeight(0))
EndSelect
ForEverPureBasic 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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- Thorsten1867
- Beiträge: 1360
- Registriert: 04.02.2005 15:40
- Computerausstattung: [Windows 10 x64] [PB V5.7x]
- Wohnort: Kaufbeuren
- Kontaktdaten:
Das schaut ziemlich gut aus mit der Includeversion.ts-soft hat geschrieben:Die Itembefehle vom EditorGadget sind zwar hilfreich bei einfachen Textausgaben, aber sobald Edit-Funktionen im Spiel sind, bringt es nicht viel. Im ScintillaGadget so etwas zu implementieren wäre IMHO nicht sehr sinnvoll.
Ich brauche das ScintillaGadget nicht wegen der Editorfunktionen, sondern wegen der Genauigkeit der Textbreitenberechnung beim Zeilenumbruch (Text -> PDF Blocksatz).
- Thorsten1867
- Beiträge: 1360
- Registriert: 04.02.2005 15:40
- Computerausstattung: [Windows 10 x64] [PB V5.7x]
- Wohnort: Kaufbeuren
- Kontaktdaten:
Habe es intensiv getestet. Dabei ist für mich ein Problem aufgetreten, das ich bisher nicht lösen konnte.
Ich wollte das Gadget zeilenweisen auslesen (WordWrapMode = 1), aber ich erhalte nicht die Zeile im Gadget (Umbruch), sondern stets alle Zeichen bis zum #CRLF$. Das gleiche passiert beim Zählen der Zeile. Im Gadget sind es 4 Zeilen, gezählt werden aber 2, weil es nur einen Zeilenumbruch (#CRLF$) gibt.
Für meine PDF-Ausgabe (Cell) benötige ich die Anzahl Zeilen und müsste Trennungen so wie sie später beim Ausdruck erscheinen (zeilenweise) auswerten.
Ich wollte das Gadget zeilenweisen auslesen (WordWrapMode = 1), aber ich erhalte nicht die Zeile im Gadget (Umbruch), sondern stets alle Zeichen bis zum #CRLF$. Das gleiche passiert beim Zählen der Zeile. Im Gadget sind es 4 Zeilen, gezählt werden aber 2, weil es nur einen Zeilenumbruch (#CRLF$) gibt.
Für meine PDF-Ausgabe (Cell) benötige ich die Anzahl Zeilen und müsste Trennungen so wie sie später beim Ausdruck erscheinen (zeilenweise) auswerten.
- 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
Diese Gadget ist für Programmiersprachen, da macht ein Zeilenumbruch
keinen Sinn und ist auch nur Optisch. Die Zeilen werden aber immer Real
gezählt. Da kann ich Dir nicht helfen, ob das geht?
keinen Sinn und ist auch nur Optisch. Die Zeilen werden aber immer Real
gezählt. Da kann ich Dir nicht helfen, ob das geht?
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
