Seite 3 von 3

Verfasst: 27.08.2006 20:03
von edel
Mal ganz simpel ...

Beispiel:

Code: Alles auswählen

h = OpenWindow(0,0,0,400,400,"")

CreateGadgetList(h)
hedit = EditorGadget(0,0,0,400,400)

SetGadgetText(0,"Das ist ein roter und grüner Text")


cf.charformat2\cbSize = SizeOf(charformat2) 
cf\dwMask       = #CFM_COLOR

cf\crTextColor  = $0000FF
SendMessage_(hedit,#EM_SETSEL,12,17)
SendMessage_(hedit,#EM_SETCHARFORMAT,#SCF_SELECTION,@cf)

cf\crTextColor  = $408000
SendMessage_(hedit,#EM_SETSEL,22,28)
SendMessage_(hedit,#EM_SETCHARFORMAT,#SCF_SELECTION,@cf)

SendMessage_(hedit,#EM_SETSEL,0,0)

Repeat
  e = WaitWindowEvent() 
Until e = #WM_CLOSE

Verfasst: 27.08.2006 23:42
von Falko
Ähnliches hatte ich schon mal gepostet, also hätte man nur nach
EditorGadget suchen müssen und wäre fündig geworden :mrgreen:

Code: Alles auswählen

;http://www.purebasic.fr/german/viewtopic.php?t=636&highlight=editorgadget
;Angepasst auf PB4
;Selektierte Buchstaben ersetzen bzw. färben.
;Codeschnipsel written by Falko
String$="Mein Test"
Buffer$=Space(255)
Global hdc
Global mychar.CHARFORMAT

  ;
  ;Ermittle die Anzahl Buchstaben der obrigen Zeile
  ;
  Procedure.l GetCursorPos(YPos.l)
   Result = SendMessage_(hdc,#EM_LINEINDEX,YPos,0)
   ProcedureReturn Result
  EndProcedure
 ;
 ; Farbe und Fontattribute setzen
  Procedure SetCharFormat(Mask.l,Effects.l,Color.l)
     ;mychar.CHARFORMAT ; Sollte vorher als global deklariert werden.
     mychar\cbSize=SizeOf(CHARFORMAT)
     mychar\dwMask=Mask;#CFM_BOLD|#CFM_COLOR ; Fettschrift und Color setzen 
     mychar\dwEffects=Effects
     mychar\yHeight=500
     mychar\crTextColor=Color
     mychar\bCharSet=0
     PokeS(@mychar\szFaceName, "Symbol")
  EndProcedure
 
 
  If OpenWindow(0,0,0,370,270,"StringGadget Flags",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
     hdc.l=EditorGadget (0,8,8,350,250); ,#PB_Container_Raised); mit diesem Eintrag wäre alles Rechtsbündig auch wenn es nicht in PB4 steht :D
     AddGadgetItem(0,0,"Wie wäre es mit dieser Zeile, die wir ändern wollen.")
     AddGadgetItem(0,1,"Wie wäre es mit dieser Zeile, die wir ändern wollen.")   
     AddGadgetItem(0,2,"Wie wäre es mit dieser Zeile, die wir ändern wollen.")
     ;
     ;In dieser Zeile ein Teilstring, Farbe und Fontattribut verändern
     ;
     Char=GetCursorPos(1)
     SendMessage_(hdc,#EM_SETSEL,Char+16,Char+28); markiere Textteil, der geändert werden soll
     SetCharFormat(#CFM_BOLD|#CFM_COLOR,1,$0000FF)
     SendMessage_(hdc,#EM_SETCHARFORMAT,#SCF_SELECTION,mychar); Setzen der Attribute auf selection
     SendMessage_(hdc,#EM_REPLACESEL,0,String$); Ersetze diesen Teil duch den String$
     ;
     ;Textteil Markieren und durch nur Farbe Blau und Fontattribute ersetzen
     ;
     
     Char=GetCursorPos(2)
     SendMessage_(hdc,#EM_SETSEL,Char+8,Char+8+8); markiere Textteil, der gefärbt werden soll
     SetCharFormat(#CFM_FACE | #CFM_SIZE | #CFM_COLOR,1,$FF0000)
     SendMessage_(hdc,#EM_SETCHARFORMAT,#SCF_SELECTION,mychar);Chare-Attribute setzen
     SendMessage_(hdc,#EM_GETSELTEXT,0,Buffer$); kopiere Selektieren Text in den Buffer 
     SendMessage_(hdc,#EM_REPLACESEL,0,Buffer$); ersetze Text dann aus dem Buffer mit den Attributen
     
   
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf

Verfasst: 28.08.2006 08:10
von Eckhard.S
@Falco
Herzlichen Dank! Manchmal sucht man nach "bunt" oder "farbig" und übersieht so einen Eintrag.

@Edel
Danke für die einfache Lösung und die Zusendung als Prozedur.

ALLE LÖSUNGEN HABE ICH UNTER
http://www.purebasic.fr/german/viewtopic.php?t=9581
AKTUALISIERT