Seite 2 von 2

Re: TextGadget formatieren

Verfasst: 11.08.2014 09:59
von Goold
Danke für die schnellen Antworten.

Ich meinte natürlich das TextGadgetEx().

Ich versuche es mal mit der rtf-Formatierung. :allright:

Re: TextGadget formatieren

Verfasst: 11.08.2014 10:45
von Derren
Das liegt daran, dass nicht das ReadOnly-Flag verwendet wurde, sondern DisableGadget(). Bei dieser Funktion wird das Gadget immer Grau (oder welche Farbe auch immer vom System vorgegeben wird) hinterlegt.

Die Frage ist, was dir lieber ist. Ein passives Gadget, wie das TextGadget, oder ein farbiges Gadget, bei dem man aber immernoch den Cursor blinken sieht, wenn man drauf klickt und den Text markieren und Kopieren kann.

Also, in dem TextGadgetEx()-Code DisableGadget() entfernen und dann beim Aufruf von TextGadgetEx() nach OpenWindow() einfach #PB_Editor_ReadOnly als flag hinzufügen.
Dann klappt auch SetGadgetColor().


Guck dir mal diesen Code an: Keine vollwertige Lib, aber vielleicht hilft's dir ja schon. Der Code wandelt einfachen HTML-Code um.
Das heißt <b,i,u,s> und <color>
Die Farben für color müssen vorher definiert werden mit AddColor() und dann mit <color=myColor> anstatt <color=#FF0000>Rot</color> eingesetzt werden.

Ist auf jeden Fall einfacher als den kompletten Text in RTF zu formatieren :)


PS: Aber warum geht das nur im Ascii-Modus? Ist doch stinknormaler Text, ist das EditorGadget, oder gar das entsprechende WindowsControl zu blöde für Unicode? Das ist ja beunruhigend, da Fred den Ascii-Support in der nächsten LTS Version einstellt. Dann ist nichts mehr mit RTF Formatierunge im EditorGadget und es wird zum Multiline StringGadget reduziert.

Re: TextGadget formatieren

Verfasst: 11.08.2014 11:03
von Goold
Mit #PB_Editor_ReadOnly hatte ich zuerst operiert, aber die Textmarkierung und der Cursor störten mich doch. Meine Vermutung ist, dass wegen DisableGadget() sämtlich Versuche, die Hintergrundfarbe zu ändern, scheitern werden. Eine Kröte werde ich da wohl schlucken müssen.

Das rtf-Format hat u. a. den Charme, dass man bedingte Trennzeichen in den Text einbauen kann, so dass bei einer variablen Gadgetbreite brauchbare Zeilenumbrüche erfolgen.

Re: TextGadget formatieren

Verfasst: 11.08.2014 11:15
von Derren
Das kannst du auch so.
Du musst ja einfach nur in dem Code ein ReplaceString einbauen.
In html wäre der Code &shy; aber das erhöht die Lesbarkeit des Textes nicht gerade, aber du kannst jedes beliebige Zeichen oder Zeichenkette mit dem RTF Befehl ersetzen. z.B. |-| oder (-) etc...
Du kanns natürlich auch direkt den RTF Code verwenden.

Aber gerade bei farbigem Text ist das automatische Erstellen der Farbtabelle schon ein nettes Feature :)



edit: Zum Thema Unicode habe ich das hier gefunden. Weiß zwar nicht nicht was der Code macht, aber es funktioniert:

http://purebasic.fr/english/viewtopic.p ... 23#p416723

Code: Alles auswählen

If OpenWindow(0, 0, 0, 540, 260, "EditorGadget", #PB_Window_SystemMenu |  #PB_Window_ScreenCentered)
   EditorGadget(0, 5, 5, 530, 250)
   a$ = "{\rtf1\ansi\ansicpg1252\deff0\deflang3082{\fonttbl{\f0\fswiss\fcharset0 Verdana;}}"
   a$ + "{\colortbl ;\red255\green102\blue0;\red128\green128\blue128;}"
   a$ + "\viewkind4\uc1\pard\qc\f0\fs20\par"
   a$ + "\cf1\ul\b\i\fs28 APPNAME é à ç è ê"
   a$ + "}"

   ;Next 4 lines enable Unicode Support
   *mem = AllocateMemory(StringByteLength(a$, #PB_Ascii) + 1) 
   PokeS(*mem, a$, -1, #PB_Ascii)
   SetGadgetText(0,PeekS(*mem))
   FreeMemory(*mem)

   Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Ich schätze der BOM wird damit gelöscht?