TextGadget formatieren

Anfängerfragen zum Programmieren mit PureBasic.
Goold
Beiträge: 14
Registriert: 04.02.2014 10:58

Re: TextGadget formatieren

Beitrag von Goold »

Danke für die schnellen Antworten.

Ich meinte natürlich das TextGadgetEx().

Ich versuche es mal mit der rtf-Formatierung. :allright:
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: TextGadget formatieren

Beitrag 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.
Signatur und so
Goold
Beiträge: 14
Registriert: 04.02.2014 10:58

Re: TextGadget formatieren

Beitrag 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.
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: TextGadget formatieren

Beitrag 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?
Signatur und so
Antworten