Seite 5 von 5

Verfasst: 24.04.2006 18:17
von hardfalcon
Hmm, schade dass Fred bei PB4.0 nix neues mehr hinzufügen will so kurz vr der Final... Sonst hätte er womöglich das Scintilla-Gadget noch schnell einbaun können... :|

Verfasst: 26.04.2006 12:36
von ts-soft
Update
Ziemlich viel geändert :wink: , kann jetzt genauso wie das EditorGadget verwendet werden, optional kann es auch über das OOP-Interface verwendet werden, wobei dann mehr Möglichkeiten bestehen.
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)
Der Download wurde jetzt in das Example-Paket zu CreateGadget gepackt.
siehe hier: http://www.purebasic.fr/german/viewtopic.php?t=8071

Verfasst: 06.09.2006 23:32
von Thorsten1867
Wäre es möglich den Befehl "CountGadgetItems(#Gadget)" noch hinzufügen?

Leider durchsteige ich den Code noch nicht ganz, um das selber zu machen.

Verfasst: 07.09.2006 00:55
von ts-soft
Thorsten1867 hat geschrieben:Wäre es möglich den Befehl "CountGadgetItems(#Gadget)" noch hinzufügen?
Ja
Thorsten1867 hat geschrieben: Leider durchsteige ich den Code noch nicht ganz, um das selber zu machen.
Du solltest diesen Code auch besser nicht mehr verwenden, da gibts
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.

Verfasst: 07.09.2006 01:49
von ts-soft
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
  
ForEver

Verfasst: 07.09.2006 14:33
von Thorsten1867
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.
Das schaut ziemlich gut aus mit der Includeversion.
Ich brauche das ScintillaGadget nicht wegen der Editorfunktionen, sondern wegen der Genauigkeit der Textbreitenberechnung beim Zeilenumbruch (Text -> PDF Blocksatz).

Verfasst: 07.09.2006 17:26
von Thorsten1867
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.

Verfasst: 07.09.2006 17:52
von ts-soft
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?