Seite 1 von 1

EditorGadget: Farbige Texte, Fonts, Zeilenumbrüche

Verfasst: 15.08.2006 08:23
von Eckhard.S
Es dauerte eine Weile, bis ich als Anfänger aus dem Forum und Codearchiv alles zusammen hatte um ein EditorGadget farbig mit
Zeilenumbrüchen
und verschiedenen Schriften zu gestalten.

Hier die Zusammenfassung für ebensolche Neulinge:
Ein EditorGadget versteht RTF.

Erstelle mit Wordpad einen bunten Text und speichere ihn mit "Datei - speichern unter.." mit Dateityp RTF-Format als text.rtf
Nenne die Datei um zu text.txt und öffne diesen Text mit einem Editor. Nun wird der RTF-Code angezeigt.
Dieser Code ist der String, den man anzuzeigen hat. Man kann ihn z.B. zeilenweise aufaddieren. Achtung! Ein Zeilenumbruch in RTF ist \par und danach muss ein Leerzeichen kommen, wenn man den String aufaddiert.

Hier ein Beispiel:

Code: Alles auswählen


; PB 4.0

OpenWindow(0, 200, 200, 400, 200,"EditorGadget", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget) 
CreateGadgetList(WindowID(0)) 
EditorGadget(0, 0, 0, WindowWidth(0), WindowHeight(0)) 


text$ = "{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fmodern\fprq1\fcharset0 Courier New;}{\f1\fswiss\fprq2\fcharset0 Arial;}{\f2\fswiss\fprq2\fcharset0 Verdana;}}"
text$ = text$ + "{\colortbl ;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;}"
text$ = text$ + "\viewkind4\uc1\pard\f0\fs20 normal \cf1 rot\cf0  \cf2 gr\'fcn\cf0  \b fett\b0  \cf3\b fettblau \cf0\b0 normal\par "
text$ = text$ + "Zeilenumbruch \f1 Arial, \f2\fs28 Verdana\fs20 , \f0 Courier New\cf4\par "
text$ = text$ + "}"

SetGadgetText(0, text$) 

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
*****************************

Eine einfache Lösung für Farben, diesmal mit API-Befehlen, hat mir Edel zugeschickt:

Code: Alles auswählen

; PB 4.0 - Bunte Texte im EditorGadget 

Procedure SetColor(id,s,e,color) 
  Protected cf.charformat2\cbSize = SizeOf(charformat2) 
  Protected sel.CHARRANGE 
  SendMessage_(GadgetID(id),#EM_EXGETSEL,0,sel) 
  cf\dwMask       = #CFM_COLOR 
  cf\crTextColor  = color              
  SendMessage_(GadgetID(id),#EM_SETSEL,s,e)   
  SendMessage_(GadgetID(id),#EM_SETCHARFORMAT,#SCF_SELECTION,@cf) 
  SendMessage_(GadgetID(id),#EM_SETSEL,sel\cpMin,sel\cpMax) 
EndProcedure 

OpenWindow(0,0,0,400,100,"") 

CreateGadgetList(WindowID(0)) 
EditorGadget(0,0,0,300,80) 
ButtonGadget(1,310,10,50,18,"Bunt") 
ButtonGadget(2,310,30,50,18,"Schwarz") 

SetGadgetText(0,"Das ist ein roter und grüner Text im EditorGadget") 
  
Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow 
      Break 
    Case #PB_Event_Gadget 
      Select EventGadget() 
        Case 1    ; Button "Bunt" 
          SetColor(0,12,17,$0000FF)  ; anstelle $0000FF ist natürlich auch RGB(255,0,0) möglich 
          SetColor(0,22,28,$408000)   ; 
        
        Case 2    ; Button "Schwarz" 
          SetColor(0,0,28,$0)  
      EndSelect 
  EndSelect 
ForEver 
End 
***************************

Eine weitere Lösung gibt es von Falko:

http://www.purebasic.fr/german/viewtopi ... itorgadget


Viel Spaß

Verfasst: 15.08.2006 08:53
von Eckhard.S
P.S. Fortgeschrittene bedienen sich der CatchRTF-Prozeduren:

http://www.purearea.net/pb/CodeArchiv/G ... atchRTF.pb

Verfasst: 22.08.2006 22:40
von Konne
Cool thx